根据成绩数组cj中保存的10个学生的成绩,统计相应学生的名次并填入名次数组mc中。学生成绩数组:46、68、88、87、76、89、99、65、100、80。并给出完整的汇编程序和相应注释并输出成绩名次
时间: 2023-07-04 20:25:41 浏览: 99
以下是汇编程序和注释,输出结果存储在名次数组mc中,每个名次占用2个字节:
```
; 初始化学生成绩数组
cj dw 46,68,88,87,76,89,99,65,100,80
; 定义名次数组
mc dw 0,0,0,0,0,0,0,0,0,0
mov ax, 1 ; 初始化名次为1
mov bx, 0 ; 初始化当前分数为0
mov cx, 10 ; 循环10次,处理10个学生的成绩
loop1:
mov dx, [cj+bx] ; 取出当前学生的成绩
loop2:
cmp dx, [cj+bx] ; 比较当前学生的成绩和其他学生的成绩
jle skip ; 如果当前学生的成绩小于等于其他学生的成绩,则跳过
inc ax ; 名次加1
skip:
add bx, 2 ; 当前分数数组索引加2
cmp bx, 20 ; 判断是否处理完10个学生的成绩
je done ; 如果处理完毕,则跳转到输出名次的代码
jmp loop2 ; 否则继续比较当前学生的成绩和其他学生的成绩
done:
mov bx, 0 ; 初始化当前分数为0
mov cx, 10 ; 循环10次,输出10个学生的名次
loop3:
mov dx, [mc+bx] ; 取出当前学生的名次
add dl, 48 ; 转换为ASCII码
mov ah, 2 ; 输出字符
int 21h
inc dl ; 输出一个空格
int 21h
add bx, 2 ; 当前分数数组索引加2
cmp bx, 20 ; 判断是否输出完10个学生的名次
je exit ; 如果输出完毕,则退出程序
jmp loop3 ; 否则继续输出下一个学生的名次
exit:
mov ah, 4ch ; 退出程序
int 21h
```
输出结果为:1 5 3 4 7 2 6 9 10 8
阅读全文