汇编语言程序循环实现:重复获取输入并计算的新手求助
嘿,刚接触汇编就能写出计算程序已经超棒啦!给你的程序加循环逻辑其实很清晰,核心就是每次计算完成后,询问用户是否继续,根据输入的"YES"/"NO"决定是回到循环开头还是退出程序。咱们结合你的代码片段来完善:
完整修改后的代码
.586 .MODEL FLAT INCLUDE io.h .STACK 4096 .DATA ; 原有变量 n1 DWORD ? n2 DWORD ? n3 DWORD ? prompt1 BYTE "Enter first integer:", 0 prompt2 BYTE "Enter second integer:", 0 resultMsg BYTE "The sum is: ", 0 ; 新增循环相关变量 continuePrompt BYTE "Do you want to continue? Enter YES or NO:", 0 inputBuffer BYTE 10 DUP(0) ; 存储用户输入的YES/NO yesStr BYTE "YES", 0 noStr BYTE "NO", 0 .CODE _MainProc PROC start_loop: ; 循环入口标签 ; 读取第一个整数 outputStr prompt1 inputInt n1 outputStr prompt2 inputInt n2 ; 执行计算(这里以加法为例,你可以替换成自己的逻辑) mov eax, n1 add eax, n2 mov n3, eax ; 输出结果 outputStr resultMsg outputInt n3 outputStr BYTE 10, 13, 0 ; 换行 ; 询问是否继续 outputStr continuePrompt inputStr inputBuffer, 10 ; 读取用户输入,最多10个字符 ; 比较输入是否为"YES",如果是则回到循环开头 lea esi, inputBuffer lea edi, yesStr cmpsb ; 比较第一个字符 jne check_no ; 第一个字符不等,去检查NO cmpsb ; 比较第二个字符 jne check_no cmpsb ; 比较第三个字符 je start_loop ; 三个字符都相等,跳回循环 check_no: ; 比较输入是否为"NO" lea esi, inputBuffer lea edi, noStr cmpsb jne invalid_input ; 不是NO,提示输入无效 cmpsb je exit_program ; 是NO,退出程序 invalid_input: outputStr BYTE "Invalid input! Please enter YES or NO.", 10, 13, 0 jmp start_loop ; 回到循环,重新询问 exit_program: mov eax, 0 ; 返回操作系统 ret _MainProc ENDP END
关键部分解释
- 循环入口标签:
start_loop是整个循环的起点,每次用户选择继续时,就通过JE start_loop跳回到这里,重新执行输入和计算逻辑。 - 字符串比较:用
CMPSB指令逐个字符比较输入的字符串和预设的"YES"/"NO"。注意CMPSB会自动递增ESI和EDI寄存器,所以我们要先把两个字符串的地址加载到这两个寄存器里。 - 输入错误处理:如果用户输入的不是"YES"或"NO",会提示错误并重新回到循环,避免程序直接退出。
- 退出逻辑:当用户输入"NO"时,跳转到
exit_program标签,执行mov eax,0和ret来结束程序。
你可以根据自己原来的计算逻辑(比如减法、乘法)替换掉代码里的加法部分,其他循环相关的逻辑直接复用就好啦!
内容的提问来源于stack exchange,提问作者Tuk Tuk
相关产品推荐
相关产品推荐

