c51汇编语言循环指令,汇编语言循环指令loop
loop指令为循环指令,所有的循环指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址。对IP的修改范围都为:-128--127
Loop指令的格式:
loop标号((cx)=(cx)-1,如果(cx) ≠ 0,转移到标号处执行。
操作:
(1)(cx)=(cx)-1
(2)判断cx的值是否为0
如果cx ≠ 0,跳转到标号出执行 (IP)=(IP)+8 位位移
8位位移=标号处的地址-loop指令后的第一个字节的地址;
8位位移的范围为-128--127,用补码表示;
8位位移由编译程序在编译时算出。
如果cx=0,执行loop后面的其它指令。
我们从loop的功能中可以看出,"loop标号”的功能相当于:
(CX)--
if((cx) ≠0) jmp short标号,
cx中的值影响着loop指令的执行结果。通常我们用loop指令来实现循环功能,cx中存放循环次数。
测例
任务1:编程计算2^12
assume cs:code
code segment
mov ax,2
mov cx,11
s:add ax,ax
loop s
mov ax,4c00h
int 21h
code ends
end
分析:
(1)标号
在汇编语言中,标号代表一个地址,此程序中有一个标号s。它实际上标识了一个地址,这个地址处有一条指令:add ax,ax
(2)loop s
CPU执行loop s的时候,要进行两步操作:
(cx)=(cx)-1;
判断cx中的值,不为0则转折标号s所标识的地址处执行(这里的指令是"add ax,ax"),如果为0则执行下一条指令(这里的下一条指令是"mov ax,4c00h")
(3)以下三条指令
mov cx,11
s:add ax,ax
loop s
执行loop s时,首先要将(cx)减一,然后若(cx)不为0,刚向前转至s处执行add ax,ax。
所以,我们可以利用cx来控制add ax,ax的执行次数。
任务2:计算ffff:0006单元中的数乘以3,结果存储在dx中。
(1)运算后的结果是否会超出dx所能储存的范围?
ffff:0006单元中的数是一个字节型的数据,范围在0~255之间,
则用它和3相乘结果不会大于65535,可以在dx中存放下。
(2)我们用循环累加来实现乘法,用哪个寄存器进行累加?
我们将ffff:0006单元中的数赋给ax,用dx进行累加。先设(dx)=0,然后做3次
(dx)=(dx)+(ax)。
(3)ffff:0006单元是一个字节单元,ax是一个16位寄存器,数据长度不一样,如何赋值?
注意,“赋值”是让ax中数据的值和ffff:0006单元中的数据的值相等。
8位数据01h和16位数据0001h的数据长度不一样,但它们的值是相等的。
赋值过程:
令(ah)=0,(al)=(fff6h)
程序:
assume cs:codesg
codesg segment
mov ax,0ffffh ;汇编源程序中,数据不能以字母开头
mov ds,ax
mov bx,6
mov al,[bx] ;以上,设置(ah)=0,(al)=((ds)*16+bx)
mov ah,0
mov dx,0 ;累加寄存器清零
mov cx,3 ;循环3次
s:add dx,ax
loop s
mov ax,4c00h
int 21h
codesg ends
end
任务3:求7+7+7+7+7的和:
CODE SEGMENT ;定义代码段
ASSUME CS:CODE,DS:DATA ;将CS和CODE,DS和DATA段建立联系
START:
MOV AX,0 ;初始化AX,用于存储求和结果
MOV CX,5 ;初始化循环次数,每循环一次,CX会自动减1,不需要自己写代码减
L: ;循环累加
ADD AX,7
LOOP L
MOV AH,4C00H ;将控制权返回给终端。
INT 21H
CODE ENDS
end
c51汇编语言循环指令,汇编语言循环指令loop相关推荐
- 汇编语言实验4-利用跳转指令构造循环
1. 实验目的 能分析各种跳转指令构成的程序的运行原理 会用跳转指令构造循环解决应用问题 体验显示缓冲区的要求 2. 实验内容 任务1-奇怪的程序? 人工分析下面的程序,然后再在Debug程序中单步执 ...
- LOOP指令——汇编语言学习笔记3
因为嵌入式系统学习需要,开始学习汇编语言 学习资料是B站的视频:汇编语言程序设计 贺利坚主讲 (P25) 这里写目录标题 一.LOOP功能与格式 二.LOOP指令实例 三.LOOP指令执行的要求 四. ...
- 汇编语言第七章循环程序
文章目录 7-1 循环指令 7-1-1 循环指令 测验 1.IA-32处理器的LOOP指令隐含使用哪个寄存器作为计数器? 2.IA-32处理器的JECXZ指令发生跳转的条件是: 3.IA-32处理器的 ...
- 8086汇编语言寻址方式、基本指令和调试指令
一.80x86/Pentium 各种寻址方式 1.立即寻址 立即寻址方式下,操作数作为立即数直接包含在指令中,紧跟在操作码之后与其一起 存放在代码段区域.因此,立即数总是和操作码一起被存入 CPU 的 ...
- 汇编语言带C循环,如何将此C for循环转换为汇编语言?
我需要编写一个程序集程序,在-2 < = x < = 8的范围内查找x^3 -14x^2 + 56x -64的最大值,并且最大值应在其中一个寄存器中该程序.如何将此C for循环转换为汇编 ...
- 汇编语言笔记10-CALL和RET指令
☞模块化程序设计 模块化程序设计 汇编语言通过call和ret指令实现了模块化程序设计.可以实现多个相互联系.功能独立的子程序来解决一个复杂的问题. 子程序的框架 1 assume cs:code 2 ...
- 汇编语言实验5:循环结构程序设计
<汇编语言程序设计>实验报告 实验五 循环结构程序设计 1. 实验目的 2. 实验任务 3. 实验步骤 3.1 循环结构题目设计 3.2 编写代码 3.3 代码分析 3.4 运行测试 4. ...
- 汇编指令 栈现场保护 算数运算 位运算 比较指令 跳转指令 循环指令 寻址方式
文章目录 1 nop 指令 2 现场保护指令 2.1 push 与 pop 2.2 pushad 与 popad 2.3 pushfd 与 popfd 3 内存操作 3.1 mov指令 3.2 mov ...
- python循环指令_Python循环
布尔运算 学习循环之前,先了解一个概念:布尔运算 布尔运算是数字符号化的逻辑推演法,包括联合.相交.相减.在图形处理操作中引用了这种逻辑运算方法以使简单的基本图形组合产生新的形体,并由二维布尔运算发展 ...
- 【汇编语言】通用数据处理指令——位操作类指令
通用数据处理指令--位操作类指令 文章目录 通用数据处理指令--位操作类指令 一.逻辑运算指令 1.逻辑与指令AND 2.逻辑或指令OR 3.逻辑非指令NOT 4.逻辑异或指令XOR 5.逻辑运算的应 ...
最新文章
- Java 树形结构数据生成--不需要顶级节点
- 因特尔显卡自定义分辨率_蓝宝石RX 5600XT 6G D6 白金版OC显卡评测:两千价位段好选择...
- drupal7获取当前路径别名
- iOS 实现加载转圈效果
- java中的dispose()方法
- TensorFlow for Hackers (Part VII) - Credit Card Fraud Detection using Autoencoders in Keras
- ARM中LDR伪指令与LDR加载指令
- ZOJ - 4122 Triangle City(最短路+欧拉通路+思维)
- 12.5PMP试题每日一题
- struts的开发模式
- windows server 2003优化设置方法
- jquery实现悬浮框
- render vue 添加类_详解vue 动态加载并注册组件且通过 render动态创建该组件
- python怎么安装xlutils_Python3安装xlutils
- 【Scratch案例实操】scratch变魔术 scratch编程案例教学 scratch创意编程 少儿编程教案
- 局域网中抓到NBNS数据包
- DHTMLX Grid Crack
- ANDROID_MARS学习笔记_S04_004_用HTTPCLENT发带参数的get和post请求
- 王者归来,低代码的逆袭之路
- 简洁但功能强大的EditPlus UltraEdit