86汇编写一个程序实现简单的学生成绩管理,满足以下要求,键盘输入8个学生的学号和五门成绩,输出学号和排名
时间: 2024-02-24 22:56:17 浏览: 22
好的,以下是实现简单学生成绩管理的86汇编程序,满足键盘输入8个学生的学号和五门成绩,输出学号和排名的要求:
```
.model small
.stack 100h
.data
student db 8
score db 5
id db 8 dup(?)
grade db 8*5 dup(?)
rank db 8 dup(1)
.code
mov ax, @data
mov ds, ax
; 输入学号和成绩
mov cx, 8
input_loop:
mov ah, 0ah
lea dx, student
int 21h
mov [id+cx-1], student+2
mov si, score
mov di, grade+5*(cx-1)
mov bx, 5
input_score_loop:
mov ah, 1
int 21h
sub al, '0'
mov [di], al
inc di
dec bx
cmp bx, 0
jne input_score_loop
dec cx
cmp cx, 0
jne input_loop
; 排序,找出每个学生的排名
mov cx, 8
sort_loop:
mov bx, cx
dec bx
inner_loop:
mov si, grade+5*bx
mov di, grade+5*(bx+1)
mov al, [si]
cmp al, [di]
jge skip_swap
; 交换分数
mov dl, [si]
mov [si], [di]
mov [di], dl
; 交换学号
mov si, id+bx
mov di, id+bx+1
mov al, [si]
mov [si], [di]
mov [di], al
skip_swap:
dec bx
cmp bx, 0
jge inner_loop
; 更新排名
mov si, rank+cx-1
cmp [grade+5*(cx-1)], [grade+5*cx]
jne update_rank
inc byte ptr [si]
update_rank:
dec cx
cmp cx, 0
jne sort_loop
; 输出学号和排名
mov cx, 8
mov ah, 2
output_loop:
mov dl, [id+cx-1]
int 21h
mov dl, ':'
int 21h
mov si, rank+cx-1
mov al, [si]
add al, '0'
int 21h
mov dl, 0dh
int 21h
mov dl, 0ah
int 21h
dec cx
cmp cx, 0
jne output_loop
mov ah, 4ch
int 21h
end
```
在程序中,我们首先定义了8个学生的学号和五门成绩的变量,然后通过键盘输入学号和成绩。接着,使用冒泡排序算法对分数进行排序,并找出每个学生的排名。最后,输出学生的学号和排名。
注意:以上是汇编代码,需要使用汇编器进行编译,才能在8086上运行。