You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

汇编语言程序循环实现:重复获取输入并计算的新手求助

嘿,刚接触汇编就能写出计算程序已经超棒啦!给你的程序加循环逻辑其实很清晰,核心就是每次计算完成后,询问用户是否继续,根据输入的"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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:55:41