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

汇编语言乘法程序输出乱码问题求助:计算结果不符预期

汇编乘法程序错误分析与修正

核心错误点

1. 输入存储顺序颠倒

原代码里,调用DOS输入中断(int 21h,AH=01h)前就把AL的值存入变量,但此时AL还没获取到用户输入的字符,存的是随机垃圾值。正确逻辑是先执行中断拿到输入,再把AL里的ASCII字符存进变量。

2. (潜在问题)多位数结果无法正常显示

当前代码只处理乘积0-9的情况,要是乘积≥10,直接加'0'会得到非数字的ASCII字符,后续需要扩展多位数输出逻辑,但当前导致错误的主要原因是输入顺序问题。

修正后的代码

.model small
.stack
.data
    msg1 DB "Quantity (unit): $"
    msg2 DB 13,10,"Unit price (RM): $"
    msg3 DB 13,10,"Total amount is RM$"
    Quantity DB 0
    Unit_price DB 0
    Total DB 0
    
.code
main proc
    mov AX,@data
    mov DS, AX
    
    mov AH, 09h           ; 显示第一个提示信息
    lea DX, msg1
    int 21h
    
    mov AH, 01h           ; 获取用户输入
    int 21h
    mov Quantity, AL      ; 先获取输入,再存储到变量
    
    mov AH, 09h           ; 显示第二个提示信息
    lea DX, msg2
    int 21h
    
    mov AH, 01h           ; 获取用户输入
    int 21h
    mov Unit_price, AL    ; 先获取输入,再存储到变量
    
    ; 将ASCII字符转换为数值
    sub Quantity, '0'
    sub Unit_price, '0'
    
    ; 执行乘法运算
    mov AL, Quantity
    mul Unit_price        ; AL * Unit_price,结果存于AX
    mov Total, AL         ; 乘积存入Total
    
    ; 转换为ASCII字符(仅适用于0-9的结果)
    add Total, '0'
    
    mov AH, 09h
    lea DX, msg3
    int 21h
    
    mov AH, 02h
    mov DL, Total
    int 21h
    
    mov AX, 4C00H
    int 21h
    
MAIN ENDP
END MAIN

修正说明

  • 调整输入代码顺序,确保先通过int 21h拿到用户输入的ASCII字符,再存入Quantity和Unit_price变量。
  • 保留了原有的单数字结果转换逻辑,若要处理乘积≥10的情况,需要添加多位数拆分输出的代码(比如把AX中的值拆成十位和个位,分别转成ASCII后输出)。

内容的提问来源于stack exchange,提问作者zuo hao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 04:53:33