很抱歉,如果这个问题非常简单,但我尝试了所有我知道的事情,并且没有想出来。
我正在尝试创建一个简单的过程,它从控制台获取一个字符串和一个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
答案 0 :(得分:0)
您正在传递addr Count
- 字符串的地址 - 作为Printer
的第二个参数。但是它需要一个整数,所以你想要传递Counter
。
由于您使用的语言没有类型检查,因此为您的标识符采用Hungarian notation等命名约定可以帮助您查看并避免此类问题。例如,这里的变量名为strCount
和dwCount
,您使用错误的变量会更明显。
顺便说一句,eax
最终必须达到零,因此您的打印循环不会无限 - 只是比您想要的更长...