1、汇编语言程序设计期末大作业教学内容汇编语言程序设计期末大作业。汇编语言程序设计期末大作业:编写一完整的汇编语言源程序,实现从键盘输入一个班(不少于10人)的学生记录(学号:8位数字、姓名:不多余10个英文字符,语文:0-100的整数、数学:0-100的整数、英语:0-100的整数)后,(1) 将输入的记录保存在C盘根目录下名为stuscore.dat的文件中;(2) 按照各科成绩总分先高后低的顺序输出全部学生记录和排名顺序;(3) 输出总分高于班平均总分的全部学生记录。要求: 元月4日前提交一份纸质报告(班长统一收齐)。 大作业格式:1. 标题: 汇编语言程序设计期末大作业 2. 作业题目:
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-$ messMen
3、u1 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:$
4、 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
5、 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 segmen
6、tassume cs:code,ds:data,ss:stackstart: 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,10InputStu: call GetStudent lea dx,m
7、essNext 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
8、 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 l
9、ea 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 retGetStudent endp ;=;子程序名:TureShow;功能辅助子程序ShowStu,用于输出字符
10、串;=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 retTureShow endp;=;子程序名:ShowStu;功能:显示学生信息记录;= ShowStu proc near pus
11、h cx push ax push dx push si push di ;保护现场 call Endline lea di,SumScore lea bx,StudAddress mov cx,10Loop1: mov si,word ptrbx 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
12、用于排序对齐 lea dx,mess3 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
13、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 retShowStu 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
14、 int 21h pop cx pop dx pop ax retEndline 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: pu
15、sh 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中低位的值与
16、高位的值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 retGetEnglishScore endp;=;子程
17、序名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指向学生字符分数缓冲区
18、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 LoopS
19、core1 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 retGetChineseScore endp;=;子程序名GetMathScore:;功能:将得到的指定个学生的数学分数以十进制保存到MathScore缓冲
20、区中;=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:
21、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中 ad
22、d 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 retGetMathScore endp;=;子程序名:Writetofile;功能:用于创建文件并且存储学生信息;=Buildfile : push ax push cx push dx mov ah, 3ch mov cx, 00 lea dx, FName int 21h jc Cre
23、ateFileError mov FileHandle, ax jmp CreateFileOkCreateFileError: mov ah, 09h mov dx, offset CreateFileError int 21hCreateFileOk: pop dx pop cx pop ax ret WriteToFile: push ax push bx push cx push dx push di push si lea di, si.SName mov dx, di add dx, 2 mov cl, di+1 mov ch, 0 mov bx,FileHandle mov ah
24、, 40h int 21h jc WriteFileError call WriteSpace lea di, si.SNumber mov dx, di add dx, 2 mov cl, di+1 mov ch, 0 mov bx, FileHandle mov ah, 40h int 21h jc WriteFileError call WriteSpace lea di, si.ChineseScore mov dx, di add dx, 2 mov cl, di+1 mov ch, 0 mov bx, FileHandle mov ah, 40h int 21h jc WriteF
25、ileError call WriteSpace lea di, si.MathScore mov dx, di add dx, 2 mov cl, di+1 mov ch, 0 mov bx, FileHandle mov ah, 40h int 21h jc WriteFileError call WriteSpace lea di, si.EnglishScore mov dx, di add dx, 2 mov cl, di+1 mov ch, 0 mov bx, FileHandle mov ah, 40h int 21h jc WriteFileError call WriteSpace lea di, si.SumScore mov dx, di add dx, 2 mov cl, di+1 mov ch, 0 mov bx, FileHandle mov ah, 40h int 21h jc WriteFileError call WriteEndLine
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1