汇编期末实验报告.docx
- 文档编号:10739939
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:24
- 大小:143.86KB
汇编期末实验报告.docx
《汇编期末实验报告.docx》由会员分享,可在线阅读,更多相关《汇编期末实验报告.docx(24页珍藏版)》请在冰豆网上搜索。
汇编期末实验报告
南昌大学实验报告
学生姓名:
学号:
专业班级:
实验类型:
□验证□综合□设计□创新实验日期:
2011/12/21实验成绩:
1.汇编概述
汇编语言是一种功能很强的程序设计语言,是利用计算机所有硬件特性并能直接控制硬件的语言。
汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。
人直接使用机器语言编写程序很不方便,也不容易阅读和修改。
和机器语言相比,使用汇编语言来编写程序的突出优点是可以用助记符来表示指令的操作码和操作数,可以用标号和符号来代替地址、常量和变量。
汇编语言比起机器语言来,更便于识别和记忆;编写程序、修改和阅读程序更容易。
和高级语言相比,汇编语言为程序员提供了直接控制目标代码的手段,而且可以对输入/输出端口进行控制,实时性能好;此外,用汇编语言编写的程序效率高,节省内存,运行速度快。
2.实验报告要求
1.编写汇编语言源程序实现:
从键盘输入一组学生记录,包括:
学号:
10个十进制数字字符,如**********;姓名:
最多8个英文字母,如;liming;成绩:
一字节二进制数,大小在十进制数0-100之间。
然后将记录按成绩从高到低的顺序排列后显示并保存到C盘根目录下的score.txt文本文件中。
如输出排序记录:
7100410130liming95
7100410120wangwu907100410145zhangsan88
2.有友好的输入输出提示;有正确的输入判断;采用了子程序;
3.算法流程图
Y
N
N
Y
Y
4.程序源代码
;===================================================
;汇编实验
;班级:
;学号:
时间:
2011年12月21日。
;================================================
studentSTRUCT;定义一个student结构体数据类型,包含NUM,NAME,SCORE三个字段
NUM1DB'';十二子节
NAME1DB'';八个字节
SCOREDB'';三个字节
studentENDS
STACKSEGMENTSTACK
DW100DUP(?
)
TOPLABELWORD
STACKENDS
STACK1SEGMENTSTACK
DW100DUP(?
)
STACK1ENDS
DATASEGMENT
FNAMEDB'c:
\score.txt',0;文件路径,最后要加0
DATA1DB5000DUP(0)
DATA2DB10,13,'任意Y/N?
',10,13,'$'
DATA3DB20DUP('');建立缓冲区
DATA4DW0,12,20;student各变量中的相对偏移量
FPOINTERDW0;文件指针
STU1student15DUP({});最多可存放30个学生的数据
COUNTDW0;存放实际学生人数,初始值为0
STUTEMPstudent{};存放学生数据的临时变量
IDB0;记录数变量
JDB0;记录数变量
FLAGDB0;两记录的分数比较的返回值
STRING1DB10,13,'Pleaseinputstudentnumber:
',10,13,'$';提示输入学号
STRING2DB10,13,'Pleaseinputthestudentname:
',10,13,'$';提示输入学生姓名
STRING3DB10,13,'Pleaseinputthescore0~100:
',10,13,'$';提示输入学生分数
STRING4DB10,13,'Howmanypeopledoyouwanttoinput?
',10,13,'$';提示想输入多少人
STRING5DB10,13,'inputanycharwillprintstudentdata,pleasechoose:
',10,13,'$';提示选择
STRING6DB10,13,'===============sortafter=========',10,13,'$';输出格式
STRING7DB10,13,'===Number====Name===Score========',10,13,'$';输出格式
SRC1DB10;为作乘法预备乘数10
SRC2DB23;为作乘法预备乘数23
ENDLMESSDB13,10;换行
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA;指向数据区
MOVDS,AX
MOVES,AX
MOVAX,STACK;指向堆栈区
MOVSS,AX
MOVSP,200
;建立文件
MOVDX,OFFSETFNAME
MOVCX,0;属性设为一般
MOVAH,3CH
INT21H
MOVFPOINTER,AX;保存文件指针
MOVDI,OFFSETSTU1;建立记录指针
MOVSI,OFFSETDATA3;建立指向缓冲区的指针
ADDSI,2
MOVDX,OFFSETSTRING4;提示输入多少人
MOVAH,09H
INT21H
CALLINPUTN;十进制串转换成二进制
MOVCOUNT,DX;十进制串转换成二进制后将实际人数存入COUNT
CALLprograme2;调用programe2子程序,输入信息到STU1
CALLSORT;调用SORT子程序,将STU1里的内容按分数排序
CALLSHOW_SEND;调用SHOW_SEND子程序,显示到文件中
CALLoutput;调用子程序output,显示到屏幕上
MOVBX,FPOINTER;关闭文件
MOVAH,3EH
INT21H
MOVAH,4CH;总程序结束
INT21H
;==========================================================
;子程序名:
programe1
;功能:
将缓冲区DATA3中的数据转输到STU1中
;入口参数:
SI,DI,BX出口参数:
无
;============================================================
programe1PROCNEAR
PUSHDI;保护现场
PUSHSI
PUSHCX
MOVDX,OFFSETDATA3;输入数据,存入DATA3中
MOVAH,0AH
INT21H
ADDDI,DATA4[BX];改变记录指针
MOVCL,[SI-1];实际输入的字符数存入CX中
XORCH,CH
CLD;正向传送
REPMOVSB
POPCX;恢复现场
POPSI
POPDI
RET
programe1ENDP
;============================================================
;子功能名:
INPUTN
;功能:
从键盘输入一个十进制字符串,并将它转换成二进制
;出口参数:
DX存放二进制数
;============================================================
INPUTNPROCNEAR
PUSHAX;现场保护
PUSHBX
PUSHCX
MOVDX,OFFSETDATA3
MOVAH,0AH
INT21H
MOVBX,1
MOVCL,DATA3[BX];取该字符串的字符个数,当做循环次数
XORCH,CH
MOVBX,2;从第三个字符为输入数据
MOVDX,0;输入数据,二进制数据,初始值为0
LOOP1:
MOVAL,DATA3[BX];取一个字符
SUBAL,30H
XORAH,AH
PUSHAX;目前数存入栈中
;取下一个字符前将原数乘10再加目前数。
目前数存在AX中
MOVAL,DL;存放数据的二进制数值原数
MULSRC1;原数乘10
MOVDX,AX;结果在AX中,保存在DX
POPAX
ADDDX,AX;原数乘10再加目前数存在DX中,做输出参数
INCBX;取下一个字符
LOOPLOOP1
POPCX;现场恢复
POPBX
POPAX
RET
INPUTNENDP
;===========================================================
;子程序名:
programe2
;功能:
将输入的学生信息输入到STU1中
;入口参数:
COUNT,实际学生人数
;出口参数:
无
;============================================================
programe2PROCNEAR
PUSHAX;保护现场
PUSHBX
PUSHCX
PUSHDX
PUSHDI
MOVCX,COUNT
LOP1:
MOVBX,0
MOVDX,OFFSETSTRING1;提示输入学号
MOVAH,09H
INT21H
CALLprograme1;输入到STU1
MOVBX,2
MOVDX,OFFSETSTRING2;提示输入姓名
MOVAH,09H
INT21H
CALLprograme1;输入到STU1
MOVBX,4
MOVDX,OFFSETSTRING3;提示输入分数
MOVAH,09H
INT21H
CALLprograme1;输入到STU1
;输入数据,存入DATA3中
ADDDI,23;指向下一个记录
LOOPLOP1
POPDI;恢复现场
POPDX
POPCX
POPBX
POPAX
RET
programe2ENDP;programe2子程序定义结束
;================================================
;子程序名:
SORT
;功能:
将学生记录排序
;入口参数:
DI,STU1的偏移地址;COUNT,学生实际人数
;出口参数:
无
;================================================
SORTPROCNEAR
PUSHAX;保护现场
PUSHCX
MOVCX,COUNT;外循环次数
MOVBX,CX
MOVI,1
SORTLOP1:
MOVAL,I
INCAL
MOVJ,AL;J的值赋为I+1
SORTLOP2:
CMPBL,J;内循环到J中的数为CX的值结束
JBSORT_EXIT
CALLCMPIJ;比较记录I,J的大小
CMPFLAG,1
JZSORT_NEXT;如果I不大于J,则继续
CALLEXCHANGEIJ;I小于J,则交换
SORT_NEXT:
INCJ
JMPSORTLOP2
SORT_EXIT:
INCI
LOOPSORTLOP1
POPCX;恢复现场
POPAX
RET
SORTENDP;SORT子程序定义结束
;===============================================
;子程序名:
SHOW_SEND
;功能:
将STU1内的数据显示出来,并送到c:
\score.txt文件中
;入口参数:
文件指针BP,实际学生人数COUNT
;出口参数:
无
;===============================================
SHOW_SENDPROCNEAR
PUSHAX;现场保护
PUSHBX
PUSHCX
PUSHDX
PUSHDI
MOVDI,OFFSETSTU1
MOVCX,COUNT
SHOWLOP:
MOVBX,FPOINTER;将一个记录输入进文件
MOVDX,DI
PUSHCX
MOVCX,23
MOVAH,40H
INT21H
MOVBX,FPOINTER;将回车换行输入进文件
MOVDX,OFFSETENDLMESS
MOVCX,2
MOVAH,40H
INT21H
POPCX
ADDDI,23
LOOPSHOWLOP
POPDI;现场恢复
POPDX
POPCX
POPBX
POPAX
RET
SHOW_SENDENDP;SHOW_SEND子程序定义结束
;===============================================
;子程序名:
ATOI
;功能:
将一个十进制成绩字符串转换成二进制
;入口参数:
I,记录数
;出口参数;DX,存放二进制数
;===============================================
ATOIPROCNEAR
PUSHAX;现场保护
PUSHBX
PUSHCX
PUSHSI
MOVSI,OFFSETSTU1
MOVAL,I;计算记录I的偏移地址,并存入SI
DECAL
MULSRC2
ADDAX,20;将其指到分数变量
ADDSI,AX
MOVCX,2
MOVBX,0;取第一个字符
MOVDX,0;输入数据,二进制数据,初始值为0
LOOP2:
MOVAL,[SI+BX];取一个字符
SUBAL,30H
XORAH,AH
PUSHAX;目前数存入栈中
;取下一个字符前将原数乘10再加目前数。
目前数存在AX中
MOVAL,DL;存放数据的二进制数值原数
MULSRC1;原数乘10
MOVDX,AX;结果在AX中,保存在DX
POPAX
ADDDX,AX;原数乘10再加目前数存在DX中,做输出参数
INCBX;取下一个字符
LOOPLOOP2
POPSI;现场恢复
POPCX
POPBX
POPAX
RET
aTOIENDP;子程序aTOI定义结束
;===============================================
;子程序名:
CMPIJ
;功能:
比较记录I与记录J的分数
;入口参数:
I,J
;出口参数FLaG,记录数I的分数大于记录数J的分数为1,否则为0
;===============================================
CMPIJPROCNEaR
PUSHaX;保护现场
PUSHBX
PUSHCX
PUSHDX
MOVFLaG,0;初始化为0
CaLLaTOI
MOVaX,DX;将记录I的分数保存AX
MOVBL,J
MOVBH,I
MOVI,BL
CALLATOI;将记录J的分数保存在DX
MOVI,BH
CMPAX,DX;比较I和J分数
JACMPIJ_NEXT
JMPCMPIJ_EXIT
CMPIJ_NEXT:
MOVFLAG,1;如果I大于J,FLAG=1
CMPIJ_EXIT:
POPDX;恢复现场
POPCX
POPBX
POPAX
RET
CMPIJENDP
;==================================================
;子程序名:
EXCHANGEIJ
;功能:
交换学生记录I,J的数据
;入口参数:
记录数变量I,J
;出口参数:
无
;=================================================
EXCHANGEIJPROCNEAR
PUSHAX;现场保护
PUSHBX
PUSHCX
PUSHDX
PUSHSI
PUSHDI
MOVSI,OFFSETSTU1;SI存放学生数据变量的偏移地址
MOVBX,SI;SI保存起来,下面要用
MOVDI,OFFSETSTUTEMP;DI存放学生数据临时变量的偏移地址
MOVDX,DI;DI保存起来,下面要用
MOVAL,I;计算记录I的偏移地址存入SI中
DECAL
MULSRC2
ADDSI,AX
PUSHSI;将SI的内容存起
MOVCX,23;将记录I的数据转移到临时变量中
CLD
REPMOVSB
POPDI;将记录SI保存的值传给DI,做目的地址
MOVAL,J;计算记录J的偏移地址,并存入SI中
DECAL
MULSRC2
MOVSI,BX
ADDSI,AX
PUSHSI;将SI保存起来,做下一次的目的地址
MOVCX,23;将记录J的数据传给记录I
CLD
REPMOVSB
POPDI;DI存放记录J的偏移地址
MOVSI,DX;SI存放临时变量的偏移地址
MOVCX,23;将临时变量的数据传送给记录I
CLD
REPMOVSB
POPDI;恢复现场
POPSI
POPDX
POPCX
POPBX
POPAX
RET
EXCHANGEIJENDP
;===============================================
;子程序名output
;功能实现c:
\score.txt数据在屏幕上的的显示
;===============================================
outputPROCNEAR
MOVAX,DATA
MOVDS,AX
MOVES,AX;计算块程序
MOVDI,0;读文件指针
MOVSI,0;转读块程序
loop4:
MOVDX,OFFSETSTRING5;输出字符,提示选择
MOVAH,09H;显示提示
INT21H
MOVAH,01H;从键盘中输入一个字符,以实现选择输出学生数据
INT21H
MOVAH,2;换行
MOVDL,0AH
INT21H
MOVAH,2
MOVDL,0DH
INT21H
MOVDX,OFFSETSTRING6;输出格式
MOVAH,09H;显示提示
INT21H
MOVDX,OFFSETSTRING7;输出格式
MOVAH,09H;显示提示
INT21H
CALLINPUTM;调用子程序INPUTM
INCDI;块数加1
CMPDI,50;每次读1200字节
JGENDPROC;计算块数不超过50
MOVDX,OFFSETDATA2;为显示清楚一块,让程序暂停
MOVAH,09H;显示提示
INT21H
MOVAH,1;等待从键盘输入一个任意字符
JCXZLOOP4;标志CX为0LOOP1
ENDPROC:
MOVAH,4CH;程序结束
INT21H
RET
outputENDP
;===========================================
;了程序名:
INPUTM
;功能:
从文件c:
\score.txt中由【SI】起始读取长度为1200字节的数据到DATA1,并显示
;输出参数:
CX存放读成功与否的标志,为1表示失败。
;========================================
INPUTMPROCNEAR
MOVDX,OFFSETFNAME;指向文件c:
\score.txtMOVAH,0;存取方式只读
MOVAH,3DH;利用文件扩充管理方式打开文件c:
\score.txt
INT21H
MOVBX,AX
PUSHBX;保护数据
MOVCX,0H
MOVDX,SI;CX:
DX存放位移量,此处移动位移位置为SI中的值
MOVAL,0;移动方式
MOVAH,42H;调用42号功能
INT21H
MOVDX,OFFSETDATA1;指向缓存区
MOVCX,1200;读出12002上字符
MOVAH,3FH
INT21H
JCNULL1;CF=1读失败,转NULL1
CMPAX,0;AX=0,读出字符为0,转NULL1
JENULL1
MOVBX,AX;实际读出的字数在AX中,指定读出文件的尾部
MOVAL,'$'
MOVDATA1[BX],AL
POPBX;恢复数据
M
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 期末 实验 报告