汇编利用DosBox 0.74写出程序满足以下条件:接收从键盘输入的一个班的学生成绩,并存放于30字的grade数组中,各数据的格式为: 学号,成绩1,成绩2,...,成绩5 然后根据grade中的学生成绩,把学生名次填入rank数据组中,并显示出来, 格式为: 学号,名次
时间: 2023-11-26 10:03:35 浏览: 85
好的,以下是一个示例程序,可以满足你的要求:
```
.model small
.stack 100h
.data
msg1 db '请输入第', 0
msg2 db '号学生的成绩:', 0
newline db 10, 13, '$'
grade db 30 dup(0) ; 存放学生成绩的数组
rank db 30 dup(0) ; 存放学生名次的数组
count db 0 ; 学生个数计数器
i db 0 ; 循环计数器
j db 0 ; 循环计数器
temp db 0 ; 交换用的临时变量
pos db 0 ; 当前位置
ranknum db 1 ; 名次计数器
studentid db 0 ; 学生ID
marks db 5 dup(0) ; 学生成绩
.code
main proc
mov ax, @data
mov ds, ax
; 循环读入学生成绩
loop1:
mov ah, 09h ; 显示提示信息
mov dx, offset msg1
int 21h
mov ah, 01h ; 读入学生ID
int 21h
sub al, 48 ; 将ASCII码转换为数字
mov studentid, al
mov ah, 09h ; 显示提示信息
mov dx, offset msg2
int 21h
; 读入5门成绩
mov i, 0
loop2:
mov ah, 01h
int 21h
sub al, 48 ; 将ASCII码转换为数字
mov marks[i], al
inc i
cmp i, 5
jne loop2
; 将学生ID和成绩存入数组
mov pos, count
mov al, studentid
mov grade[pos], al
mov i, 0
mov j, pos
mov bx, offset grade
add bx, j
add bx, 1 ; 跳过学生ID
loop3:
mov al, marks[i]
mov [bx], al
inc i
inc bx
cmp i, 5
jne loop3
inc count ; 学生个数加1
cmp count, 30 ; 如果已经输入了30个学生,则退出循环
je endloop1
jmp loop1
endloop1:
; 计算学生名次
mov i, 0
loop4:
mov j, i
inc j
mov bx, offset grade
add bx, i
add bx, 1 ; 跳过学生ID
loop5:
mov al, [bx]
mov temp, al
mov bx, offset grade
add bx, j
add bx, 1 ; 跳过学生ID
mov al, [bx]
cmp temp, al
jge skip
; 交换位置
mov al, grade[i]
mov bl, grade[j]
mov grade[i], bl
mov grade[j], al
; 名次加1
mov rank[j], ranknum
mov ranknum, j+1
skip:
inc j
cmp j, count ; 如果j等于count,则退出内层循环
je endloop5
jmp loop5
endloop5:
mov rank[i], ranknum ; 记录当前学生名次
mov ranknum, i+2 ; 下一个排名为当前排名加1
inc i
cmp i, count ; 如果i等于count,则退出外层循环
je endloop4
jmp loop4
endloop4:
; 显示学生名次
mov i, 0
loop6:
mov ah, 02h
mov dl, grade[i]
add dl, 48 ; 将数字转换为ASCII码
int 21h
mov ah, 09h
mov dl, ','
int 21h
mov ah, 02h
mov dl, rank[i]
add dl, 48
int 21h
mov ah, 09h
mov dx, offset newline
int 21h
inc i
cmp i, count ; 如果i等于count,则退出循环
je endloop6
jmp loop6
endloop6:
mov ah, 4ch
int 21h
main endp
end main
```
这个程序首先会提示用户输入学生的学号和成绩,然后将它们存入grade数组中。接下来,程序会使用冒泡排序计算学生的名次,并将名次存入rank数组中。最后,程序会显示每个学生的学号和名次。
请注意,这只是一个示例程序,你可以根据自己的需求进行修改。同时,该程序可能存在一些问题,需要你自行检查和改进。
阅读全文