北京理工大学微机原理实验报告.docx
- 文档编号:7800994
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:13
- 大小:613.22KB
北京理工大学微机原理实验报告.docx
《北京理工大学微机原理实验报告.docx》由会员分享,可在线阅读,更多相关《北京理工大学微机原理实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
北京理工大学微机原理实验报告
微机原理与接口技术
实验报告
实验容:
汇编语言程序设计实验
组别:
12
:
班级:
学号:
一、实验目的
1、熟悉IDE86集成开发环境的使用。
2、通过编程、上机调试,进一步理解汇编语言的设计思路与执行过程。
3、熟悉DOS命令调用,以到达输入输出、返回DOS系统等目的。
4、掌握利用汇编实现求和与求最值的方法。
5、掌握利用汇编实现数制转换的方法。
6、稳固理论知识,锻炼动手编程,独立思考的能力。
二、实验容〔具体容〕
1、求从TABLE开场的10个无符号字节数的和,并将结果放在SUM字单元中。
并查看前5个,前8个数之和以及各存放器和存的状态。
2、在1的根底上修改程序,求出10个数中的最大值和最小值,最后将最大最小值分别赋给MAX及MIN。
3、求1到100的累加和,并用十进制形式将结果显示在屏幕上。
要现数据显示,并返回DOS状态。
三、实验方法
1、设计思路
〔1〕实验1的设计思路:
先将10个要相加的数存在以TABLE为首的10个连续的存储单元中,然后利用循环构造依次取出数值放在AL中并累加,假设有进位那么加到AH中直至循环10次累加完毕,将累加的结果放在SUM中并返回DOS状态。
〔2〕实验2的设计思路:
先将10个要比拟的数放在以TABLE为首的10个连续的存储单元中。
将第一个数首先赋给AL和AH〔分别存储相对最小和最大值〕在利用LOOP循环构造,依次和下面的数进展比拟,每次把相对的最大值与最小值存储到AH和AL中直至循环9次比拟完毕,将AH和AL里面的最大值与最小值赋给MAX和MIN,返回DOS状态
〔3〕实验3的设计思路:
先在存中定义COUNT=100,表示1-100求和,假设相求1-n的和并显示只需COUNT的值为n即可,同时定义一块以DNUM为首地址的数据区用于存储累加和的十进制数对应的ASCII码。
先利用AX和LOOP求出1-COUNT的累加和存在AX中;在进展数值转化,AX依次除10取余数保存,将16进制数转化为10进制ASCII码值并存在DUNM中。
最后在屏幕上显示并返回DOS状态。
2程序流程图
实验一、二和三的流程图分别如图1、图2和图3所示
图31-100求和并在屏幕显示流程图
四、实验源程序〔必要的文字注释〕
实验一:
;求10个无符号字节数的和,结果存在SUM中
DATASEGMENT;定义数据段
TABLEDB12H,23H,34H,45H,56H;10个加数
DB67H,78H,89H,9AH,0FDH
SUMDW?
DATAENDS
;
CODESEGMENT;定义代码段
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX;初始化DS
LEASI,TABLE;SI指向TABLE
MOVCX,10;循环次数为10
XORAX,AX;AX清零
NEXT:
ADDAL,[SI];把一个数加到AX中去
ADCAH,0;假设有进位AH加1
INCSI;SI指向下一个数
LOOPNEXT;循环相加
MOVSUM,AX;循环完毕将结果保存到SUM中
MOVAH,4CH;返回DOS状态
INT21H
CODEENDS;代码段完毕
ENDSTART;汇编完毕,起始地址为START
实验二:
;求出10个数中的最大值和最小值。
DATASEGMENT
TABLE1DB12H,23H,34H,45H,56H;十个数据
DB67H,78H,89H,9AH,0FDH
MINDB?
;最小值
MAXDB?
;最大值
DATAENDS
;
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX;数据段段地址送入DS
MOVES,AX;附加数据段段地址送入ES
LEASI,TABLE1
MOVCX,9;比拟次数,一共9次
MOVAL,[SI];把第一个数送入AL,把最小数存在AL中
MOVAH,[SI];把第一个数送入AH,把最大数存在AH中
NEXT:
INCSI
CMPAL,[SI];比拟AL中的数和下一个数的大小
JCGOON;如果AL中的数小转到GOON,继续执行
MOVAL,[SI];如果AL中的数大,将小的数存入AL
GOON:
CMPAH,[SI];比拟AH中的数和下一个数的大小
JNCCONTU;如果AH中的数大转到CONTU,去下一次循环
MOVAH,[SI];如果AH中的数大,将大的数存入AH
CONTU:
LOOPNEXT;继续循环直至全部比拟完毕
MOVMAX,AH;将最大的数存入MAX中
MOVMIN,AL;将最小的数存入MIN中
MOVAH,4CH;返回DOS状态
INT21H
CODEENDS;代码段完毕
ENDSTART;汇编完毕,起始地址为START
实验三:
;1-100求和并用十进制在品目上显示,程序完毕返回DOS状态
DATASEGMENT;数据段
SUMDW0;1-100的和
DNUMDB'0000',0DH,0AH,'$';存储1-100和的十进制ASCII码字符串
COUNTDW100;求和的数目100个,当需要求1-n的数字和时只
;需修改100为所需要的n即可
DATAENDS
;
SSEGSEGMENT;堆栈段
DW32DUP(?
)
SSEGENDS
;
CODESEGMENT;代码段
ASSUMECS:
CODE,DS:
DATA,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX;数据段的段地址送入DS
MOVAX,SSEG
MOVSS,AX;堆栈段的段地址送入SS
CALLSUMM;求1-100的数据和,结果存入AX中
MOVSUM,AX;和存入SUM中
CALLDISP;将十六进制数转化相应的十进制ASCII码值,
;存在DNUM中
LEADX,DNUM;使用DOS功能调用,在屏幕上显示
MOVAH,9
INT21H
MOVAH,4CH;返回DOS状态
INT21H
SUMMPROC;求和子程序
XORAX,AX;AX清零
MOVCX,COUNT;求和的数目,这里COUNT=100
CALCU:
ADDAX,CX
LOOPCALCU
RET;求和完毕返回,求和值存在AX中
SUMMENDP
;
DISPPROC;转化为十进制ACSII码值子程序
MOVCX,4;要显示的数为四位十进制数
MOVBX,10
GOON:
LEASI,DNUM;显示的ASCII码字符串的偏移地址给SI
XORDX,DX;DX清零,DX、AX存放1-100的和,AX为低位
DIVBX;每次除10,余数为显示数值,
ADDSI,CX;SI指向存入数据的下一位
ADD[SI-1],DL;要显示的十进制数转为相应的ASCII码
LOOPGOON;循环4次将要显示的十进制数由低到高转化
RET
DISPENDP
;
CODEENDS
ENDSTART
五、实验结果
1、实验一:
10个无符号字节数加和
(1)、TABLE中前5个数的和为0104H,结果如图4所示,存储在AX中。
图4TABLE中前5个数字和
(2)、TABLE中前8个数的和为026CH,结果如图5所示,存储在AX中。
图5TABLE中前8个数字和
(3)、程序运行完结果结果如图6所示,十个值的和为0403H,存储在AX中。
图6TABLE中前10个数字和
2、实验二:
10个数求最大最小值
为了保证程序的正确性,在这里我用三组输入测试,分别为:
12H,23H,34H,45H,56H,67H,78H,89H,9AH,0FDH(最大右边,最小左边)
12H,9H,34H,45H,56H,67H,0FFH,89H,9AH,0FDH(最大最小在中间)
0FFH,9H,34H,45H,56H,67H,0FEH,89H,9AH,2H(最大左边,最小右边)
实验结果分别如图7,图8,图9所示。
图7第一组输入运行结果
图8第二组输入运行结果
图9第三组输入运行结果
3、实验三:
1-100求和并显示
实验三的结果分别如图10,图11,图12所示,其中图10为1-100的累加和保存在AX中,结果为13BAH,图11为转化为相应的十进制ASCII码保存在
DS:
0002-DS:
0005,图12为窗口显示。
图101-100的累加和
图111-100和的相应ASCII码
图121-100和的屏幕显示
六、实验中遇到的问题及解决方法
1、在做实验一时由于对软件不是很熟悉,做起来不是很顺手,而且在编译时软件自身有一个控制参数/zi,当时在做实验时,由于不小心在后面多打上了一个字母,造成无法编译的情况,经过教师的指点才发现去除后能够正常编译了。
2、在做实验二时,刚开场我是用冒泡排序法先排序,这样第一个和最后一个就是最大最小值,但这样由于排序的过程中需要不断交换数字使得效率很低,后来改成了使用AL和AH存放最大最小值,不去排序大大减少了排序的次数。
3、在做实验二时,开场循环次数我设成了10,导致出来的结果总也不对,程序错误。
后来我使用单步调试和查看存放器值相结合的方法发现多比拟了一次,将CX的初值改成9结果正确。
4、在做实验三时,由于有了前两个实验的根底,在累加局部没有问题,结果为13BAH,但在16进制转化为10进制时,单步调试每到除10的地方总出现“divideby0〞的错误提示。
经一步一步仔细检查发现原来我设BL=10,这样做除法时用AX除BL结果保存在AL中,而1-100相加为5050,第一次除10后变成了505,超出了AL的围造成错误。
使用DX,AX两个存放器保存被除数,设BX为10,这样商保存在AX里,不会超出围,结果正确。
七、心得体会与建议
通过这次上机实验,我了解与熟悉了IDE86集成开发环境,以及调试和使用的方法。
与此同时,我对于汇编语言中的编写习惯、语法要求等有了更深的认识。
此外通过此次实验让我看到,知识温故性的重要,对于排序和比拟大二时就学过了,当时也做了相应的练习但是从这次实验来看,还是没有做到尽善尽美,有很多的漏洞需要补。
实验三让我看到在编程的过程中不仅要注意语法语句问题,还要注意为数据分配的大小是否够用。
对于语法问题可以通过编译检查出来,而这种错误编译时检查不出来的,很难发现,只能一步一步的慢慢来看,很浪费时间,所以在编写程序的过程中一定要尽量注意一些。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北京理工大学 微机 原理 实验 报告