我有以下代码:
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不同,如果为true,则跳转到标签repeta
loop repeta
实际上它没有重复,为什么?
答案 0 :(得分:3)
循环将在第一次迭代后结束,因为loop
指令会将cx
减少为零,然后检查它是否为非零。
参考:http://web.itu.edu.tr/kesgin/mul06/intel/instr/loop.html
“如果CX不为零,则将CX减少1并将控制转移到标签。”
答案 1 :(得分:1)
根据to this,loop
指令会减少ECX
并跳转,除非ECX
为零。
如果在ECX
指令之前1
为loop
,那么loop
指令会将其递减为零并且不跳转。< / p>