使用8086汇编写一个成绩系统,包含排序功能
时间: 2024-01-25 16:02:28 浏览: 62
好的,下面是一个使用8086汇编语言编写的成绩系统,包含排序功能:
```
; 定义数据段
data segment
scores db 80h, 90h, 70h, 60h, 85h, 75h, 95h, 65h, 55h, 80h ; 存储成绩的数组
n db 10 ; 数组元素个数
data ends
; 定义代码段
code segment
start:
mov ax, data
mov ds, ax ; 初始化数据段寄存器
; 输出原始成绩
mov ah, 09h
mov dx, offset scores
mov cx, n
mov bl, 2 ; 每个数占两个字节
mul cx ; 计算要输出的字节数
add dx, ax ; 调整输出地址
mov ah, 40h ; 输出函数号
int 21h ; 调用DOS中断
; 排序
mov si, 0 ; 初始化si为0
sort:
mov di, si ; 初始化di为si
inc di ; di指向下一个元素
loop1:
cmp di, n ; 比较di是否越界
jae next1 ; 如果越界,结束循环
mov al, [scores+di] ; 取出当前元素
cmp al, [scores+si] ; 比较当前元素和最小元素的大小
jnb next1 ; 如果当前元素大于等于最小元素,跳转到下一次循环
xchg al, [scores+si] ; 交换当前元素和最小元素
xchg al, [scores+di]
next1:
inc si ; si指向下一个元素
cmp si, n ; 比较si是否越界
jb sort ; 如果没有越界,继续循环
; 输出排序后的成绩
mov ah, 09h
mov dx, offset scores
mov cx, n
mov bl, 2 ; 每个数占两个字节
mul cx ; 计算要输出的字节数
add dx, ax ; 调整输出地址
mov ah, 40h ; 输出函数号
int 21h ; 调用DOS中断
mov ah, 4ch ; 退出函数号
int 21h ; 调用DOS中断
code ends
end start
```
该程序首先定义了一个数据段,其中包含了一个存储成绩的数组和数组元素个数。然后定义了一个代码段,其中包含了程序的主函数。
程序的主函数首先输出原始成绩,然后进行排序。排序使用了选择排序的算法,通过双重循环来找到最小元素,并将其放到数组的前面。排序结束后再次输出成绩。
这个程序可以通过汇编器进行编译,生成可执行文件后可以在DOS环境下运行。
阅读全文