以汇编语言MASM循环

时间:2017-09-29 13:19:47

标签: assembly x86 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

1 个答案:

答案 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