使用dos汇编语言编写:根据成绩数组cj中保存的10个学生的成绩,统计相应学生的名次并填入名次数组mc中 (提示:一个学生的名次等于成绩高于该学生的人数加1)。 测试用数据:学生成绩数组:46、68、88、87、76、89、99、65、100、80
时间: 2024-01-12 19:05:35 浏览: 79
以下是使用dos汇编语言编写的程序,可以根据输入的成绩数组cj中保存的10个学生的成绩,统计相应学生的名次并填入名次数组mc中:
```
.model small
.stack 100h
.data
cj dw 46,68,88,87,76,89,99,65,100,80
mc dw 0,0,0,0,0,0,0,0,0,0
count dw 0
.code
main proc
mov ax, @data
mov ds, ax
; 统计每个学生的名次
mov cx, 10
lea si, cj
lea di, mc
mov bx, 0
loop1:
mov ax, [si]
mov dx, 0
mov si, offset cj
mov cx, 10
loop2:
cmp ax, [si]
jg next
inc dx
next:
add si, 2
loop loop2
mov ax, dx
inc ax
mov [di], ax
add di, 2
add bx, 2
dec cx
cmp cx, 0
jne loop1
; 输出结果
mov ah, 9
lea dx, count
int 21h
mov ah, 4ch
int 21h
main endp
end main
```
程序中的 `cj` 数组保存了学生成绩,共有10个元素,每个元素占用2个字节,因此 `cj` 数组占用20个字节的存储空间。程序中的 `mc` 数组保存了学生的名次,也有10个元素,每个元素同样占用2个字节,因此 `mc` 数组同样占用20个字节的存储空间。
程序中使用了两个循环来完成对每个学生名次的统计。外层循环遍历 `cj` 数组中的每个学生成绩,内层循环计算比当前学生成绩高的人数。最后将计算出的名次存入 `mc` 数组中对应的位置。
最后,程序使用 INT 21h 中断调用来输出结果。`count` 变量是一个字符串,用于存储输出结果的格式,例如 `"1:%d 2:%d 3:%d 4:%d 5:%d 6:%d 7:%d 8:%d 9:%d 10:%d"`。程序通过将 `count` 的地址传递给 INT 21h 中断来输出结果。
阅读全文