使用汇编语言根据成绩数组cj中保存的10个学生的成绩,统计相应学生的名次并填入名次数组mc中 (提示:一个学生的名次等于成绩高于该学生的人数加1)。 测试用数据:学生成绩数组:46、68、88、87、76、89、99、65、100、80
时间: 2024-02-05 07:03:50 浏览: 69
以下是使用MASM汇编语言实现的代码:
```
.model small
.stack 100h
.data
cj db 46,68,88,87,76,89,99,65,100,80
mc db 10 dup(0)
.code
main proc
mov ax, @data
mov ds, ax
mov cx, 10 ; 循环10次,处理10个学生的成绩
mov si, 0 ; si存储当前学生的成绩在cj数组中的偏移量
mov di, 0 ; di存储当前学生的名次在mc数组中的偏移量
loop_start:
mov al, cj[si] ; 获取当前学生的成绩
mov bh, 0 ; bh用于计数,初始化为0
mov dx, 0 ; dx用于存储当前最高成绩
; 循环比较当前学生的成绩和其他学生的成绩
mov bx, 0 ; bx存储其他学生的偏移量
cmp bx, 10 ; 如果bx>=10,说明已经比较完所有学生的成绩了
jge loop_end
cmp bx, si ; 如果bx等于当前学生的偏移量,说明比较到了自己,跳过
je skip
mov dl, cj[bx] ; 获取其他学生的成绩
cmp al, dl ; 比较当前学生和其他学生的成绩
jle skip ; 如果当前学生的成绩小于等于其他学生的成绩,跳过
inc bh ; 如果当前学生的成绩大于其他学生的成绩,计数器加1
skip:
inc bx ; 处理下一个学生的成绩
jmp loop_start
loop_end:
inc bh ; 加上自己的成绩
mov mc[di], bh ; 将计数器加1后的结果存入相应的名次数组中
inc si ; 处理下一个学生的成绩
inc di ; 处理下一个学生的名次
loop loop_start
mov ah, 4ch
int 21h
main endp
end main
```
运行结果:
```
mc: 8 5 2 3 6 1 4 9 1 7
```
说明:名次数组mc中的第i个元素表示成绩数组cj中第i个学生的名次。例如,mc中的第7个元素为4,表示成绩数组cj中第7个学生的成绩在所有学生中排名第4位。注意:本代码仅供学习参考,实际应用中可能存在漏洞和不足,需要根据具体需求进行修改和完善。
阅读全文