assume cs:code
code segment
start:
; 设置数据段寄存器 (DS = CS)
push cs
pop ds
;===== 加法部分 (5 + 3 = 8) =====
; 显示提示信息
mov ah, 09h
lea dx, add_str
int 21h
; 计算并显示结果
mov ax, 05 ; 被加数设为5
mov bx, 03 ; 加数设为3
add ax, bx ; 计算5+3=8
; 显示操作数和等号
mov dl, '5'
int 21h
mov dl, '+'
int 21h
mov dl, '3'
int 21h
mov dl, '='
int 21h
; 显示结果
mov dl, al ; 结果存入dl
add dl, 30h ; 转换为ASCII码
mov ah, 02h
int 21h
; 换行
mov dl, 0Dh
int 21h
mov dl, 0Ah
int 21h
;===== 减法部分 (5 - 3 = 2) =====
; 显示提示信息
mov ah, 09h
lea dx, sub_str
int 21h
; 计算并显示结果
mov ax, 05 ; 被减数设为5
mov bx, 03 ; 减数设为3
sub ax, bx ; 计算5-3=2
; 显示操作数和等号
mov dl, '5'
int 21h
mov dl, '-'
int 21h
mov dl, '3'
int 21h
mov dl, '='
int 21h
; 显示结果
mov dl, al ; 结果存入dl
add dl, 30h ; 转换为ASCII码
mov ah, 02h
int 21h
; 换行
mov dl, 0Dh
int 21h
mov dl, 0Ah
int 21h
;===== 乘法部分 (5 × 3 = 15) =====
; 显示提示信息
mov ah, 09h
lea dx, mul_str
int 21h
; 计算并显示结果
mov al, 05 ; 被乘数设为5
mov bl, 03 ; 乘数设为3
mul bl ; 计算5×3=15,结果在AX中
; 显示操作数和等号
mov dl, '5'
int 21h
mov dl, '*'
int 21h
mov dl, '3'
int 21h
mov dl, '='
int 21h
; 处理并显示两位数结果
aam ; 将AL中的二进制数转换为BCD格式
mov cx, ax ; 临时保存结果
; 显示十位数(如果有)
cmp ch, 0
jz skip_mul_ten
mov dl, ch ; 十位数字
add dl, 30h ; 转换为ASCII码
mov ah, 02h
int 21h
skip_mul_ten:
; 显示个位数
mov dl, cl ; 个位数字
add dl, 30h ; 转换为ASCII码
mov ah, 02h
int 21h
; 换行
mov dl, 0Dh
int 21h
mov dl, 0Ah
int 21h
;===== 除法部分 (5 / 3 = 1余2) =====
; 显示提示信息
mov ah, 09h
lea dx, div_str
int 21h
; 计算并显示结果
mov ax, 5 ; 被除数设置为5
mov bl, 3 ; 除数设置为3
div bl ; 除法操作: AL=商, AH=余数
; 显示操作数和等号
mov dl, '5'
int 21h
mov dl, '/'
int 21h
mov dl, '3'
int 21h
mov dl, '='
int 21h
mov bh, ah ; 将余数保存到BH
; 显示商
mov dl, al ; 商在AL中
add dl, 30h ; 转换为ASCII
mov ah, 02h
int 21h
; 显示余数符号和余数
mov dl, 'r'
int 21h
mov dl, bh ; 余数在BH中
add dl, 30h ; 转换为ASCII
mov ah, 02h
int 21h
; 换行
mov dl, 0Dh
int 21h
mov dl, 0Ah
int 21h
;===== 平方部分 (52 = 25) =====
; 显示提示信息
mov ah, 09h
lea dx, sqr_str
int 21h
; 计算并显示结果
mov al, 05 ; 设置基数为5
mul al ; AL * AL -> AX (25)
; 显示操作数和等号
mov dl, '5'
int 21h
mov dl, 0B2h ; 上标2字符
int 21h
mov dl, '='
int 21h
; 处理并显示两位数结果
aam ; 转换AX为十进制
mov cx, ax ; 临时保存结果
; 显示十位数(如果有)
cmp ch, 0
jz skip_sqr_ten
mov dl, ch ; 十位(2)
add dl, 30h
mov ah, 02h
int 21h
skip_sqr_ten:
; 显示个位数
mov dl, cl ; 个位(5)
add dl, 30h
mov ah, 02h
int 21h
; 换行
mov dl, 0Dh
int 21h
mov dl, 0Ah
int 21h
;===== 程序结束 =====
mov ah, 4ch ; DOS功能调用:程序结束
int 21h
;===== 数据段 =====
add_str db '加法: $'
sub_str db 0Dh, 0Ah, '减法: $'
mul_str db 0Dh, 0Ah, '乘法: $'
div_str db 0Dh, 0Ah, '除法: $'
sqr_str db 0Dh, 0Ah, '平方: $'
code ends
end start
我要的显示结果是:
加法:5+3=8
减法:5-3=2
乘法:5*3=15
除法:5/3=1r2
平方:5*5=25