汇编实验报告Word格式文档下载.docx
《汇编实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《汇编实验报告Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
![汇编实验报告Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2023-1/31/626e2aa9-5981-43b2-935c-75c805ecbe75/626e2aa9-5981-43b2-935c-75c805ecbe751.gif)
(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
callAvgproc;
此行设置断点,观察屏幕输出信息
leadx,EnMsg;
此行设置断点,观察avg所对应的存储单元的值
leadx,Msg3
callbta;
movah,4ch;
此行设置断点,观察ascavg所对应的存储单元的值及屏
;
幕输出信息
Numprocproc
pushax
pushcx
pushdx
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;
addbl,cl;
设置断点观察bl寄存器的值
jmplop1
lop2:
popdx
popcx
popax
ret
Numprocendp
Avgprocproc
xordx,dx;
设置断点观察堆栈值的变化
movcl,num;
设置断点观察cl寄存器的值
lop3:
callNumproc
xorax,ax
addax,dx
Divnum
addavg,al;
设置断点观察avg存储单元的值
xordx,dx
movdl,ah
subcl,1
jnzlop3
popax;
popcx
ret;
Avgprocendp
btaproc
pushax;
pushbx
moval,avg
movbl,10
divbl
addah,30h;
设置断点观察ax寄存器的值
addal,30h
movascavg,al;
设置断点观察ascavg存储单元的值
movascavg+1,ah
leadx,EnMsg
leadx,ascavg;
设置断点观察dx寄存器的值
movah,09h
popbx
btaendp
codeends
endstart
9、按照程序的执行过程绘制出程序流程图。
开始
输入数据(调用Numproc、Avgproc)
求平均值
调用把bta并输出结果
结束
四、实验结果及其分析
1.实验结果
2.断点
(1)leadx,Msgl;
(2)CallNumproc(输入人数);
输入人数3。
由寄存器和内存可知BX为3,即为输入人数,内存中181B:
0125为num地址,其值为3.
movcl,num;
观察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)->
输入87后avg的值:
观察内存,地址为181B:
0178的avg值为1DH,其十进制数为29,即87/3=29。
3-2输入77:
输入7,已将AL值赋值给CL(CL)=7。
int21h;
AL值。
输入7之后(BL)->
(AL)
addbl,cl
图6:
AL值
输入77后avg值:
0178的avg值为36H,其十进制数为54,即29+77/3=54。
3-3输入92:
输入9,已将AL值赋值给CL(CL)=9。
输入2之后(BL)->
输入92后avg的值:
(4)调用bta前屏幕输出:
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开发软件来创建一个汇编语言程序,并对开发环境中一些环境境变量进行设置,建立工程,编译运行程序,设置环境,利用错误提示修改程序,设置和编辑断点,查看寄存器、存储单元以及变量的值等内容。
本次实验的经验及教训:
一定要注意源程序的保存路径,否则无法运行结果。