基于8086CPU的汇编语言从键盘输入10个带符号字节数据(如-56),将其从小到大排序,并将结果在显示器上以十进制形式显示输出。(要求写出主程序调用子程序的程序段。)
时间: 2023-06-17 10:04:42 浏览: 68
以下是基于8086CPU的汇编语言实现从键盘输入10个带符号字节数据,将其从小到大排序,并将结果在显示器上以十进制形式显示输出的程序段:
```
; 定义常量
MAX_NUMS EQU 10 ; 数组元素个数
; 定义变量
DataList DB MAX_NUMS DUP(0) ; 存放输入数据的数组
Temp DB 0 ; 用于交换数据的临时变量
; 主程序
MOV AX, @DATA ; 初始化数据段寄存器
MOV DS, AX
LEA SI, DataList ; 存放输入数据的数组首地址
MOV CX, MAX_NUMS ; 循环次数
; 从键盘输入数据
Input:
CALL GetInput ; 调用GetInput子程序从键盘输入数据
MOV [SI], AL ; 将输入数据存放到DataList数组中
INC SI
LOOP Input
; 数据排序
MOV SI, OFFSET DataList ; 设置数组首地址
MOV CX, MAX_NUMS - 1 ; 循环次数
Sort:
MOV BX, CX ; 将循环次数存放到BX寄存器中
MOV DI, SI ; 将数组首地址存放到DI寄存器中
CMP [SI], [SI+1] ; 比较相邻两个元素的大小
JBE Next ; 如果前一个元素小于等于后一个元素,则跳过交换步骤
MOV AL, [SI] ; 交换两个元素
MOV Temp, AL
MOV AL, [SI+1]
MOV [SI], AL
MOV AL, Temp
MOV [SI+1], AL
Next:
INC SI ; 移动到下一个元素
LOOP Sort
; 显示结果
MOV SI, OFFSET DataList ; 设置数组首地址
MOV CX, MAX_NUMS ; 循环次数
Output:
CALL DisplayData ; 调用DisplayData子程序显示数据
INC SI
LOOP Output
; 子程序:从键盘输入数据
GetInput:
MOV AH, 01h ; 读取键盘输入的字符
INT 21h ; 调用21h中断
MOV BL, AL ; 将输入的字符存放到BL寄存器中
MOV AH, 00h ; 读取键盘输入的扫描码
INT 16h ; 调用16h中断
CMP BL, '-' ; 判断是否为负号
JNE IsNotMinus ; 如果不是负号,则跳过
NEG [SI] ; 如果是负号,将后一个字节取反
JMP EndGetInput ; 结束输入
IsNotMinus:
SUB BL, '0' ; 将字符转换为数字
MOV AL, BL
CBW ; 将AL的值扩展到AX寄存器中
MOV BL, 10
MUL BL ; 将AX乘以10
ADD [SI], AL ; 将输入的数字累加到指定位置
EndGetInput:
RET
; 子程序:显示数据
DisplayData:
MOV AX, [SI] ; 将数组中的数据读取到AX寄存器中
CMP AX, 0 ; 判断数据是否为负数
JNS Positive ; 如果不是负数,则跳过
NEG AX ; 如果是负数,将其取反
MOV DL, '-' ; 显示负号
MOV AH, 02h
INT 21h ; 调用21h中断
Positive:
MOV BX, 10 ; 将数据除以10,用于分离各位数字
XOR BL, BL
DIV BX ; 将AX除以10
PUSH AX ; 将余数压入堆栈
CMP AX, 0 ; 判断商是否为0
JNE Positive ; 如果不为0,继续分离各位数字
DisplayNum:
POP AX ; 将余数弹出堆栈
ADD AL, '0' ; 将数字转换为字符
MOV DL, AL ; 将字符存放到DL寄存器中
MOV AH, 02h
INT 21h ; 调用21h中断
LOOP DisplayNum ; 循环显示各位数字
MOV DL, ',' ; 显示逗号分隔符
MOV AH, 02h
INT 21h ; 调用21h中断
RET
```
注意:以上代码未进行完整的测试,可能存在一些错误,仅供参考。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)