利用emu8086编写程序,计算两个带符号数据(字节类型)的和,两个加数从键盘输入,和显示显示器上,如果和溢出了,程序要给出warning!Sum overflows
时间: 2024-11-20 20:56:12 浏览: 13
在EMU8086汇编语言中编写这样的程序,首先需要了解如何获取用户输入、处理加法操作以及检测溢出。以下是步骤概述:
1. **获取用户输入**:
- 使用INT 21H中断服务请求,例如`MOV AH, 1`(读取ASCII字符),`INT 21H`,然后将结果保存在AL寄存器中,用于接收加数。
2. **输入转换**:
- 将用户输入的ASCII码转换成16位带符号数据,通常的做法是先将其与0x30('0'的ASCII码)做差,然后左移一位(相当于减去0x30再乘以10)。
3. **加法操作**:
- 使用两个寄存器(比如AX和DX)分别存储两个加数,然后执行`ADD AX, DX`或`ADD AX, [内存地址]`,结果存在AX。
4. **溢出检查**:
- 检查标志CF(进位标志),如果CF为1,说明有溢出。可以在加法后立即测试:`JNC NO_OVERFLOW`,跳过警告部分。
5. **显示结果**:
- 如果无溢出,使用INT 21H的`MOV AH, 2`(写入字符串)和`MOV DL, ' '`(空格)清屏,然后写入结果到屏幕上。
6. **溢出警告**:
- 如果发生溢出,使用`MOV AH, 9`(写入字符串)和`LEA DX, OVERFLOW_MSG`(指向预定义的溢出消息)进行显示。
以下是一个简化版的伪代码示例:
```assembly
; 假定用户输入的加数存于AL中
GET_INPUT:
MOV AH, 1
INT 21H
SUB AL, 0x30
MUL 10
ADD AX, [BUFFER] ; 如果需要第二个加数,替换为另一个缓冲区地址
ADD_LOOP:
ADD AX, [BUFFER+2] ; 同理,如果需要第二个加数
TEST AX, AX ; 检查溢出
JNC DISPLAY_RESULT
JMP OVERFLOW_WARNING
DISPLAY_RESULT:
; 清屏并显示结果...
JMP END_OF_PROGRAM
OVERFLOW_WARNING:
; 显示"Sum overflows!"
MOV AH, 9
LEA DX, OVERFLOW_MSG
INT 21H
END_OF_PROGRAM:
; 结束程序...
```
阅读全文