汇编语言 MASM 中的循环
Loop in assembly language MASM
我试图在程序集中创建一个 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
writeInteger 会破坏 EAX
的内容,因此您不能轻易地在 cmp y, eax
中使用它
即使经过更正,循环也不会工作,因为当 y 变量 小于 x 时,您需要返回 increase
因为您从零开始 y 并递增它,所有涉及的数字都(需要)为正数
如果输入为零,则不应显示任何内容,因为输入表示 count!
综合起来,这是一个解决方案:
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
我试图在程序集中创建一个 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
writeInteger 会破坏 EAX
的内容,因此您不能轻易地在 cmp y, eax
即使经过更正,循环也不会工作,因为当 y 变量 小于 x 时,您需要返回 increase
因为您从零开始 y 并递增它,所有涉及的数字都(需要)为正数
如果输入为零,则不应显示任何内容,因为输入表示 count!
综合起来,这是一个解决方案:
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