汇编语言输入全班成绩排序
时间: 2023-07-01 17:09:09 浏览: 45
以下是一个使用汇编语言实现的全班成绩排序程序:
```
.model small
.stack 100h
.data
grades db 80, 90, 75, 85, 95, 70, 60, 55, 65, 50
n equ 10
.code
main proc
mov ax, @data
mov ds, ax
; 输出原始成绩
mov cx, n
mov si, 0
mov ah, 02h ; DOS中断,输出字符
mov dl, 'O'
int 21h
mov dl, 'r'
int 21h
mov dl, 'i'
int 21h
mov dl, 'g'
int 21h
mov dl, 'i'
int 21h
mov dl, 'n'
int 21h
mov dl, 'a'
int 21h
mov dl, 'l'
int 21h
mov dl, ' '
int 21h
mov dl, 'g'
int 21h
int 21h
mov dl, 'r'
int 21h
mov dl, 'a'
int 21h
mov dl, 'd'
int 21h
mov dl, 'e'
int 21h
mov dl, 's'
int 21h
mov dl, ':'
int 21h
mov dl, ' '
int 21h
print_grades:
mov bl, grades[si]
add bl, 30h ; 转换成 ASCII 码
mov dl, bl
int 21h
mov dl, ','
int 21h
inc si
loop print_grades
mov dl, 0dh ; 换行符
int 21h
mov dl, 0ah
int 21h
; 排序
mov cx, n
outer_loop:
mov si, 0
inner_loop:
mov al, grades[si]
cmp al, grades[si+1]
jge no_swap
xchg al, grades[si+1]
mov grades[si], al
no_swap:
inc si
loop inner_loop
loop outer_loop
; 输出排好序的成绩
mov cx, n
mov si, 0
mov ah, 02h ; DOS中断,输出字符
mov dl, 'S'
int 21h
mov dl, 'o'
int 21h
mov dl, 'r'
int 21h
mov dl, 't'
int 21h
mov dl, 'e'
int 21h
mov dl, 'd'
int 21h
mov dl, ' '
int 21h
mov dl, 'g'
int 21h
int 21h
mov dl, 'r'
int 21h
mov dl, 'a'
int 21h
mov dl, 'd'
int 21h
mov dl, 'e'
int 21h
mov dl, 's'
int 21h
mov dl, ':'
int 21h
mov dl, ' '
int 21h
print_sorted_grades:
mov bl, grades[si]
add bl, 30h ; 转换成 ASCII 码
mov dl, bl
int 21h
mov dl, ','
int 21h
inc si
loop print_sorted_grades
mov dl, 0dh ; 换行符
int 21h
mov dl, 0ah
int 21h
mov ah, 4ch ; DOS中断,程序退出
int 21h
main endp
end main
```
在这个程序中,首先定义了一个包含10个成绩的数组`grades`,然后使用冒泡排序算法将其排好序,最后输出原始成绩和排好序的成绩。