一、实验要求和目的
熟练掌握动态调试程序Debug的使用和基本汇编指令的使用
二、实验环境 三、涉及知识
MPU的一般寄存器、特殊寄存器、基本汇编指令
四、实验内容、步骤及提示
1、开始运行——CMD——调用CMD窗口——输入Debug命令进入Debug模式。
2、输入?查看帮助文件,复习Debug有哪些子命令。
3、用MOV命令和R命令两种方式分别给AX,BX,CX,DX寄存器赋值。
4、编写四个小程序,用“T”逐步和“G”一次性分别实现两个数的加、减、乘、除,观察每一步寄存器的变化,特别是特殊寄存器的变化。
5、用“U”命令反编译第3步中的程序,观察机器码。
6、将“1”、“2”、“3”、“4”分别赋值给AX、BX、CX、DX,然后压入堆栈再弹出,使得DX=2,CX=1,BX=2,AX=3。
7、用Q退出Debug命令。
五、实验要求
1、完成实验内容,并熟练掌握Debug和基本汇编指令的使用
2、记录实验结果并答复思考题〔截图打印在实验报告上〕
【备注:实验报告请打印,主要内容为程序和运行结果截图即可】
六、思考题〔答复在实验报告上〕
1、直接在开始运行中运行Debug命令和先用CMD命令调用命令窗口,再在命令窗口中运行Debug命令,二者有何区别?
答:前者基于windows操作系统,在输入Q退出时直接退回到windows,后者是基于DOS系统,Q退出时退回到模拟DOS环境。
2、两个数加、减、乘、除运算,请说出在哪些情况下,溢出标志位会置1?
答:假设运算结果超过当前运算位数所能表示的范围,则溢出标志位会置1
实验二 Debug与基本汇编语言的使用〔下〕
一、实验要求和目的
熟练掌握动态调试程序Debug的使用和基本汇编指令的使用
二、实验环境
三、涉及知识
MPU的一般寄存器、特殊寄存器、基本汇编指令
四、实验内容、步骤及提示
1、开始运行——CMD——调用CMD窗口——输入Debug命令进入Debug模式。
2、输入笑脸程序,并运行产生正确的结果〔提示:笑脸程序调用DOS显示中断实现,DL的值为2〕
3、设置文件名smile ,长度为6,将第二步中的笑脸写入C盘根目录。
4、用DOS命令切换到C盘根目录,并运行smile,com,观察结果。
5、在Debug中编写一段小程序,实现输入两个字符,然后反顺回显,即输入AB,显示BA。〔提示:输入、显示均调用DOS中断实现,反序可以用堆栈实现〕
6、在Debug中编写一段小程序,实现输入一个字符,然后换行回显。
五、实验要求
1、完成实验内容,并熟练掌握Debug和基本汇编指令的使用
2、记录实验结果并答复思考题〔截图打印在实验报告上〕
【备注:实验报告请打印,主要内容为程序和运行结果截图即可】
六、思考题〔答复在实验报告上〕
1、写出你所掌握的DOS中断的具体程序,并说明在哪些情况下需要调用?
答:(1)键盘输入并回显:
MOV AH,01H
INT 21
〔2〕键盘输入字串到缓冲区:
MOV AH,0AH
INT 21
七、实验总结
通过这两个实验,复习了在Debug的基本操作,复习了汇编语言的基本指令。学会了在Debug中编写简单程序并运行。但Debug具有局限性:不可以在高于XP系统中运行,且不适合复杂程序的编写。
实验三 MSAM与汇编程序设计〔上〕
一、实验要求和目的
熟练掌握编译工具MASM的使用,重点掌握查错的方法,熟悉汇编程序设计
二、实验环境
三、涉及知识
MASM编译器的使用〔编译、链接、查错〕,汇编程序设计,DOS中断的使用
四、实验内容、步骤及提示
1、编写程序,实现如下功能:将二进制数字“”转为十六进制并显示。
2、编写程序,实现如下功能:输入一段字符,回车显示这段字符;
3、将2、3步中的程序编译成为.OBJ文件,再链接成为.EXE文件并成功运行。
五、实验要求
1、完成实验内容,并熟练掌握MASM工具和一般程序设计技巧
2、记录实验结果并答复思考题〔截图打印在实验报告上〕
【备注:实验报告请打印,主要内容为程序和运行结果截图即可】
六、思考题〔答复在实验报告上〕
1、如果汇编程序在编译成为.OBJ文件的时候出错,如何根据出错信息去修改源程序?
答:如上图,当汇编程序在编译成为OBJ文件的时候出错时,倒数第二行会显示有几个错误,并在其上方显示具体在第几行出错,从而可以提示去修改源程序。
2、对1、2两个程序做上完整的注释,并写在实验报告上面。
3、程序2的例程为何LINK的时候会出现提示错误信息,如何修改源程序就能防止?
答:程序中用到堆栈段,但是在开头却没有对堆栈进行定义,所以会提示出错。
七、实验总结
通过实验学习了将二进制数转为十六进制的方法:四位一转化,变为ASCII码再显示,移四位,重复。并复习了中断显示的内容,跳转指令和循环指令。还复习了堆栈段的定义,复习了堆栈等内容。
实验四 MSAM与汇编程序设计〔下〕
一、实验要求和目的
熟练掌握编译工具MASM的使用,重点掌握查错的方法,熟悉汇编程序设计
二、实验环境
三、涉及知识
MASM编译器的使用〔编译、链接、查错〕,汇编程序设计,DOS中断的使用。子程序的调用、参数传递
四、实验内容、步骤及提示
1、根据老师所给的“从键盘输入十进制转二进制程序显示程序”〔在服务器拷贝或者
下载〕,编写从键盘输入两个十进制数,并显示两数之和的程序,要求程序用子程序或者宏实现。
2、将1中的程序修改,实验显示两数之差的绝对值功能。
3、将1中的程序修改,实验显示两数之乘的功能。
4、将1中的程序修改,实验显示两数之商的功能。
5、〔选作〕用分支和循环结构,设计一个程序,实现输入设定个数的数字,排序后显示输出。〔如果输入20个数字,从小到大输出〕
五、实验要求
1、完成实验内容,并熟练掌握MASM工具和一般程序设计技巧
2、记录实验结果并答复思考题〔截图打印在实验报告上〕
【备注:实验报告请打印,主要内容为程序和运行结果截图即可】
六、思考题〔答复在实验报告上〕
1、CALL调用子程序的时候,需要注意的问题是什么?
答:应保护程序中用到的寄存器的数据,在CALL命令之前应将它们压入堆栈,并在命令之后弹出;还应CALL指令之前还应当将要向子程序传递的参数存到相应的寄存器中;另外还要考虑所调用的子程序是是段间远调用还是段内近调用。
七、实验总结
通过实验,学习了加、减、乘、除程序的编写。加法和乘法较简单。
减法应注意在减数大于被减数时,需要输出绝对值,所以加个AX和BX的比较指令,假设AX小,需在后边对结果进行求补而得到其绝对值。
除法应注意字除和字节除的问题。前边的程序用到DX,所以DX中存有数据,当进行除法时电脑会自动认为是字节除,所以在除之前需对DX清零,电脑才会进行字除。另外,要显示余数话需将余数显示,已知除完后余数存在DX中,只要将DX赋给AX〔B_DP子程序调用的输入〕,再调用显示就可以显示余数。
当被除数为零时提示错误,需要加跳转指令,比较被除数和0的大小,当和0相等时跳转,用数据段的字符串显示错误提示即可。
因篇幅问题不能全部显示,请点此查看更多更全内容