(8086汇编实现)设计一个班级成绩管理系统;统计计算学生的成绩,然后对学生的按统计成绩进行排名,最后输出学生的名次; 基本要求 接收从键盘输入的一个班的学生成绩,并存放于30字的grade数组中,各数据的格式为: 学号,成绩1,成绩2,...,成绩5 然后根据grade中的学生成绩,把学生名次填入rank数据组中,并显示出来, 格式为: 学号,名次
时间: 2024-02-03 18:02:49 浏览: 147
下面是一个基本的班级成绩管理系统的汇编语言代码,通过接收键盘输入的学生成绩,将学生名次填入rank数组中,并显示学号和名次。
```
data segment
grade db 30*6 dup(?)
rank db 30 dup(0)
count dw 0
data ends
code segment
assume cs:code, ds:data
start:
mov ax, data
mov ds, ax
; 接收键盘输入的学生成绩
mov si, 0
mov cx, 30
input:
call read_input
mov [grade + si], al
add si, 6
loop input
; 计算学生成绩的总和并排序
mov si, 0
mov cx, 30
calc:
mov al, [grade + si + 1]
add al, [grade + si + 2]
add al, [grade + si + 3]
add al, [grade + si + 4]
add al, [grade + si + 5]
mov bl, al
mov bh, 0
mov di, si
mov cx, 29
inner:
add di, 6
cmp bl, [grade + di + 1]
jnc skip
mov dl, [grade + di]
mov [grade + di], [grade + si]
mov [grade + si], dl
mov bl, [grade + di + 1]
mov bh, 0
skip:
loop inner
inc si
loop calc
; 填充学生名次
mov si, 0
mov cx, 30
mov bx, 1
fill_rank:
mov al, [grade + si + 1]
add al, [grade + si + 2]
add al, [grade + si + 3]
add al, [grade + si + 4]
add al, [grade + si + 5]
mov bl, al
mov bh, 0
mov di, si
mov ax, bx
mov [rank + di], al
mov cx, 29
inner2:
add di, 6
cmp bl, [grade + di + 1]
jnc skip2
inc ax
mov [rank + di], al
mov bl, [grade + di + 1]
mov bh, 0
skip2:
loop inner2
inc si
inc bx
loop fill_rank
; 显示学号和名次
mov si, 0
mov cx, 30
display:
mov ah, 02h
mov dl, [grade + si]
int 21h
mov ah, 09h
mov dx, offset msg1
int 21h
mov dl, [rank + si]
add dl, 48
int 21h
mov ah, 09h
mov dx, offset msg2
int 21h
add si, 6
loop display
; 结束程序
mov ah, 4ch
int 21h
read_input:
; 读取一个字符
mov ah, 01h
int 21h
; 如果不是数字则跳过
cmp al, '0'
jl read_input
cmp al, '9'
jg read_input
; 转换字符为数字
sub al, '0'
ret
msg1 db ",", "$"
msg2 db " ", "$"
code ends
end start
```
阅读全文