汇编语言程序设计期末大作业:
编写一完整的汇编语言源程序,实现从键盘输入一个班(不少于10人)的学生记录(学号:8位数字、姓名:不多余10个英文字符,语文:0-100的整数、数学:0-100的整数、英语:0-100的整数)后,
(1) 将输入的记录保存在C盘根目录下名为stuscore.dat的文件中; (2) 按照各科成绩总分先高后低的顺序输出全部学生记录和排名顺序; (3) 输出总分高于班平均总分的全部学生记录。 要求: 元月4日前提交一份纸质报告(班长统一收齐)。
大作业格式:
1. 标题: 汇编语言程序设计期末大作业 2. 作业题目: (上述) 3. 算法分析(流程图) 4. 实现代码(必须含注释)
5. 实验结果(汇编、连接、运行的截图) 6. 总结
代码实现
student struct ;定义结构 Snumber db 11,0,11 dup(?) Sname db 11,0,11 dup(?) English db 4,0, 4 dup(?) Chinese db 4,0, 4 dup(?) Math db 4,0, 4 dup(?) Sum db 4,0, 4 dup(?) student ends ;数据段
data segment
messMenu db '----------------The Homework of Assembler-----------------$' messMenu1 db '----------Name:TU LIN No:8000110028--------------$' messNext db '--------------------------------------------------------------------------------$'
messName db 'Please input the student name(<11):$' messNum db 'Please input the student number(<11):$' messEnglish db 'Please input the English score:$' messChinese db 'Please input the Chinese score:$' messMath db 'Please input the Math score:$' mess1 db 'name:$' mess2 db 'number:$'
mess3 db 'English:$' mess4 db 'Chinese:$' mess5 db 'Math:$' messSumScore db 'SumScore:$'
MessTab db 09,'$' ;Tab 用于排列对齐
StudAddress dw 10 dup(?) ;存各学生的偏移地址 EnglishScore db 10 dup(?) ;存学生英语成绩的十进制数
ChineseScore db 10 dup(?) ;生语文成绩的十进制数
MathScore db 10 dup(?) ;生数学成绩的十进制数
Average dw ? Buf db 6 dup(?) SumScore dw 10 dup(?) ;记录每个学生总分
NumbersOfStudent db 0 Stu student 10 dup(<>)
SumRank db 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
FName db 'C:\\StuScore.dat', 0;文件 FileHandle dw ?;文件句柄 EndOfFile dw 0ffh
OtherLine db 0ah, 0dh, '$' FileSpace db \
data ends ;堆栈段
stack segment
db 100h dup(?) stack ends ;代码段
code segment
assume cs:code,ds:data,ss:stack start: mov ax,data
mov ds,ax ;将数据段首地址传给ds mov ax,stack
mov ss,ax ;将堆栈段首地址传给ss mov sp,0 call Endline lea dx,messMenu mov ah,09h int 21h
存学存学用于 call Endline
lea dx,messMenu1 mov ah,09h int 21h call Endline
lea si,Stu ;取student的首地址给si mov cx,10 InputStu:
call GetStudent lea dx,messNext mov ah,09h int 21h add si,50
loop InputStu ;输出循环结束 lea si,Stu
call GetEnglishScore call GetChineseScore
call GetMathScore
call Stop ;程序运行停止一下,按回车键继续执行 call Writetofile call stop
call SumAverage call GetSum call GetAddress call SortStudent call Stop ;程序运行暂停一下,按回车键,继续执行
call ShowStu mov ah,4ch int 21h
;============================================================ ;子程序名:GetStudent ;功能:录入学生信息
;============================================================ GetStudent proc near push si push dx push ax
push cx ;子程序保护现场 lea dx,messName mov ah,9 int 21h
lea dx,[si].Sname mov ah,0Ah
int 21h
call Endline lea dx,messNum mov ah,9 int 21h
lea dx,[si].Snumber mov ah,0Ah int 21h
call Endline
lea dx,messEnglish mov ah,9 int 21h
lea dx,[si].English mov ah,0Ah int 21h
call Endline
lea dx,messChinese mov ah,9 int 21h
lea dx,[si].Chinese mov ah,0Ah int 21h
call Endline lea dx,messMath mov ah,9 int 21h
lea dx,[si].Math mov ah,0Ah int 21h
call Endline pop cx pop ax pop dx pop si ret
GetStudent endp
;============================================================ ;子程序名:TureShow
;功能辅助子程序ShowStu,用于输出字符串
;============================================================ TureShow proc near
push dx ;保护相关寄存器 push cx push bx
push ax
mov bx,dx ;将bx指向缓存区的地址 xor cx,cx
mov cl,[bx+1] ;cl存放了缓存区录入的字符数 LoopTS:
mov dl,[bx+2] ;从第三个偏移地址开始显示 mov ah,2 ;调用单个字符输出中断 int 21h inc bx
loop LoopTS pop ax pop bx pop cx pop dx ret
TureShow endp
;============================================================ ;子程序名:ShowStu
;功能:显示学生信息记录
;============================================================ ShowStu proc near push cx push ax push dx push si
push di ;保护现场 call Endline lea di,SumScore lea bx,StudAddress mov cx,10
Loop1: mov si,word ptr[bx] lea dx,mess1 mov ah,09h int 21h
lea dx,[si].Sname call TureShow
call MessTb ;输出1个Tab 用于排序对齐 lea dx,mess2 mov ah,09h int 21h
lea dx,[si].Snumber call TureShow
call MessTb ;输出1个Tab 用于排序对齐 lea dx,mess3