汇编语言无符号数排序代码 要求:1,从键盘输入10个无符号数 2,将这10个无符号数进行对比后从小到大排列显示出来
时间: 2024-01-19 07:03:10 浏览: 84
好的,以下是汇编语言无符号数排序的代码,可以满足您的要求:
```assembly
;-----------------------------------------------------------
; 无符号数排序程序
; 输入:10个无符号数
; 输出:从小到大排列的10个无符号数
;-----------------------------------------------------------
.model small
.stack 100h
.data
array db 10 dup(0) ; 存放10个无符号数
inmsg db '请输入第$个数:$'
outmsg db '排序后的结果为:$'
lenmsg equ $-outmsg
.code
main proc
mov ax, @data ; 初始化数据段寄存器
mov ds, ax
; 输入10个无符号数
mov cx, 10 ; 循环10次
mov bx, 0 ; 数组下标初始化为0
input_loop:
inc bx ; 数组下标加1
push cx ; 保存循环计数器cx的值
push bx ; 保存数组下标
mov dl, '0' ; 显示提示信息
mov ah, 02h
int 21h
mov dl, '0' + bx ; 显示第几个数
int 21h
mov dx, offset inmsg
mov ah, 09h
int 21h
pop bx ; 恢复数组下标
add bx, offset array
call input_unsigned_num ; 调用输入无符号数的子程序
pop cx ; 恢复循环计数器cx的值
loop input_loop
; 排序
mov cx, 9 ; 循环9次
sort_loop:
mov di, 0 ; di表示数组下标,初始化为0
inner_loop:
cmp di, cx ; 判断是否到达循环的尾部
jge next ; 如果是,跳出循环
mov ax, di ; 获得数组下标
inc ax
push ax ; 保存ax的值
mov bx, di
add bx, 1 ; 获得下一个数组下标
add bx, offset array
mov al, [bx] ; 获得数组中下一个元素的值
mov bx, di
add bx, offset array
cmp al, [bx] ; 比较两个元素的值
jb swap ; 如果需要交换,跳转到swap子程序
pop ax ; 恢复ax的值
inc di ; 数组下标加1
jmp inner_loop
swap:
mov al, [bx] ; 交换两个元素的值
mov ah, [bx+1]
mov cl, [bx-1]
mov ch, [bx]
mov [bx], cl
mov [bx+1], ch
mov [bx-1], al
pop ax ; 恢复ax的值
inc di ; 数组下标加1
jmp inner_loop
next:
loop sort_loop
; 输出排序后的结果
mov dx, offset outmsg
mov ah, 09h
int 21h
mov cx, 10
mov bx, 0
output_loop:
inc bx
push cx
push bx
mov al, [bx+offset array]
call output_unsigned_num ; 调用输出无符号数的子程序
pop bx
pop cx
loop output_loop
mov ah, 4ch ; 返回操作系统
int 21h
main endp
; 子程序:输入无符号数
; 输入:无
; 输出:输入的无符号数
input_unsigned_num proc
xor ax, ax ; ax寄存器清零
xor dx, dx ; dx寄存器清零
input_loop:
mov ah, 01h ; 从键盘输入一个字符
int 21h
cmp al, 0dh ; 判断是否输入回车
je exit ; 如果是,退出循环
cmp al, '0' ; 判断是否输入的是数字
jb error ; 如果不是,跳转到error子程序
cmp al, '9' ; 判断是否输入的是数字
ja error ; 如果不是,跳转到error子程序
sub al, '0' ; 将字符转换为数字
mov bl, al
mov al, ah
mov ah, 0
mul ah
add ax, bx
jmp input_loop
error:
mov dx, offset errmsg ; 显示错误信息
mov ah, 09h
int 21h
jmp input_loop
exit:
mov [bx], al ; 将输入的无符号数存入数组中
ret
input_unsigned_num endp
; 子程序:输出无符号数
; 输入:要输出的无符号数
; 输出:无
output_unsigned_num proc
xor cx, cx ; cx寄存器清零
output_loop:
mov dx, 0 ; dx寄存器清零
mov ax, 10
div cx
add dl, '0'
push dx
cmp ax, 0
jne output_loop
print_loop:
pop dx
mov ah, 02h
int 21h
cmp sp, 0
jne print_loop
mov dl, ' '
int 21h
ret
output_unsigned_num endp
; 错误信息
errmsg db '输入错误,请重新输入!$'
end main
```
需要注意的是,这段代码是基于8086汇编语言编写的,可能需要在不同的汇编器上进行微调才能正确编译。
阅读全文