汇编题目:根据成绩数组score中保存的10个学⽣的成绩,统计相应学⽣的名次并填⼊名次数组rank中(假设10 名学⽣的成绩为80,60,49,86,100,79,85,86,99,59)。
时间: 2023-08-22 20:04:21 浏览: 89
以下是汇编程序的代码实现:
```
data segment
score_db db 80,60,49,86,100,79,85,86,99,59
rank_db db 10 dup(0)
data ends
code segment
start:
mov ax, data
mov ds, ax
mov es, ax
mov cx, 10 ; 学生数量
mov si, 0 ; 初始化学生索引为0
loop1:
mov di, 0 ; 初始化比较索引为0
mov al, [score_db + si] ; 获取当前学生的成绩
mov bl, 1 ; 初始化名次为1
loop2:
cmp di, 10 ; 比较完毕,退出比较循环
jge endloop2
cmp al, [score_db + di] ; 比较当前学生成绩与其他学生成绩
jle next ; 如果其他学生成绩更高,则跳过
inc bl ; 如果当前学生成绩更高,则增加名次
next:
inc di ; 增加比较索引
jmp loop2 ; 继续比较
endloop2:
mov [rank_db + si], bl ; 将名次保存到名次数组中
inc si ; 增加学生索引
loop loop1 ; 继续下一个学生的统计
; 显示结果
mov ah, 09h
lea dx, [msg]
int 21h
mov ah, 02h
mov dl, 0dh
int 21h
mov dl, 0ah
int 21h
mov si, 0
loop3:
mov dl, [rank_db + si]
add dl, 30h
mov ah, 02h
int 21h
inc si
cmp si, 10
jl loop3
mov ah, 4ch
int 21h
msg db '学生名次统计结果:$'
code ends
end start
```
程序的大致思路是:使用两个嵌套的循环,对每个学生的成绩逐一与其他学生的成绩进行比较,统计名次并保存到名次数组中。最后,通过中断21h的输出函数将结果显示出来。
需要注意的是,这段程序是基于8086的汇编语言编写的,如果在其他CPU上运行可能会出现错误。
阅读全文