用汇编语言,在软件emu8086中,写一个关于从键盘输入10个有符号数,然后将这些数从小到大排列出来,用寄存器实现的代码,并加上注释
时间: 2024-01-16 12:03:24 浏览: 83
汇编从键盘输入数据并排序
好的,以下是代码和注释:
```
; 从键盘输入10个有符号数并排序
data segment
nums db 10 dup(?) ; 存储输入的10个数
data ends
stack segment
dw 100h ; 设置栈大小为100h
stack ends
code segment
start:
mov ax, data ; 初始化数据段寄存器
mov ds, ax
mov ax, stack ; 初始化栈段寄存器
mov ss, ax
mov sp, stack ; 设置栈指针
; 从键盘读取10个数
mov cx, 10 ; 循环10次
mov di, 0 ; 初始化数组索引
input_loop:
mov ah, 1 ; 读取字符
int 21h ; 调用21h中断
sub al, '0' ; 转换成数字
mov nums[di], al ; 存储到数组中
inc di ; 索引+1
loop input_loop ; 继续读取下一个数
; 冒泡排序
mov cx, 9 ; 循环9次
outer_loop:
mov di, 0 ; 重置索引
inner_loop:
mov al, nums[di] ; 取出当前数
cmp al, nums[di+1] ; 比较当前数与下一个数
jle skip_swap ; 如果当前数小于等于下一个数,跳过交换
xchg al, nums[di+1] ; 否则交换当前数与下一个数
mov nums[di], al ; 存储交换后的当前数
skip_swap:
inc di ; 索引+1
loop inner_loop ; 继续比较下一个数
loop outer_loop ; 继续循环比较
; 输出排序后的结果
mov ah, 2 ; 设置输出功能号
mov dl, '-' ; 输出一个横线
int 21h
mov cx, 10 ; 循环10次
mov di, 0 ; 初始化索引
output_loop:
mov al, nums[di] ; 取出当前数
add al, '0' ; 转换为字符
mov ah, 2 ; 设置输出功能号
mov dl, al ; 存储要输出的字符
int 21h ; 调用21h中断
inc di ; 索引+1
loop output_loop ; 继续输出下一个数
mov ah, 4ch ; 设置退出功能号
int 21h ; 调用21h中断
code ends
end start
```
注释已经详细解释了代码的各个部分和功能。这个程序使用冒泡排序算法对输入的10个有符号数进行排序,并将结果输出到屏幕上。
阅读全文