详细解决了一个简单的汇编语言问题
Mov dx,3是初始化dx。注意dx中的二进制是0000 0000 0000 0011,后面会用到。
inc ax
模数转换器bx,ax
loope l20
这三句话,说白了就是把递增的整数累加成bx。
bx=1+2+3+。......
现在重要的是这个循环要做多少次,也就是bx累计多少次。
shr dx,1
用来控制这个循环的结束。它将dx右移一位,如果dx中的结果为零,则标志位zf应置位。Loope看到zf设置好了就不跳L20了。
所以dx开头是两个1(二进制),所以loope总是* * *跳两次,所以bx加三个数。
bx=1+2+3
然后就结束了所以bx是6。
不好意思,前面有几个错误,没有仔细看前面的代码。解释如下:
首先,bx最初是2,
其次,循环只做两次,不做三次。因为0000 0011第一次向右移动不会是0,所以循环跳转成功,但是再移动1就会是0,意味着循环不会跳转成功。
所以bx=2+1+2,所以结果会是5,所以还有1的差距,这个1是这样的。
第一次向右移动时,0000 0011会移出一点1,这就把cf设置为1,这一点很重要。loope判断zf不是1,重要的是如果跳转到inc的指令,不会改变cf,所以cf还是一样的。
另外,xor ax和ax除了将ax清零之外还有很多重要的作用,比如使cf为0,zf为1,这些都会影响程序的运行。