请写一份汇编语言代码,功能是利用8086在Proteus中实现加减乘除计算器
时间: 2023-12-10 09:38:48 浏览: 120
以下是一个简单的汇编语言代码,实现了加减乘除计算器的基本功能:
```
.model small
.stack 100h
.data
num1 dw ?
num2 dw ?
result dw ?
.code
main proc
mov ax, @data
mov ds, ax
; 读取第一个数
mov ah, 01h
int 21h
sub al, 30h ; 将 ASCII 码转换为数字
mov num1, ax
; 读取运算符
mov ah, 01h
int 21h
; 读取第二个数
mov ah, 01h
int 21h
sub al, 30h ; 将 ASCII 码转换为数字
mov num2, ax
; 进行计算
mov ah, 00h ; 清除高位
mov al, byte ptr [result] ; 将结果低字节读入 AL
cmp byte ptr [result+1], 0 ; 判断结果高字节是否为 0
jne overflow ; 如果不为 0,则溢出
cmp al, 0FFh ; 判断结果是否为负数
jne display_result ; 如果不是负数,则显示结果
; 处理负数结果
mov ax, result ; 取补码
not ax
add ax, 1 ; 加 1
mov result, ax ; 存储结果
jmp display_result ; 显示结果
overflow:
mov ah, 09h ; 显示错误消息
mov dx, offset overflow_msg
int 21h
jmp exit_program ; 退出程序
display_result:
mov ah, 02h ; 显示结果
mov dl, al ; 显示低字节
add dl, 30h ; 转换为 ASCII 码
int 21h
mov dl, ah ; 显示高字节
cmp dl, 0 ; 如果高字节为 0,则跳过
jne display_result_2
jmp exit_program
display_result_2:
add dl, 30h ; 转换为 ASCII 码
int 21h
exit_program:
mov ah, 4ch ; 退出程序
int 21h
main endp
end main
```
这个代码使用了 DOS 中断来读取用户输入和显示结果。用户需要按照以下格式输入计算表达式:
```
<number1> <operator> <number2>
```
其中,`<number1>` 和 `<number2>` 是整数,`<operator>` 是加号、减号、乘号或除号。例如:
```
5 + 3
```
程序会将结果显示在屏幕上。如果结果超出了 16 位,程序会显示一个错误消息。如果结果是负数,程序会将其转换为补码并显示。
阅读全文