loop指令的格式是
loop 标号
cpu执行loop命令时要进行两部操作,先让寄存器cx里的值-1,之后判断cx里的值是否为0如果为0则向下执行如果不为0则跳转到标号的位置
例子(计算2^12为多少放入到ax寄存器中)
assume cs:code
code segment
mov ax,2
mov cx,11 ;//设置loop的次数
s: add ax,ax ;//打标签(标号)
loop s ;//cpu执行loop操作时进行两步操作 cx-- 如果cx为0往下执行,cx不为0 contiue
mov ax,4c00H
int 21H
code ends
end
编译链接之后debug一下exe文件可以发现:
注意当cx的值为0时之后内存的变化
1.标号
在汇编语言中,标号代表一个地址,在这个程序中有一个s,它实际上是标示了一处地址,该地址上有一条指令为:add ax,ax
(指令的储存就是以机器码的形式储存在内存的某一段中由((cs)*16+ip)的物理地址决定执行的位置
2.loop s
cx中存放循环的次数
loop指令后面的标号所标识地址要在前面
要循环执行的程序段要写在标号和loop指令的中间
用cx和loop指令相配合的循环功能框架如下:
mov cx,循环次数
s:
循环执行的程序段
loop s
例2:用加法计算123*236,结果存在ax中
123*236相当于 236个123相加 及循环让他一直相加就ok了
源码:
assume cs:codesg
codesg segment
mov ax,123
mov cx,235
s: add ax,123
loop s
mov ax,4c00H
int 21H
codesg ends
end
我们可以在这个基础上再改进一下程序来提升性能,上一个程序错了256次加法运算,其实我们可以让256做123次加法也是一样的