汇编实验报告.docx
- 文档编号:8724472
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:16
- 大小:119.36KB
汇编实验报告.docx
《汇编实验报告.docx》由会员分享,可在线阅读,更多相关《汇编实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
汇编实验报告
《汇编语言程序设计》
实验报告
院系信息科学与技术学院
专业软件工程
年级2011
学号20112754
姓名尚孟昕
西南交通大学信息科学与技术学院
年月日
实验一Masm6.11的使用方法
一、实验目的
1、创建一个新的汇编语言程序,熟练掌握汇编语言开发工具的使用方法,并对开发环境中一些坏境变量进行设置。
2、创建一个工程文件,对该工程文件进行编译,连接,并运行;
3、对建立的工程文件进行调试,在运行过程中查看各个寄存器的值,内存单元的值等。
二、实验环境
该试验包括的硬件和软件条件如下:
1、硬件环境
(1)IntelCoreDuoCPUP8700
(2)内存4G
2、软件环境
(1)WindowXPProfessor
(2)MASM6.11开发软件
三、实验步骤
1、将Masm6.11安装程序拷贝到D盘根目录下,并执行d:
\Masm611目录下Setup.exe文件,按照安装提示将程序安装到C盘根目录。
2、将C:
\masm611\Bin目录下的所有文件拷贝到C:
\Masm611\binr目录下,将C:
\Masm611\help目录下的所有文件拷贝到c:
\Masm61\binr目录下。
3、执行C:
\Masm611\Binr目录下的pwb.exe文件,打开开发环境。
4、在PWB编辑窗口中输入实验1.1中的程序,并保存为test.asm文件。
5、执行Project菜单下NewProject子菜单创建一个新的工程文件,并命名为test.mak,将test.asm文件加入到该工程文件中。
6、执行Project下Build子菜单编译连接该工程文件,并运行该可执行程序,观察程序执行的结果。
7、执行Run菜单下Debug子菜单,进入调试环境。
8、在程序的如下位置设置断点,并按要求观察寄存器堆栈或者内存单元的值。
Datasegment
Msgldb"pleaseinputthenumberofstudent:
$"
Numdb0
EnMsgdb0ah,0dh,'$'
Msg2db"pleaseinputthegradeofeachstudent:
$"
Msg3db"theaveragegradeofthesestudentis:
$"
avgdb0
ascavgdb0,0,'$'
Dataends
Stacksegmentparastack
db20hdup(0)
Stackends
codesegment
AssumeCs:
code,Ss:
stack,ds:
Data
Start:
movax,data
movds,ax
leadx,Msgl;此行设置断点,观察DS所指示的数据段的情况
movah,09h
int21h
CallNumproc;此行设置断点,观察屏幕输出,并观察堆栈的变化
movnum,bl;此行设置断点,观察bl的值,并观察堆栈的变化
leadx,EnMsg
movah,09h
int21h
leadx,Msg2
movah,09h
int21h
callAvgproc;此行设置断点,观察屏幕输出信息
leadx,EnMsg;此行设置断点,观察avg所对应的存储单元的值
movah,09h
int21h
leadx,Msg3
movah,09h
int21h
callbta;此行设置断点,观察屏幕输出信息
movah,4ch;此行设置断点,观察ascavg所对应的存储单元的值及屏
;幕输出信息
int21h
Numprocproc
pushax
pushcx
pushdx
leadx,EnMsg
movah,09h
int21h
movbl,0
lop1:
movah,01h
int21h;设置断点观察al寄存器的值
cmpal,0dh
jzlop2
cmpal,'0'
jllop1
cmpal,'9'
jalop1
subal,30h
movcl,al
moval,bl
movch,10
mulch
movbl,al;设置断点观察al寄存器的值
addbl,cl;设置断点观察bl寄存器的值
jmplop1
lop2:
popdx
popcx
popax
ret
Numprocendp
Avgprocproc
pushax
pushcx
xordx,dx;设置断点观察堆栈值的变化
movcl,num;设置断点观察cl寄存器的值
lop3:
callNumproc
xorax,ax
moval,bl
addax,dx
Divnum
addavg,al;设置断点观察avg存储单元的值
xordx,dx
movdl,ah
subcl,1
jnzlop3
popax;设置断点观察avg存储单元的值
popcx
ret;设置断点观察堆栈值的变化
Avgprocendp
btaproc
pushax;设置断点观察堆栈值的变化
pushbx
xorax,ax
moval,avg
movbl,10
divbl
addah,30h;设置断点观察ax寄存器的值
addal,30h
movascavg,al;设置断点观察ascavg存储单元的值
movascavg+1,ah
leadx,EnMsg
movah,09h
int21h
leadx,ascavg;设置断点观察dx寄存器的值
movah,09h
int21h
popbx
popax
ret
btaendp
codeends
endstart
9、按照程序的执行过程绘制出程序流程图。
开始
输入数据(调用Numproc、Avgproc)
求平均值
调用把bta并输出结果
结束
四、实验结果及其分析
1.实验结果
2.断点
(1)leadx,Msgl;此行设置断点,观察DS所指示的数据段的情况
(2)CallNumproc(输入人数);此行设置断点,观察屏幕输出,并观察堆栈的变化
输入人数3。
由寄存器和内存可知BX为3,即为输入人数,内存中181B:
0125为num地址,其值为3.
movcl,num;设置断点观察cl寄存器的值
观察CX发现CL的值为3。
(3)CallNumproc(输入成绩);此行设置断点,观察屏幕输出,并观察堆栈的变化
此时屏幕提示输入学生成绩。
输入成绩:
3-1输入87:
图1:
将输入数字8存入BL中。
图2:
(AL)->(BL)
图3:
(CL)+(BL)->(BL)addbl,cl
图4:
输入7,(BL)->(AL),(AL)*10->(BL)。
图5:
(BL)+(CL)->(BL)
输入87后avg的值:
观察内存,地址为181B:
0178的avg值为1DH,其十进制数为29,即87/3=29。
3-2输入77:
图1:
输入7,已将AL值赋值给CL(CL)=7。
图2:
(AL)->(BL)
图3:
int21h;AL值。
图4:
输入7之后(BL)->(AL)
图5:
addbl,cl
图6:
int21h;AL值
输入77后avg值:
观察内存,地址为181B:
0178的avg值为36H,其十进制数为54,即29+77/3=54。
3-3输入92:
图1:
输入9,已将AL值赋值给CL(CL)=9。
图2:
(AL)->(BL)
图3:
int21h;AL值。
图4:
输入2之后(BL)->(AL)
图5:
addbl,cl
图6:
int21h;AL值
输入92后avg的值:
(4)调用bta前屏幕输出:
观察内存,地址为181B:
0178的avg值为55H,其十进制数为85,即54+94/3=85。
(5)
调用bta压栈操作清零AX。
(6)观察avg与AX的值:
地址为181B:
0178的avg值为55其十进制数为85;(AL)为38H,(AH)为35H。
分别为字符‘8’,字符‘5’。
(7)
分别将AL,AH的值放入ascavg中,观察知首地址为181B:
0179的ascavg第一字节为(AL),第二字节为(AH),即ascavg[0]为‘8’,ascavg[1]为‘5’。
五、结论
通过本次实验我学习并掌握了如何使用MASM6.11开发软件来创建一个汇编语言程序,并对开发环境中一些环境境变量进行设置,建立工程,编译运行程序,设置环境,利用错误提示修改程序,设置和编辑断点,查看寄存器、存储单元以及变量的值等内容。
本次实验的经验及教训:
一定要注意源程序的保存路径,否则无法运行结果。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)