我有以下代码:
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在现实中它没有重复,为什么?
发布于 2015-01-30 09:47:18
循环将在第一次迭代之后结束,因为loop指令会将cx降为零,然后检查它是否为非零。
参考文献:http://web.itu.edu.tr/kesgin/mul06/intel/instr/loop.html
“将CX减少1,如果CX不是零,则将控制转移到标签上。”
发布于 2015-01-30 09:48:02
根据到这个,loop指令减少ECX并跳转,除非ECX为零。
如果ECX在loop指令之前是1,那么loop指令将减少到零,而不是跳转。
https://stackoverflow.com/questions/28233019
复制相似问题