循环显示带有简单是/否问题的消息以重复循环或结束程序

问题描述

我的目标是显示一条消息 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

解决方法

当响应 ycmp al,'y' 进行正比较时,您跳转到 l1 但忘记将循环计数器 ecx 初始化为 10 再次。前一个循环将 ecx 保留为零,因此 loop l1 实际上重复 0xFFFFFFFF 次写入 edx 指向的任何内容 (offset again)。

不是跳到l1而是跳到main。并省略最后的 call ReadInt。当你对这个数字什么都不做时,为什么要从用户那里读取一个整数?