loop 循环次数

在汇编中能够使用 loop 段地址:偏移地址 并配合 cx 达到循环执行的目的,可是在一些资料中看到说,cx 是循环的次数,我以为这是不对的。oop

好比下面这段代码的做用是使得最终的 ax 中的值为 3code

assume cs:code

code segment

start:  sub ax, ax
        mov bx, 1
        mov cx, 3
lp:     add ax, bx
        loop lp
code ends
end start
  1. 首先,将 ax 置 0
  2. 将 bx 内容置为 1
  3. 将 cx 的内容置为 3
  4. ax 中的内容加 1,加后 ax 的内容是 1
  5. 进入 loop 指令

loop 指令的执行步骤是这样的循环

  1. (cx) = (cx) - 1
  2. 判断 cx 中的值,不为零则跳转至标号处继续执行

那么整个 loop 的步骤是语言

第 1 次loop

cx = 3 - 1
cx 为 2 大于 0 
ax 累加 1,此时 ax 中的值为 2

第 2 次while

cx = 2 - 1
cx 为 1 大于 0
ax 累加 1,此时 ax 中的值为 3

第 3 次co

cx = 1 - 1
cx 为 0
结束循环,ax 再也不继续累加

因此,虽然 cx 开始时被设置成了 3,可是循环的次数并非 3,而是 2。若是用 c 语言去描述这段汇编的执行顺序应该是tar

int cx = 3;
int ax = 0;

ax++;

cx--;
while(cx){
    ax++;
    cx--;
}
相关文章
相关标签/搜索