计算机原理实验三实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三子程序及宏的使用
一、实验目的
1. 练习使用子程序及宏。
2. 练习使用功能调用(INT 21H)中关于程序终止、字符输入及字符输出部分。
二、实验内容
1. 从键盘输入10个一位或两位的十进制数,用压缩BCD码形式存入数据段1000H起的单元中。输入完成后重新将十个数字输出在屏幕上,每个数在屏幕上显示成一行,共10行。
2. 编程从上面十个数中找出最大值,显示在屏幕上。要求合理编写算法,在各种输入情况下都能找出最大值。
3. 将十个数按从大到小的顺序排列在数据区中。
三、源代码
四、思考题
(1)若处理的是十六进制无符号数,程序应如何修改?
判断字符类型是否数字0~F时,判断字符是否在30H~39H或者40H~46H之间。
(2)若处理的是带符号数,程序又应作何修改?
除了上述判断字符类型是否合法外,在比较大小时,要使用带符号数的条件转移指令。
五、实验总结
1. 编写和使用了子程序及宏。它们之间的区别有:
1)在源程序中,通过书写宏名来引用宏,而子程序是通过CALL指令来调用;
2)汇编程序对宏通过宏扩展来加入其定义体,宏引用多少次,就相应扩展多少次,所以,引用宏不会缩短目标程序;而子程序代码在目标程序中只出现一次,调用子程序
是执行同一程序段,因此,目标程序也得到相应的简化;
3)宏引用时,参数是通过“实参”替换“形参”的方式来实现传递的,参数形式灵活多样,而子程序调用时,参数是通过寄存器、堆栈或约定存储单元进行传递的;
4)宏引用语句扩展后,目标程序中就不再有宏引用语句,运行时,不会有额外的时间开销,而子程序的调用在目标程序中仍存在,子程序的调用和返回均需要时间。
2. 练习使用功能调用(INT 21H)中关于程序终止、字符输入及字符输出部分。
3. 通过修改简化了程序的代码,通过调试完善了程序的功能。
4. 使用汇编语言编写较复杂程序时,应该先整理思路,画好流程图,然后通过此框架开始编写底层的一些宏和子程序,编好之后,再编写主程序,通过调用子程序实现具体的功能。
5. 调试时,通过断点和单步可观察数据区的内容改变和标志位的改变,以此判断BUG 所在位置。
6. 子程序和宏中可能会覆盖某个寄存器中的内容,在没有把握的情况下应该先PUSH,结束时再POP出来,以免寄存器中的内容在不经意之间被改变,造成错误,有时候也造成调试的困难。
7. 使用转移指令时应该清楚程序指令到此处时针对不同的情况分别跳转到哪里,以及接下来执行什么内容,执行的内容是否符合预期。最好为较大的子程序或者宏编写统一的出口,这样结构比较清晰。