微机实验报告Word格式.docx
《微机实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《微机实验报告Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
二、实验内容
1.求从table开始的10个无符号字节数的和,结果放SUM字单元中。
2.将存储器中的十个字节型十六进制无符号数按从小到大的顺序排列,并按十六
进制显示出来。
3.求1到100的累加和,并用十进制数形式将结果显示在屏幕上。
要求用过程实
现数据显示,并返回DOS状态。
三、实验方法
1、题目一设计思路:
对于内容一,首先将table中的数据存在数据段,然后利用地址取出每一个数,CX做计数器,依次相加,最后存在SUM里。
2、
题目一程序流程图:
否
是
图1题目一程序流程图
3.题目二设计思路:
先把最大数和最小数都假设为table中的第一个数,然后和后面的每个数进行比较,如果这个数大于最大数,交换;
这个数如果小于最小数,交换。
4.题目二流程图:
是
否
图2题目二程序流程图
5.题目三设计思路:
先在AX里求出1加到100的值,保存在AX里,然后转化为十进制(除10法),最后把数保存在数据段的某段地址,利用单个字符输出,在屏幕上表示出和。
6.题目三流程图:
图3题目三程序流程图
四、实验源程序
1.题目一源程序:
datasegment
tabledb12h,23h,34h,45h,56h,67h,78h,89h,9ah,0fdh
sumdw?
dataends;
定义代码段
codesegment
assumecs:
code,ds:
data,es:
data
start:
movax,data
movds,ax
moves,ax;
初始化
leasi,table
movcx,10;
循环计数器
xorax,ax
next:
addal,[si]
adcah,0
incsi
loopnext
movsum,ax;
将结果存在SUM里
hlt;
代码段结束
codeends
endstart
2.题目二源程序:
tabledb12h,23h,34h,45h,56h,67h,78h,89h,9ah,0fdh
mindb0
maxdb0
codesegment
assumecs:
leasi,table;
movbl,table
movbh,table
movcx,9;
again1:
cmpbl,[si+1]
jal1;
比较最小值与当前数的大小
again2:
cmpbh,[si+1]
jbl2;
l1:
movbl,[si+1]
jmpagain2
l2:
movbh,[si+1]
loopagain1
movdi,4
output:
;
显示出最大最小值
movcl,4
rolbx,cl
movdx,bx
anddl,0fh
cmpdl,9
jal3
adddl,30h
jmpoutput2
l3:
adddl,37h;
转化为ASCII码输出
output2:
movah,2
int21h
decdi
jnzoutput
movah,4ch
int21h
codeends;
3.题目三源程序:
data1db4dup(0)
dataends;
定义数据段
leadi,data1
movbl,0
movcx,100
l1:
incbx
adcax,bx
loopl1;
求1到100的和
l2:
movbx,0ah
xordx,dx
divbx
mov[di],dl
incdi
andax,ax
jzl3
movdl,0
jmpl2
movcx,4
decdi;
转化为10进制数
l3:
l4:
movdl,[di];
显示输出
loopl4
五.实验结果
1.题目一:
在IDE86中输入上述代码,并运行,利用单步调试,观察cpu中寄存器中数的变化
进过单步运行,得出AX最后的值为0403H,与实际相符。
2.题目二:
一样的在IDE86中输入上述代码,并运行,利用单步调试,观察cpu中寄存器中数的变化。
刚开始时:
观察到table里的数据存在了ds:
0000-ds:
0008之中,如图:
随后全速运行程序,观察到屏幕上显示出最大值0FDH,最小值12H,如图:
3.题目三:
在求和部分,采用单步运行,跳过循环,直接得出累加的和,观察AX=13BA,也就是十进制的5050,结果正确,如图:
最后全速运行,观察到dos界面显示出了5050,如图:
六.实验中遇到的问题及解决方法:
1.最开始的时候对于IDE86这个软件的使用还不太熟悉,导致在调试的时候,没有修改文件名,运行到另外一个程序了,没有得出正确的结果。
。
2.在做第二个题目的时候,对于mov指令的禁止用法不太熟悉,直接对两个存储器操作数经行了操作,导致出现了语法错误。
3.在第三个题目时,首先没有想到100个数相加的和不能用al表示,用了add指令,导致AX之中出现了错误的值,还有就是除以10的时候,没有搞清楚商和余数分别放在哪两个寄存器中,而且也搞忘了输出前要转化为ASCII码。
七.心得体会与建议:
1.在这次上机实验中,我首先学会了怎么用IDE86来编写一个汇编程序,以及形成一个EXE文件的完整过程,最重要的是调试部分,单步运行,跟踪运行时观察寄存器,标志位等数据的变化,都有利于我们来了解代码的执行过程,更容易掌握。
2.我也深刻的体会到熟练掌握汇编语言指令集,伪指令的重要性,在编写程序的时候,很多语句都不知道的话,很难编出一个好的程序。