汇编语言根据成绩数组cj中保存的10个学生的成绩,统计相应学生的名次并填入名次数组mc中 (提示:一个学生的名次等于成绩高于该学生的人数加1)。 测试用数据:学生成绩数组:46、68、88、87、76、89、99、65、100
时间: 2024-06-08 21:06:24 浏览: 161
显示学生名次
以下是汇编语言实现的代码:
```
TITLE 计算学生成绩名次
.MODEL SMALL
.STACK 100H
.DATA
cj DB 46, 68, 88, 87, 76, 89, 99, 65, 100
mc DB 10 DUP(?)
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
MOV CX, 10 ; 循环10次,处理10个学生的成绩
MOV BX, 0 ; BX 存储当前学生的名次
MOV SI, 0 ; SI 存储当前学生的成绩
LOOP_START:
MOV AL, cj[SI] ; 获取当前学生的成绩
MOV BH, 0 ; BH 存储当前学生的名次
MOV DI, 0 ; DI 存储比当前学生成绩高的人数
; 遍历数组,计算比当前学生成绩高的人数
MOV DX, CX
DEC DX
MOV CX, DX
JZ LAST_LOOP ; 如果已经是最后一个学生,则跳到最后的处理
INC SI ; 指针指向下一个学生
MOV BL, cj[SI] ; 获取下一个学生的成绩
COMPARE_LOOP:
CMP BL, AL ; 比较成绩
JBE NOT_HIGH ; 如果下一个学生成绩不高于当前学生,则跳过
INC DI ; 比当前学生成绩高的人数加1
MOV BL, cj[SI] ; 获取下一个学生的成绩,继续比较
INC SI ; 下一个学生
LOOP COMPARE_LOOP
NOT_HIGH:
; 当前学生名次 = 比其成绩高的人数 + 1
MOV BH, DI
INC BH
MOV mc[BX], BH ; 将名次存入名次数组
INC BX
; 处理下一个学生
MOV CX, DX ; 恢复 CX 的值
JMP LOOP_START
LAST_LOOP:
; 处理最后一个学生
MOV BH, DI
INC BH
MOV mc[BX], BH ; 将名次存入名次数组
; 输出结果
MOV CX, 10
MOV BX, 0
MOV AH, 2
PRINT_LOOP:
MOV DL, mc[BX]
ADD DL, 30H ; 将数字转换为 ASCII 码
INT 21H ; 输出数字
INC BX
LOOP PRINT_LOOP
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN
```
以上代码将结果输出到屏幕上。如果需要将结果保存到文件中,可以使用文件操作函数。
阅读全文