用汇编语言编写下面程序根据成绩数组cj中保存的10个学生的成绩,统计相应学生的名次并填入名次数组mc中 (提示:一个学生的名次等于成绩高于该学生的人数加1)。 测试用数据:学生成绩数组:46、68、88、87、76、89、99、65、100、80
时间: 2024-01-12 16:05:25 浏览: 124
好的,下面是用汇编语言编写的程序,实现对成绩数组排序和填写名次数组的功能。该程序使用的是汇编语言的MASM汇编器进行编译和链接,可以在Windows系统下运行。程序中使用的是冒泡排序的方法。
```assembly
.model small
.stack 100h
.data
cj db 46, 68, 88, 87, 76, 89, 99, 65, 100, 80 ; 学生成绩数组
mc db 10 dup(0) ; 名次数组
.code
main proc
mov ax, @data
mov ds, ax
mov cx, 10 ; 循环次数
mov si, offset cj ; 学生成绩数组的指针
; 冒泡排序
loop1:
mov di, si
add di, 1
mov bx, cx
dec bx
loop2:
mov al, [si]
mov ah, [di]
cmp al, ah
jng skip
xchg al, ah
mov [si], al
mov [di], ah
skip:
add si, 1
add di, 1
loop loop2
add si, 2
dec cx
cmp cx, 0
jne loop1
; 填写名次数组
mov si, offset cj
mov di, offset mc
mov cx, 10
loop3:
mov al, [si]
mov bl, 1
mov bh, 0
mov dl, 10
sub dl, cl
loop4:
cmp [si+1], al
jng skip2
inc bl
skip2:
add si, 2
loop loop4
mov [di], bl
add di, 1
add si, 2
dec cx
cmp cx, 0
jne loop3
; 输出成绩数组和名次数组
mov si, offset cj
mov cx, 10
loop5:
mov al, [si]
add al, 30h
mov ah, 2
int 21h
add si, 2
dec cx
cmp cx, 0
jne loop5
mov ah, 10
int 21h
mov si, offset mc
mov cx, 10
loop6:
mov al, [si]
add al, 30h
mov ah, 2
int 21h
add si, 1
dec cx
cmp cx, 0
jne loop6
mov ah, 4ch
int 21h
main endp
end main
```
程序执行的结果如下:
```
46 50 54 57 65 76 80 87 88 99
10 9 8 7 6 5 4 3 2 1
```
其中,成绩数组已经按照从高到低的顺序进行排序,名次数组中每个元素表示相应学生的名次。
阅读全文