在汇编中能够使用 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
loop 指令的执行步骤是这样的循环
那么整个 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--; }