8086编程:根据成绩数组cj中保存的10个学生的成绩,统计相应学生的名次并填入名次数组mc中 (提示:一个学生的名次等于成绩高于该学生的人数加1)。 测试用数据:学生成绩数组:46、68、88、87、76、89、99、65、100、80
时间: 2024-06-08 19:06:24 浏览: 11
下面是一份用8086汇编语言实现的程序,可以实现你所需要的功能:
```
.MODEL SMALL
.STACK 100H
.DATA
cj DB 46,68,88,87,76,89,99,65,100,80 ; 学生成绩数组
mc DB 10 DUP (?) ; 名次数组
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
; 初始化名次数组
MOV CX, 10
MOV BL, 1
MOV SI, OFFSET mc
MOV AH, 0
MOV AL, BL
REP STOSB
; 统计学生名次
MOV BX, 0
MOV CX, 10
MOV SI, OFFSET cj
MOV DI, OFFSET mc
FOR_LOOP:
MOV AH, [SI] ; 取出当前学生成绩
MOV BL, 1 ; 初始名次为1
MOV DX, 0 ; 统计高于当前学生成绩的人数
INNER_LOOP:
CMP AH, [SI+BX] ; 比较当前学生成绩和其他学生成绩
JA UPDATE_RANK ; 如果当前学生成绩大于其他学生成绩,则更新名次
INC BX ; 继续比较下一个学生成绩
CMP BX, 10
JB INNER_LOOP
JMP UPDATE_MC
UPDATE_RANK:
INC BL ; 更新名次
INC DX ; 统计高于当前学生成绩的人数
CMP BX, 10
JB INNER_LOOP
UPDATE_MC:
MOV [DI], BL ; 将名次存入名次数组
INC SI
INC DI
LOOP FOR_LOOP
; 输出名次数组
MOV CX, 10
MOV DI, OFFSET mc
MOV AH, 2
MOV DL, ' '
PRINT_LOOP:
MOV AL, [DI]
ADD AL, 48
INT 21H
MOV DL, ','
INT 21H
INC DI
LOOP PRINT_LOOP
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN
```
程序首先初始化名次数组mc为1,然后遍历成绩数组cj,对于每个学生,统计高于他的成绩的人数,更新名次,并将名次存入名次数组mc中。最后,程序输出名次数组mc。
使用测试数据运行程序,输出结果为:1,4,2,3,6,1,1,9,1,5,