用汇编语言,在软件emu8086中,写-个关于从键盘输入10个有符号数,然后将这些数从小到大排列出来,用寄存器实现的代码,并加上注释
时间: 2024-03-23 13:42:35 浏览: 56
汇编从键盘输入数据并排序
好的,下面是代码和注释:
```
; 汇编代码实现从键盘输入10个有符号数,然后将这些数从小到大排列出来
.model small
.stack 100h
.data
arr db 10 dup(?) ; 用一个数组存储输入的10个数
n db 10 ; 数组长度
.code
main proc
mov ax, @data
mov ds, ax ; 初始化数据段寄存器
; 从键盘输入10个有符号数
mov cx, n ; 循环10次,每次输入一个数
lea di, arr ; 将数组地址存放在di寄存器中
input_loop:
mov ah, 01h ; 01h表示从键盘读取一个字符
int 21h ; 调用21h中断,等待用户输入
sub al, '0' ; 将字符转换为数字
cbw ; 将al中的无符号数转换为带符号数
mov [di], al ; 将输入的数字存储在数组中
inc di ; 指向下一个数组元素
loop input_loop ; 循环输入下一个数
; 将输入的数从小到大排列
mov cx, n ; 循环n-1次,每次将一个最小值放到前面
lea si, arr ; 将数组地址存放在si寄存器中
sort_outer_loop:
mov bx, si ; 将当前最小值的地址存放在bx寄存器中
mov al, [si] ; 将当前位置的数值存放在al寄存器中
lea di, [si+1] ; 将下一个位置的地址存放在di寄存器中
sort_inner_loop:
cmp al, [di] ; 将当前最小值和下一个数值比较
jle sort_next ; 如果当前最小值小于等于下一个数值,跳到下一个数值
mov al, [di] ; 否则将下一个数值存放在al寄存器中
mov bx, di ; 将下一个数值的地址存放在bx寄存器中
sort_next:
inc di ; 指向下一个数组元素
loop sort_inner_loop ; 循环比较下一个数值
mov dl, [si] ; 将当前位置的数值存放在dl寄存器中
mov [si], al ; 将最小值存放在当前位置
mov [bx], dl ; 将当前位置的数值存放在最小值位置
inc si ; 指向下一个数组元素
loop sort_outer_loop ; 循环排列下一个数值
; 将排列后的数输出
mov cx, n ; 循环n次,每次输出一个数
lea si, arr ; 将数组地址存放在si寄存器中
output_loop:
mov dl, [si] ; 将当前位置的数值存放在dl寄存器中
add dl, '0' ; 将数字转换为字符
mov ah, 02h ; 02h表示将字符输出到屏幕
int 21h ; 调用21h中断,输出字符
mov ah, 02h ; 再输出一个空格
mov dl, ' '
int 21h
inc si ; 指向下一个数组元素
loop output_loop ; 循环输出下一个数
mov ah, 4ch ; 4ch表示结束程序运行
int 21h ; 调用21h中断,结束程序
main endp
end main
```
注释中有详细的解释,希望可以帮到你。
阅读全文