使用Emu8086仿真系统编写实现一位十进制四则运算的代码
时间: 2024-06-10 10:03:53 浏览: 114
好的,以下是使用Emu8086仿真系统编写实现十进制四则运算的代码:
```
$Data segment
Num1 DB 3,0,0,0 ; 第一个数值,占4位十进制数
Num2 DB 2,0,0,0 ; 第二个数值,占4位十进制数
Op DB '+',0 ; 运算符,加法为'+',减法为'-'
Result DB 0,0,0,0 ; 运算结果
$Data ends
$Code segment
start:
mov ax, @data
mov ds, ax ; 初始化数据段寄存器
; 读取输入的两个数和运算符
mov si, offset Num1
call GetNum
mov si, offset Num2
call GetNum
mov si, offset Op
call GetOp
; 进行四则运算
cmp Op, '+'
je Add
cmp Op, '-'
je Sub
jmp done
Add:
mov al, Num1[3]
add al, Num2[3]
daa ; 十进制调整
mov Result[3], al
mov al, Num1[2]
adc al, Num2[2]
daa ; 十进制调整
mov Result[2], al
mov al, Num1[1]
adc al, Num2[1]
daa ; 十进制调整
mov Result[1], al
mov al, Num1[0]
adc al, Num2[0]
daa ; 十进制调整
mov Result[0], al
jmp done
Sub:
mov al, Num1[3]
sub al, Num2[3]
das ; 十进制调整
mov Result[3], al
mov al, Num1[2]
sbb al, Num2[2]
das ; 十进制调整
mov Result[2], al
mov al, Num1[1]
sbb al, Num2[1]
das ; 十进制调整
mov Result[1], al
mov al, Num1[0]
sbb al, Num2[0]
das ; 十进制调整
mov Result[0], al
jmp done
done:
; 输出结果
mov ah, 09h
mov dx, offset Result
int 21h
; 退出程序
mov ah, 4ch
int 21h
; 读取一个4位的十进制数到si指向的缓冲区中
; 注意:此函数会修改si的值
GetNum:
mov cx, 4
xor bh, bh
xor bl, bl
.L1:
mov ah, 01h
int 21h ; 从键盘输入一个字符
cmp al, '0'
jb .L1 ; 如果不是数字,则继续等待下一个字符
cmp al, '9'
ja .L1
mov [si], al
sub al, '0'
mov bl, 10
mul bl
add bh, al
dec cx
inc si
cmp cx, 0
jne .L1
; 将高位的零去掉
dec si
.L2:
cmp [si], 0
jne .L3
mov [si], bl
dec si
jmp .L2
.L3:
ret
; 读取输入的运算符
; 注意:此函数会修改si的值
GetOp:
mov ah, 01h
int 21h
cmp al, '+'
je .L1
cmp al, '-'
je .L1
mov [si], '+'
.L1:
ret
$Code ends
end start
```
希望能帮到你!如果还有其他问题,欢迎继续提问。