emu8086编译器编写:输入十个无符号16位二进制数进行排序
时间: 2023-12-13 12:05:17 浏览: 196
对一组无符号数据排序,并设计出显示十六进制数的子程序,调用该子程序将排序的结果显示在显示器上。
3星 · 编辑精心推荐
好的,以下是使用emu8086编译器编写的输入十个无符号16位二进制数进行排序的程序:
```
; 用于输入十个无符号16位二进制数进行排序的程序
.model small
.stack 100h
.data
nums db 10 ; 数字的数量
arr dw 0,0,0,0,0,0,0,0,0,0 ; 存储数字的数组
prompt db 'Please enter 10 unsigned 16-bit binary numbers:$'
sorted db 'The sorted numbers are:$'
.code
mov ax, @data
mov ds, ax
; 输出提示信息
mov ah, 09h
mov dx, offset prompt
int 21h
; 循环读取数字
mov cx, nums
mov bx, offset arr
input:
; 读取输入的数字
mov ah, 01h
int 21h
; 将输入的数字转换为二进制
mov ax, bx
mov dx, 0
mov si, 0
convert:
shr ax, 1
jnc skip
or si, 1
skip:
shl si, 1
inc dx
cmp dx, 16
jl convert
; 将转换后的二进制数存储到数组中
mov [bx], si
add bx, 2
; 判断是否读取完10个数字
dec cx
jnz input
; 对数组进行排序
mov cx, nums
mov bx, offset arr
sort:
mov si, bx
add si, 2
mov di, si
mov ax, [bx]
inner_loop:
cmp ax, [si]
jbe skip_swap
mov ax, [si]
mov di, si
skip_swap:
add si, 2
cmp si, bx+20
jne inner_loop
; 交换数字
mov dx, [bx]
xchg dx, [di]
mov [bx], dx
; 移动到下一个数字
add bx, 2
dec cx
jnz sort
; 输出排序后的数字
mov ah, 09h
mov dx, offset sorted
int 21h
mov cx, nums
mov bx, offset arr
output:
; 输出数字
mov ax, [bx]
mov bx, 02h
mov cx, 16
print:
shl ax, 1
jc one
mov dl, '0'
jmp print_char
one:
mov dl, '1'
print_char:
mov ah, 02h
int 21h
loop print
; 输出换行符
mov dl, 0dh
mov ah, 02h
int 21h
mov dl, 0ah
int 21h
; 移动到下一个数字
add bx, 2
dec nums
jnz output
; 退出程序
mov ah, 4ch
int 21h
end
```
这个程序会提示用户输入10个无符号16位二进制数,然后将这些数字存储到一个数组中,并对数组进行排序。最后,程序会输出排序后的数字。
阅读全文