我试图在程序集中创建一个for循环,以打印从0到N-1的所有整数。由于某种原因,它会破坏并产生无限循环。有什么想法吗?我正在使用visual studio 2013 masm
.data
x DWORD 0
y DWORD 0
.code
main:nop
invoke version
invoke readInteger
add x, eax
cmp eax, y
je done
increase:
invoke writeInteger, y
inc y
cmp y, eax
jg increase
done:
invoke writeInteger, x
invoke ExitProcess,0
end main
答案 0 :(得分:2)
writeInteger 会破坏EAX
的内容,因此您无法在cmp y, eax
即使已经纠正,循环也不起作用,因为当y变量小于x
时,你需要返回增加因为你从0开始并递增它,所涉及的所有数字都将(需要)为正
如果输入为零,您应该不显示任何内容,因为输入表示计数!
总而言之,这是一个解决方案:
invoke readInteger
test eax, eax
jz exitNow
mov x, eax ;x=[1,2GB-1]
increase:
invoke writeInteger, y
inc y
mov eax, x
cmp y, eax
jne increase
exitNow:
invoke ExitProcess,0