MASM32汇编 - 从控制台读取数字

时间:2011-12-11 16:29:30

标签: windows assembly dos masm masm32

很抱歉,如果这个问题非常简单,但我尝试了所有我知道的事情,并且没有想出来。

我正在尝试创建一个简单的过程,它从控制台获取一个字符串和一个Count,并打印由Count指定的字符串次数。

一切都很好,但是当我将Count移动到eax以进行循环时,值得搞清楚了,最终我得到了无限循环的打印。

我尝试使用atodw将Count更改为DWORD,但无效。

这是代码:

PrintString PROTO :DWORD, :DWORD

.data

        String db 100 DUP(0)

        Count db 10 DUP(0)

.code
    start:
        ;1- get user input

        invoke StdIn, addr String, 99
        invoke StdIn, addr Count, 10

        ;2- Remove the CRLF from count
         invoke StripLF, addr Count

        ;3- Convert the count to DWORD 
        invoke atodw, addr InputCount
        mov Counter, eax

        ;4- Call the Printer function

        invoke Printer, addr String,   addr Count

Printer PROC StringToPrint:DWORD, count:DWORD         

 mov eax,count  ;;;;;; This is the problem I think

 Looppp:
            push eax

            invoke StdOut,  StringToPrint

            pop eax
            dec eax

            jnz Looppp
    ret
Printer endp

1 个答案:

答案 0 :(得分:0)

您正在传递addr Count - 字符串的地址 - 作为Printer的第二个参数。但是它需要一个整数,所以你想要传递Counter

由于您使用的语言没有类型检查,因此为您的标识符采用Hungarian notation等命名约定可以帮助您查看并避免此类问题。例如,这里的变量名为strCountdwCount,您使用错误的变量会更明显。

顺便说一句,eax最终必须达到零,因此您的打印循环不会无限 - 只是比您想要的更长...