mov ah,09h int 21h
lea dx,[si].English call TureShow
call MessTb ;输出1个Tab 用于排序对齐 lea dx,mess4 mov ah,09h int 21h
lea dx,[si].Chinese call TureShow
call MessTb ;输出1个Tab 用于排序对齐 lea dx,mess5 mov ah,09h int 21h
lea dx,[si].Math call TureShow
call MessTb ;输出1个Tab 用于排序对齐 lea dx,messSumScore mov ah,09h int 21h mov ax,[di] call Output call Endline add bx,2 add di,2 loop Loop1
lea dx,messNext mov ah,09h int 21h pop di pop si pop dx pop ax pop cx ret
ShowStu endp
;============================================================= ;子程序名:Endline ;功能:回车换行
;============================================================= Endline proc near
push ax ;保护相关寄存器 push dx push cx
mov ah,2 ;回车 mov dl,0ah int 21h
mov ah,2 ;换行 mov dl,0dh int 21h pop cx pop dx pop ax ret
Endline endp
;============================================================= ;子程序名GetEnglishScores:
;功能:将得到的指定个学生的分数以十进制保存到EnglishScore缓冲区中 ;============================================================= GetEnglishScore proc near
push di ;保护相关寄存器 push si push dx push cx push bx push ax push bp lea si,Stu ;使si指向第一个学生的偏移地
lea bp,EnglishScore ;使bp指向以十进制存学生分数的地址 mov cx,10 ;共有指定个学生 LoopScores0:
push cx ;保护外循环的CX值
lea bx,[si].English ;使bx指向学生字符分数缓冲区 xor di,di xor cx,cx
mov cl,[bx+1] ;学生字符分数缓冲区的字符数即使循环次数 LoopScore0:
mov al,[bx+2] ;从第三个偏移地址开始 sub al,30h ;得到一个十进制值 xor ah,ah xchg ax,di ;使其暂存到di,且将高位di的值乘10 push si ;保护寄存器的原值 push dx mov si,10
mul si ;将si乘10,乘积低位保存在ax pop dx pop si
xchg ax,di ;将原来di中低位的值与高位的值ax交换回来
add di,ax ;至此又录入一位十进制数 inc bx
loop LoopScore0 mov ax,di
mov ds:[bp],al ;将得到的十进制分数存入保存十进制分数缓冲区EnglishScore中
add si,50 ;使di指向下一个学生的偏移地址
inc bp ;使bp指向下一个保存十进制分数缓冲区的下一个单元,以保存下一个学生的分数
pop cx ;弹出外循环的CX值 loop LoopScores0 pop bp pop ax pop bx pop cx pop dx pop si pop di ret
GetEnglishScore endp
;============================================================= ;子程序名GetChineseScore:
;功能:将得到的指定个学生的分数以十进制保存到ChineseScore缓冲区中 ;============================================================= GetChineseScore proc near
push di ;保护相关寄存器 push si push dx push cx push bx push ax push bp lea si,Stu ;使di指向第一个学生的偏移地
lea bp,ChineseScore ;使bp指向以十进制存学生分数的地址 mov cx,10 ;共有指定个学生 LoopScores1:
push cx ;保护外循环的CX值
lea bx,[si].Chinese ;使bx指向学生字符分数缓冲区
xor di,di xor cx,cx
mov cl,[bx+1] ;学生字符分数缓冲区的字符数即使循环次数 LoopScore1:
mov al,[bx+2] ;从第三个偏移地址开始
sub al,30h ;得到一个十进制值 xor ah,ah xchg ax,di ;使其暂存到si,且将高位si的值乘10 push si ;保护寄存器的原值 push dx mov si,10
mul si ;将si乘10,乘积低位保存在ax pop dx pop si
xchg ax,di ;将原来si中低位的值与高位的值ax交换回来 add di,ax ;至此又录入一位十进制数 inc bx
loop LoopScore1 mov ax,di
mov ds:[bp],al ;将得到的十进制分数存入保存十进制分数缓冲区ChineseScore中
add si,50 ;使di指向下一个学生的偏移地址
inc bp ;使bp指向下一个保存十进制分数缓冲区的下一个单元,以保存下一个学生的分数
pop cx ;弹出外循环的CX值 loop LoopScores1 pop bp pop ax pop bx pop cx pop dx pop si pop di ret
GetChineseScore endp
;============================================================= ;子程序名GetMathScore:
;功能:将得到的指定个学生的数学分数以十进制保存到MathScore缓冲区中 ;============================================================= GetMathScore proc near
push di ;保护相关寄存器 push si push dx push cx push bx push ax push bp lea si,Stu ;使di指向第一个学生的偏移地
lea bp,MathScore ;使bp指向以十进制存学生分数的地址
mov cx,10 ;共有指定个学生 LoopScores2:
push cx ;保护外循环的CX值
lea bx,[si].Math ;使bx指向学生字符分数缓冲区
xor di,di xor cx,cx
mov cl,[bx+1] ;学生字符分数缓冲区的字符数即使循环次数 LoopScore2:
mov al,[bx+2] ;从第三个偏移地址开始 sub al,30h ;得到一个十进制值 xor ah,ah xchg ax,di ;使其暂存到si,且将高位si的值乘10 push si ;保护寄存器的原值 push dx mov si,10
mul si ;将si乘10,乘积低位保存在ax pop dx pop si
xchg ax,di ;将原来si中低位的值与高位的值ax交换回来 add di,ax ;至此又录入一位十进制数 inc bx
loop LoopScore2 mov ax,di
mov ds:[bp],al ;将得到的十进制分数存入保存十进制分数缓冲区MathScore中
add si,50 ;使di指向下一个学生的偏移地址
inc bp ;使bp指向下一个保存十进制分数缓冲区的下一个单元,以保存下一个学生的分数
pop cx ;弹出外循环的CX值 loop LoopScores2 pop bp pop ax pop bx pop cx pop dx pop si pop di ret
GetMathScore endp
;============================================================== ;子程序名:Writetofile
;功能:用于创建文件并且存储学生信息