实验1心得体会
将源程序打入记事本中,存为asm文件,用masm汇编以后报5个错。通过行数检查发现一些格式错误和指令错误,这些错误都不难发现。错误都在正确程序中标注出。改正过之后程序正常运行,但最终结果错误,说明还有逻辑错误。在了解了程序流程图,掌握了解决问题的逻辑顺序后开始读程序,并用debug里面的T命令一步一步看程序执行的结果,发现lp2循环中dl在第一次循环中输出正确后之后均是错误输出。注意到之前有lea di,c语句将DI地址恢复,于是发现DEC DI错误,应该是递增而不是递减。这样修改之后程序仍未得到正确的结果。发现结果对应ASCII码输出,于是将DL加30H,最终输出正确结果。
实验2.1心得体会
在练习1中,通过汇编发现MUL不能用立即数。练习1中的计算编程比较简单,只是要求输出在屏幕上的话,就需要将十六进制的结果转化为十进制然后一位一位输出出来。本程序使用将十六进制结果除以十得到的商和余数转化为ASCII码后输出。三位数使用了两次除法,将两次除法的商和最后的余数输出,得到正确结果。练习3中我将基础的五个一位数加法,和的上线为9的程序改进到能够正确输出两位数和。一开始和的上线为9是因为虽然程序能够计算出正确结果,但输出时转变为ASCII码,只能正确输出十进制一位,超过一位的会输出其他字符。经过改进的程序能够输出一位数或两位数的和。这是因为程序中首先使用了CMP判断是否和是小于10的数,是则跳到程序最后进行输出,不是则运用除十输出商和余数的方法在屏幕上输出正确的结果。
汇编语言比高级语言实现相同功能编写的代码要长得多。
根据程序员的习惯,实现同一个目标能用不同的语句,比如取地址可以用LEA也可以用OFFSET。刚开始编程时主要是模仿,渐渐的就有了自己喜好语句和逻辑。
实验2.2心得体会
编程时首先实现了冒泡和输出结果,输出结果参考了实验2.1练习一中的输出方式,并稍加修改使得5个数之间有空格隔开。冒泡法在学习C语言时了解过,所以逻辑清晰,编程时知道在何时循环。但逻辑正确不能保证程序能够正确运行,在运行程序时发现并不能正确输出,而是卡住了(可能是进入了死循环),通过debug的单步循环T和P的运用发现内循环没有问题,而外循环到最后无法跳出,对于这个问题我也不清楚是为什么,但是只用CX进行内外两个循环的计数让人头晕,于是我又加入一个DX进行计数,并且在DX等于0时跳转到输出程序段,解决了外循环结束后卡住的问题。
汇编语言中没有IF条件语句,于是我想办法用跳转完成了条件语句的功能。
有时候会觉得寄存器AX,BX,CX,DX不够用,这时候就应该用数据段存储数据了。
编程很花时间,但是最终编出了正确的程序让人激动。同时我也深刻体会到,光学习了理论和实际能够编出程序还有很大的距离。
实验3心得体会
这次的实验与之前不同,先要了解8253定时器和8255芯片的功能和编程控制才能实现最终目标。上机指导书中已经将部分程序的示例和数据段给了我们,极大的给与我们编程的方便。
经过这三个实验我深切体会到理论学习和实际编出程序之间有很大的距离,只用从一开始对已有程序的学习模仿,再到自己编程,不断的发现错误纠正错误,形成自己的编程习惯,才能真正熟悉掌握编程。
不得不说,汇编语言的编程花了我很长的时间,远超过C语言的上机实验。可以说汇编语言是更亲近电脑的语言,实现同样的功能需要更长的程序,所以比C语言难学。但在理论学习和上机实践的过程中,我逐渐掌握了汇编语言。
以前看到电影中,黑客对着黑色的屏幕敲击键盘觉得很高大上,现在我也进入了汇编语言的世界,黑色的屏幕对我不在神秘。不过,我只是新手中的新手,还有很多东西要学。
微机原理上机实验报告
XXX 学号XXX