问题描述
我的目标是显示一条消息 10 次,然后询问用户是否继续。如果是,则返回再次执行上述循环。如果没有,退出程序。
我的代码的第一部分工作正常;它显示消息“再见”10 次。然而,要求用户继续与否的第二部分是问题所在。当我输入“y”时,它会重复消息“您想继续(是/否)吗?”无止境。
这是我的代码:
INCLUDE Irvine32.inc
.data
Msg BYTE "Goodbye",0
again byte "Do you want to continue (Y/N)? ",0
.code
main proc
mov edx,offset Msg
mov ecx,10
l1:
call writestring
call crlf
loop l1
mov edx,offset again
call writeString
call readChar
call crlf
cmp al,'y'
je l1
call ReadInt
invoke ExitProcess,0
main endp
end main
解决方法
当响应 y 与 cmp al,'y'
进行正比较时,您跳转到 l1
但忘记将循环计数器 ecx
初始化为 10 再次。前一个循环将 ecx
保留为零,因此 loop l1
实际上重复 0xFFFFFFFF 次写入 edx
指向的任何内容 (offset again
)。
不是跳到l1
而是跳到main
。并省略最后的 call ReadInt
。当你对这个数字什么都不做时,为什么要从用户那里读取一个整数?