汇编语言:学生成绩名次表
题目
将分数在1~100之间的10个成绩存入首地址为3000H的单元中,3000H+I表示学号为I的学生成绩。编写程序,将排出的名次表放在3100H开始的数据区,3100H+I中存放的为学号为I的学生名次。
设计思想
- 每次遍历成绩,找出成绩当前值,并记录其学号I,将其名次记录在3100H+I处,并将其置为0。
- 循环10次。
程序代码及运行
运行环境
Windows10
DOSBox0.74-3,Cpu speed:3000cycles
代码
data segment
org 3000h
num db 66h,34h,55h,77h,88h,99h,33h,44h,55h,10h
data ends
code segment
assume cs:code ds:data
start:
mov ax,data
mov ds,ax
mov si,3000H
mov cx,000ah
mov di,3100h
a1:
call greatest;计算当前最大值
mov al,0ah
sub al,cl;计算当前最大值的名次
inc al
mov bx,dx;当前I值
mov [bx+di],al
loop a1
mov ax,4c00h
int 21h
greatest proc;寻找当前最大值的子函数
push cx
push ax
mov cx,000ah
mov al,00h
mov bx,3000h
mov si,bx
a2:
cmp al,[si]
jae a3;大于等于则转移
mov al,[si];al<[si]则交换,找出最大值
mov dx,si
sub dx,bx;记录当前最大值的I值
a3:
inc si
loop a2
add bx,dx;当前最大值的地址
mov al,00h
mov [bx],al;将当前最大值置为0
pop ax
pop cx;cx出栈
ret
greatest endp
code ends
end start
运行过程