Loops 程序集80x86循环不应该永远循环?
我有以下代码:Loops 程序集80x86循环不应该永远循环?,loops,assembly,x86,x86-16,Loops,Assembly,X86,X86 16,我有以下代码: assume cs: code, ds:data code segment start: mov ax,data mov ds, ax xor cx,cx repeta: inc cx xor cx,0 loop repeta mov ax, 4Ch int 21h code ends end start 据我所知,它应该永远循环或直到出错,但实际上它并没有。为什么? 我
assume cs: code, ds:data
code segment
start:
mov ax,data
mov ds, ax
xor cx,cx
repeta:
inc cx
xor cx,0
loop repeta
mov ax, 4Ch
int 21h
code ends
end start
据我所知,它应该永远循环或直到出错,但实际上它并没有。为什么?
我如何想象它的工作原理:
xor cx,cx - cx = 0
输入:repeta
code段
inc cx - cx = 1
无所事事
xor cx,0 - cx is still 1
验证cx
是否与0不同,如果为真,则跳转到标签repeta
loop repeta
实际上它不会重复,为什么?循环将在第一次迭代后结束,因为
循环
指令将cx
减少到零,然后检查它是否为非零
参考:
“将CX递减1,如果CX不为零,则将控制转移到标签。”
循环将在第一次迭代后结束,因为
loop
指令将cx
减少到零,然后检查它是否为非零
参考:
“将CX递减1,如果CX不为零,则将控制转移到标签。”
根据,循环指令减少ECX,除非ECX为零,否则将跳转
如果ECX
在loop
指令之前是1
,那么loop
指令将把它减为零,而不是跳转。相应地,loop
指令减小ECX
并跳转,除非ECX
为零
如果ECX
在loop
指令之前是1
,则loop
指令将其递减为零,而不是跳转