汇编语言 数据排序。 提示输入数据,比如10个数据(十进制形式) 然后,输入提示,1-从大到小排序; 2-从小到大排序, 显示按要求排序的数据。可以显示在同一行、两个数据之间用一定空格分开;也可以显示在不同的行。
时间: 2024-03-09 17:49:49 浏览: 24
好的,以下是汇编语言实现数据排序的代码:
```
.model small
.stack 100h
.data
arr db 10, 5, 8, 2, 3, 6, 4, 1, 9, 7 ; 待排序的数据
n equ $-arr ; 数据个数
newline db 0dh, 0ah, '$'
.code
main proc
mov ax, @data
mov ds, ax
; 输出提示信息
mov ah, 09h
lea dx, prompt
int 21h
; 接收用户输入
mov ah, 01h
int 21h
sub al, '0' ; 转换为数字
; 排序
cmp al, 1
je sort_desc ; 从大到小排序
cmp al, 2
je sort_asc ; 从小到大排序
; 错误处理
mov ah, 09h
lea dx, error
int 21h
jmp exit
sort_desc:
mov si, 0
outer_loop:
mov di, si
inc di
inner_loop:
mov al, arr[si]
mov bl, arr[di]
cmp al, bl
jge skip_swap
xchg al, bl
mov arr[si], al
mov arr[di], bl
skip_swap:
inc di
cmp di, n
jl inner_loop
inc si
cmp si, n-1
jl outer_loop
jmp print_result
sort_asc:
mov si, 0
outer_loop2:
mov di, si
inc di
inner_loop2:
mov al, arr[si]
mov bl, arr[di]
cmp al, bl
jle skip_swap2
xchg al, bl
mov arr[si], al
mov arr[di], bl
skip_swap2:
inc di
cmp di, n
jl inner_loop2
inc si
cmp si, n-1
jl outer_loop2
print_result:
; 输出排序后的结果
mov ah, 09h
lea dx, result
int 21h
mov cx, n
mov si, 0
print_loop:
mov dl, arr[si]
add dl, '0'
int 21h
mov dl, ' '
int 21h
inc si
loop print_loop
mov ah, 09h
lea dx, newline
int 21h
exit:
mov ah, 4ch
int 21h
prompt db '请输入排序方式(1-从大到小;2-从小到大):$'
error db '错误的选择,请重新输入!$'
result db '排序后的结果为:$'
end main
```
这份代码使用的是冒泡排序算法,其中 `sort_desc` 子程序实现从大到小排序,`sort_asc` 子程序实现从小到大排序。在排序完成后,使用循环依次输出排序后的结果。