首先loop指令的使用格式是:loop 标号;
cpu执行loop指令的过程:1.(cx)=(cx)-1;2.判断cx中的值是否为零,如果cx寄存器里的值不为0,则转到标号处执行程序;如果cx中的值为0则向下执行其他的指令。所以说cx中存放的就是循环的次数。
下面是一些用loop指令计算的例子:
1.计算2^12,并将结果放到ax中:


首先分析算法,2^12就是一个2乘以2乘11次,循环的部分就是将ax中的数据乘以2,即add ax,ax 并循环11次,程序中的s一个标号,他代表着一个地址,这个地址处有一个指令:add ax,ax
当cpu执行loop s的时候分两步,首先cx=cx-1,然后再判断cx中的数据是否为零,然后决定是继续执行循环的部分还是向下执行
以下是在debug中跟踪这个程序执行的过程:
首先执行mov ax,2;然后就是mov cx,11;然后就开始第一次执行循环部分add ax,ax;可以看出此时AX=0004,AX内的数据加倍了,然后就是执行loop命令,8前面说过执行loop时有两步,首先将cx中的数减去一,然后判断cx中的值是不是零从而判断循环是否结束。我们可以看到第一次执行loop命令后cx中的数据从000B变成了000A,而此时cx中的数据并不为0,所以接下来仍然执行循环部分。
大家可以看到最后ax中的数据是1000H,转换成十进制就是4096,也就是2的12次方。
网友评论