我遇到MASM32程序的问题。我试图让这段代码起作用:
.DATA
alfa dword 9
.CODE
start:
MOV ecx, alfa
MOV eax, 0
L1: ADD eax, ecx
DEC ecx
LOOP L1
CALL WRITEINT
exit
END start
我发现问题只在循环内,其他一切正常。有些人可以帮助我让循环正常工作,它不返回值而不退出。这应该发生吗?提前谢谢大家!
答案 0 :(得分:2)
您正在减少ecx
两次。 dec
指令会减少它,loop
指令也会减少它。
使用
dec ecx
jne L1
或使用
loop L1
它不退出的原因如下
dec ecx -> ecx = 8
loop l1 -> ecx = 7
dec ecx -> ecx = 6
loop l1 -> ecx = 5
dec ecx -> ecx = 4
loop l1 -> ecx = 3
dec ecx -> ecx = 2
loop l1 -> ecx = 1
这就是抓住了!
dec ecx -> ecx = 0 no condition
loop l1 -> ecx = 0xffffffff Loop will not break because it breaks on 0
dec ecx -> ecx = 0xfffffffe
loop l1 -> ecx = 0xfffffffd
...
......等等。你明白了。如果您使用过调试器,那么只需几次迭代就可以看到它。
实际上,此次往返中ecx
将达到0,但 LONG 时间。 :)
答案 1 :(得分:1)
LOOP
已经处理了减量,所以摆脱DEC ECX
,即改变:
DEC ecx
LOOP L1
只是:
LOOP L1