pop dx ret Input endp
;Input Score of student or Number
Numproc proc ;输入数字函数 push ax push cx push dx xor bx,bx lop1: mov ah,01h int 21h xor ah,ah cmp al,0dh jz lop2 cmp al,'0' jl lop1 cmp al,'9' ja lop1 sub ax,30h mov Temp,ax mov ax,bx xor cx,cx mov cx,10 mul cx mov bx,ax add bx,Temp
jmp lop1 ;lop2: lea dx,EnMsg mov ah,09h int 21h pop dx pop cx pop ax ret Numproc endp
FindPos proc ; push ax push cx push dx mov Tally,0
lop: mov bx,Tally cmp bx,Count
jz Load ; mov ax,bx
最终数字存入BX中 更新排名映射数组 查找按排名次序学生所在位置第 24 页
mov cl,0dh mul cl mov bx,ax mov dx,Score
mov ax,TenStudent[bx].S cmp dx,ax jnl Mapping inc Tally jmp lop
Mapping:mov ax,Count ; sub ax,1 mov Flag,ax lop1:
mov ax,Flag cmp ax,Tally jl Load mov ax,Flag mov cl,2 mul cl mov bx,ax
mov cx,List[bx] mov ax,Flag
add ax,1 ;bx_b mov dl,2 mul dl mov bx,ax
mov List[bx],cx dec Flag jmp lop1 Load:
mov ax,Tally ; mov dl,2 mul dl mov bx,ax mov cx,Count
mov List[bx],cx End_F:
pop dx pop cx pop ax ret FindPos endp
Search proc ; push ax
更新映射数组 加载当前输入学生映射 按学生名次查找学生 第 25 页
push cx push dx
lea dx,Msg6 mov ah,09h int 21h
Call Numproc ;input the WZ sub bx,1 mov ax,bx mov cl,2 mul cl mov bx,ax
mov ax,List[bx] mov cl,0dh mul cl mov bx,ax lea dx,Msg4 mov ah,09h int 21h
lea dx,TenStudent[bx].N+2 ; mov ah,09h int 21h xor ax,ax
mov ax,TenStudent[bx].S ; mov cl,10 DIV cl add ah,30h
mov Result+2,ah xor ah,ah mov cl,10 DIV cl add ah,30h
mov Result+1,ah add al,30h mov Result,al lea dx,EnMsg mov ah,09h int 21h lea dx,Msg5 mov ah,09h int 21h
lea dx,Result mov ah,09h int 21h
Call Numproc
输出姓名 输出成绩 第 26 页
pop dx pop cx pop ax ret Search endp code ends
end start
四、实验结果及其分析
本次实验的运行过程中在出现请输入学生人数的提示后我们从键盘输入4,分别四次输入了学生的成绩以及其姓名,随后是输入要查找的名次,便显示学生的姓名及分数,出现的结果如下图3.1:
图3.1运行结果
五、结论
通过本次的实验我大体上学习用结构体编写汇编语言程序,会熟练运用汇编语言程序的基本结构,如结构体的定义与使用、子程序的定义与调用、如何用
第 27 页
跳转语句进行循环操作、如何将输入的数字的ASC11码转换为十进制数,能够比较熟练地写出实验的源程序,并且对程序段有一定的认知和了解,并进一步熟练流程图的画法和实验报告的书写。
第 28 页