汇编:根据成绩数组cj中保存的10个学生的成绩,统计相应学生的名次并填入名次数组mc中 (提示:一个学生的名次等于成绩高于该学生的人数加1)。 测试用数据:学生成绩数组:46、68、88、87、76、89、99、65、100、80
时间: 2024-02-05 20:03:50 浏览: 90
汇编语言实现学生成绩统计分析.
4星 · 用户满意度95%
以下是一种汇编语言实现方式,假设成绩数组cj存储在内存地址1000H开始处,名次数组mc存储在内存地址2000H开始处:
```
MOV CX, 10 ; CX寄存器存储学生人数
MOV SI, 1000H ; SI寄存器存储成绩数组cj的起始地址
MOV DI, 2000H ; DI寄存器存储名次数组mc的起始地址
MOV BX, 1 ; BX寄存器存储当前排名
MOV AX, [SI] ; AX寄存器存储当前学生的成绩
MOV [DI], BX ; 将当前排名存入名次数组mc
INC DI ; 名次数组mc的指针增加1
FOR_LOOP:
MOV DX, 0 ; DX寄存器存储高于当前学生成绩的人数
MOV CX, 10 ; CX寄存器存储学生人数
MOV SI, 1000H ; SI寄存器存储成绩数组cj的起始地址
MOV AX, [SI] ; AX寄存器存储当前学生的成绩
COMP_LOOP:
CMP AX, [SI] ; 比较当前学生的成绩是否小于下一个学生
JGE NOT_HIGHER ; 如果不小于,则跳转到NOT_HIGHER标签
INC DX ; 否则高于当前学生成绩的人数加1
NOT_HIGHER:
ADD SI, 2 ; 每个成绩占用2个字节,所以指针需要增加2
LOOP COMP_LOOP ; 循环比较完所有学生的成绩
MOV BX, [DI-1] ; BX寄存器存储上一个学生的排名
ADD BX, DX ; 加上高于当前学生成绩的人数
INC BX ; 再加1作为当前学生的名次
MOV [DI], BX ; 将当前学生的名次存入名次数组mc
INC DI ; 名次数组mc的指针增加1
ADD SI, 2 ; 每个成绩占用2个字节,所以指针需要增加2
LOOP FOR_LOOP ; 循环统计完所有学生的名次
```
经过以上汇编代码的运行,名次数组mc中存储的数据应为:1、5、2、3、4、1、7、9、1、6。
阅读全文