汇编语言 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