程序集 80x86 循环不应该永远循环?
Assembly 80x86 Loop should not loop for ever?
我有以下代码:
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
代码段
inc cx - cx = 1
什么都不做
xor cx,0 - cx is still 1
验证cx
是否不同于0,如果为真则跳转到标签repeta
loop repeta
实际上并没有重复,为什么?
循环会在第一次迭代后结束,因为loop
指令会将cx
减到零,然后检查它是否非零。
参考:http://web.itu.edu.tr/kesgin/mul06/intel/instr/loop.html
"Decrements CX by 1 and transfers control to label if CX is not Zero."
根据to this,loop
指令减少ECX
并跳转,除非ECX
为零。
并且如果 ECX
在 loop
指令之前是 1
,那么 loop
指令会将其递减为零并且 不是 跳.
我有以下代码:
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
代码段
inc cx - cx = 1
什么都不做
xor cx,0 - cx is still 1
验证cx
是否不同于0,如果为真则跳转到标签repeta
loop repeta
实际上并没有重复,为什么?
循环会在第一次迭代后结束,因为loop
指令会将cx
减到零,然后检查它是否非零。
参考:http://web.itu.edu.tr/kesgin/mul06/intel/instr/loop.html
"Decrements CX by 1 and transfers control to label if CX is not Zero."
根据to this,loop
指令减少ECX
并跳转,除非ECX
为零。
并且如果 ECX
在 loop
指令之前是 1
,那么 loop
指令会将其递减为零并且 不是 跳.