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

如何在8086汇编中实现两个用户输入分别乘对应变量后相加

8086汇编乘法加法功能实现方案

核心原理

8086指令集中,8位无符号乘法使用MUL指令完成:默认取AL寄存器的值作为被乘数,与指定的8位操作数相乘,16位长度的乘积会自动存入AX寄存器。由于两个乘积的最大值仅为 9*10 + 9*20 = 270,完全可以用16位寄存器存储,加法运算直接操作16位寄存器即可。


完整修改后代码

;TITLE Multiply input with number then add them
.model small
.stack 100
.data
f1 DB 10
f2 DB 20
msg1 DB 13,10,"First input = $" ; 提示输入第一个1位数字
msg2 DB 13,10,"Second input = $" ; 提示输入第二个1位数字
msg3 DB 13,10,"Product = $" 
msg4 DB 13,10,"Addition = $" ; 提示输出最终相加结果
q1 DB ? ; 存储第一个用户输入
q2 DB ? ; 存储第二个用户输入
res DW ? ; 存储最终计算结果
.code
main proc 
mov ax,@data
mov ds,ax

; 读取第一个输入
mov ah,09h
lea dx, msg1
int 21h
mov ah,01h
int 21h
sub al,30h
mov q1,al

; ======== 第一个输入乘f1实现 ========
mov al, q1
mul f1 ; 运算 al * f1,乘积存入AX
mov res, ax ; 暂存第一个乘积到res变量

; 读取第二个输入
mov ah,09h
lea dx, msg2
int 21h
mov ah,01h
int 21h
sub al,30h
mov q2,al

; ======== 第二个输入乘f2实现 ========
mov al, q2
mul f2 ; 运算 al * f2,乘积存入AX

; ======== 两个乘积相加实现 ========
add res, ax ; 第二个乘积与res里存的第一个乘积相加,结果存在res中

; 输出结果提示
mov ah,09h
lea dx, msg4
int 21h

; ======== 十进制结果输出逻辑 ========
mov ax, res
mov cx, 0
mov bx, 10
; 逐位取余压栈
split_num:
div bx ; 商存在AL,余数存在AH
push ax ; 把余数压栈
inc cx ; 统计位数
mov ah, 0
cmp al, 0 ; 商为0则停止拆分
jne split_num
; 逐位弹出转ASCII输出
print_num:
pop dx
mov dl, dh
add dl, 30h ; 余数转ASCII码
mov ah, 02h
int 21h
loop print_num

mov ah, 4Ch 
int 21h
main endp
end main

关键代码说明

  • 乘法运算:MUL指令自动处理8位乘8位的进位,不需要额外判断溢出,符合你的业务场景需求
  • 结果暂存:第一个乘积存入res变量避免被第二次乘法的结果覆盖,直接相加即可得到最终值
  • 输出逻辑:通过除10取余的方式把数字拆分为单个十进制位,转ASCII后逐位输出,支持最大3位数字的显示

内容的提问来源于stack exchange,提问作者Adrian Joshua

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:12:03