对10个⽆符号16位整数排序;数字人工输入有输出用emu8086com文档给出代码
时间: 2023-11-28 10:50:49 浏览: 211
以下是使用emu8086com进行10个无符号16位整数排序的代码:
```
org 100h
data segment
array dw 10 dup(?) ; 存储10个无符号16位整数的数组
data ends
code segment
start:
mov ax, data ; 初始化数据段寄存器
mov ds, ax
; 输入10个无符号16位整数
mov cx, 10 ; 设置循环计数器为10
lea di, array ; 将数组地址放入 DI 寄存器
input_loop:
mov ah, 01 ; 调用 DOS 中的输入函数
int 21h
mov bl, al ; 保存输入的字符到 BL 寄存器
mov ah, 0 ; 将 AH 寄存器清零
mov al, bl ; 将 BL 寄存器的值移动到 AL 寄存器中
sub al, 30h ; 将 ASCII 码转换成数字
mov [di], ax ; 将输入的数字存储到数组中
add di, 2 ; 将 DI 寄存器移动到下一个数组元素的位置
loop input_loop ; 继续输入下一个数字,直到计数器为0
; 对数组进行排序
mov cx, 10 ; 设置循环计数器为10
outer_loop:
mov di, 0 ; 将 DI 寄存器初始化为0
inner_loop:
mov bx, di ; 将 DI 寄存器的值移动到 BX 寄存器中
add bx, 2 ; 将 BX 寄存器的值加上2,即指向下一个数组元素
cmp bx, 20 ; 比较 BX 寄存器的值和数组的结束地址
jnb next ; 如果 BX 寄存器的值大于等于20,则跳转到下一步
mov ax, [di] ; 将当前数组元素的值移动到 AX 寄存器中
mov dx, [bx] ; 将下一个数组元素的值移动到 DX 寄存器中
cmp dx, ax ; 比较两个元素的值
jb swap ; 如果下一个元素的值小于当前元素的值,则跳转到交换步骤
add di, 2 ; 将 DI 寄存器移动到下一个数组元素的位置
jmp inner_loop ; 继续比较下一组元素
swap:
mov [di], dx ; 将下一个元素的值存储到当前元素的位置
mov [bx], ax ; 将当前元素的值存储到下一个元素的位置
add di, 2 ; 将 DI 寄存器移动到下一个数组元素的位置
next:
loop outer_loop ; 继续排序下一个元素,直到计数器为0
; 输出排序后的结果
mov cx, 10 ; 设置循环计数器为10
lea di, array ; 将数组地址放入 DI 寄存器
output_loop:
mov ax, [di] ; 将当前数组元素的值移动到 AX 寄存器中
add di, 2 ; 将 DI 寄存器移动到下一个数组元素的位置
add ax, 3030h ; 将数字转换成 ASCII 码
mov dl, ah ; 将高位数字存储到 DL 寄存器中
mov ah, 02h ; 调用 DOS 中的输出函数
int 21h
mov dl, al ; 将低位数字存储到 DL 寄存器中
mov ah, 02h ; 调用 DOS 中的输出函数
int 21h
mov dl, ',' ; 输出逗号
mov ah, 02h ; 调用 DOS 中的输出函数
int 21h
mov dl, ' ' ; 输出空格
mov ah, 02h ; 调用 DOS 中的输出函数
int 21h
loop output_loop ; 继续输出下一个数字,直到计数器为0
; 退出程序
mov ah, 4ch ; 调用 DOS 中的退出程序函数
int 21h
code ends
end start
```
阅读全文