if-statement - MASM 不会在 ReadString 上暂停并且没有执行 IF 块
问题描述
1.)我应该编写一个生成以下输出的程序:
Enter a digit: 8
You entered a digit.
Do you want to run the program again (Y or N)? Y
(用户输入 Y,因此屏幕 清空,程序再次运行。)
Enter a digit: Q
You did not enter a digit.
Do you want to run the program again (Y or N)? N
(用户输入 N,因此 .REPEAT - .UNTIL 循环结束。
2.) 使用块结构的 .IF 语句,或使用跳转指令(我同时使用)
3.) 使用 .REPEAT - .UNTIL 指令允许用户重复运行程序。- 如果用户输入 Y,则屏幕清除,程序再次运行。
然而,我遇到的问题是我的输出在控制台上加倍了 digitprompt 和 runagain,这意味着它一直跳过到程序的末尾,一路绕过 IF 块。请问我该如何解决这个问题?我希望它在途中适当暂停,不,“WaitMsg”在这里不起作用,因为我期待输入。这是控制台的样子,其中夹在肇事者之间的 dumpregs:
Enter a digit:
EAX=00000000 EBX=002E3000 ECX=0040100A EDX=00406010
ESI=0040100A EDI=0040100A EBP=0019FF80 ESP=0019FF74
EIP=00403683 EFL=00000246 CF=0 SF=0 ZF=1 OF=0 AF=0 PF=1
Do you want to run the program again (Y or N)? _
以上是错误...
INCLUDE Irvine32.inc
.data
digitprompt BYTE "Enter a digit: ",0
userDig db 64 dup(?),0
runagain BYTE "Do you want to run the program again (Y or N)? ",0
characterans BYTE ?,0
digit BYTE "You entered a digit.",0
notdigit BYTE "You did not enter a digit.",0
.code
main PROC
.REPEAT
call Clrscr
mov edx, 0
mov edx, OFFSET digitprompt
call WriteString
mov edx, OFFSET userDig
call ReadString
.IF edx >= 0
jmp L1
.ELSE
jmp isNotDig
.ENDIF
L1:
.IF edx <= 9
jmp isDig
.ELSE
jmp isNotDig
.ENDIF
isDig: mov edx, OFFSET digit
jmp L2
isNotDig: mov edx, OFFSET notdigit
L2:
mov edx, OFFSET runagain
call WriteString
call ReadChar
mov characterans, al
.UNTIL characterans == 'N'
exit
main ENDP
END main
解决方案
推荐阅读
- firebase - 何时在 noSQL 中复制数据?
- html - 如何创建多步骤表单
- reactjs - React TypeError:“这是未定义的”,函数调用中的函数不起作用
- mysql - SQL 查询:显示多个数据和总订单值
- php - [PHP][LARAVEL]“找不到类 'App\User'”,但显然有 'use App\User;' 在代码中
- bash - git bash start 警告“bash: C:/Users/RS3/Anaconda3/etc/profile.d/conda.sh: 没有这样的文件或目录”
- angular - 在interceptor.module.ts 中设置授权头参数
- asp.net-core - Sentry 在 ASP.NET Core 应用程序中不显示 HttpContext 用户信息
- node.js - 无法连接集群 mongo.db 图集
- mxgraph - 在 isValidDropTarget 中获取拖动矩形