计算机专业类课程实验报告课程名称:汇编语言程序设计学院:计算机科学与工程专业:计算机科学与技术学生姓名:郭小明学号:2011060100010日期:2013年12月24日电子科技大学实验报告实验一学生姓名:郭小明学号:2011060100010一、实验室名称:主楼A2-412二、实验项目名称:汇编源程序的上机调试操作基础训练三、实验原理:DEBUG 的基本调试命令;汇编数据传送和算术运算指令MASM宏汇编开发环境使用调试方法四、实验目的:1. 掌握DEBUG 的基本命令及其功能2. 学习数据传送和算术运算指令的用法3.熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程五、实验内容:编写程序计算以下表达式:Z=(5X+2Y-7)/2设X、Y的值放在字节变量VARX、VARY中,结果存放在字节单元VARZ中。
1.编辑源程序,建立一个以后缀为.ASM的文件.2.汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。
无错时继续第3步。
3.连接目标程序,产生可执行程序。
4.用DEBUG程序调试可执行程序,记录数据段的内容。
六、实验器材(设备、元器件):PC机,MASM软件平台。
七、实验数据及结果分析:程序说明:功能:本程序完成Z=(5X+2Y-7)/2这个等式的计算结果求取。
其中X 与Y 是已知量,Z是待求量。
结构:首先定义数据段,两个DB变量VARX与VARY(已经初始化),以及结果存放在VARZ,初始化为?。
然后定义堆栈段,然后书写代码段,代码段使用顺序程序设计本程序,重点使用MOV和IMUL以及XOR,IDIV完成程序设计。
详细内容见程序注释。
程序清单:调试说明:将汇编语言(.asm文件)翻译为目标代码程序(.obj文件)(MASM.exe);没有出现错误或者警告,下一步进行链接,连接目标代码程序和库函数代码生成可执行程序文件(.exe文件),(LINK.exe);我们成功生成了test1.exe. 然后输入Debug命令进入调试环境,-是debug命令提示符。
我们执行-n test1.exe -l 装入我们的test1.exe 然后我们-u反汇编程序,得到程序的反汇编。
1485显然是我们的数据段逻辑地址我们来查看一下1485::0000 到1485:1111 这16个字节的内容,理论上应该是05,04,00.……00 05正是V ARX 04 正是V ARY 00 正是V ARZ正如我们所料下面是单步调试逐条执行汇编指令的操作。
现在我们执行程序(-g),然后再次查看数据段里面的内容V ARZ的内容变成了0D事实上(5*5+4*2-7)/ 2 = 13 就是0D程序框图:开始AX与AX进行异或(置零)CX与CX进行异或(置零)V ARX →AL5 →CLAL = AL * CLAL →DLAX与AX进行异或(置零)九、实验结论:通过本次实验,我们学习了解掌握了DEBUG 的基本命令及其功能,学习了数据传送和算术运算指令的用法,熟悉了在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。
完成了Z = (5*X + 2*Y - 7)/ 2 算术式的编程计算,使用到了以上学习到的知识,并且利用了顺序程序设计的思想。
通过本次实验,大大提升了对汇编程序设计这门课实践意义的理解,提高了编程能力和设计水平。
另外在此感谢指导老师的辛勤工作!电子科技大学实验报告实验二学生姓名:郭小明学号:2011060100010一、实验室名称:主楼A2-412二、实验项目名称:分支程序与循环程序设计三、实验原理:分支程序设计基本规范与调试方法,循环程序设计与调试方法;分配与使用寄存器的相关方法四、实验目的:1、掌握分支程序的结构。
2、掌握分支程序的设计与调试方法。
3、掌握循环程序设计与调试方法4、掌握正确分配与使用寄存器。
六、实验内容:编程实现:分别统计下列20个数中大于5、小于零和大于等于零且小于等于5的数据个数,分别存入字节单元RES1、RES2和RES3中。
BUFF DB -1, 20, 3, 30, -5, 15, 100, -54, 0, 4, 78, 99, -12, 32, 3, 23, -7, 24, 60,-51 六、实验器材(设备、元器件):PC机,MASM软件平台。
七、实验步骤:程序说明:功能:本程序完成对一个数组当中大于5,小于0以及大于等于0小于等于5的数的个数的统计。
分别存入字节单元RES1、RES2和RES3中。
结构:首先定义数据段, BUF数组的初始化,以及数组成员个数的统计以备循环时使用,以及结果存放在RES1,RES2,RES3,初始化为0。
然后定义堆栈段,然后书写代码段,代码段使用分支与循环程序设计本程序,首先通过LEA 指令获取BUF首地址,然后首地址每次加一之后就可以根据循环次数遍历整个数组,遍历的时候首先将获得数据与0进行比较,如果小于0跳转到BELOW0 (JL BELOW0)标号处执行,若不是的话再与5进行比较,如果小于等于5的话跳转到BELOW5(JLE BELOW5 ;如果小于5则跳转),再然后的话数据必然是属于大于5的范围,由此统计三类数据的个数。
详细见程序。
程序清单:调试说明:将汇编语言(.asm文件)翻译为目标代码程序(.obj文件)(MASM.exe);没有出现错误或者警告,下一步进行链接,连接目标代码程序和库函数代码生成可执行程序文件(.exe文件),(LINK.exe);我们成功生成了test1.exe. 然后输入Debug命令进入调试环境,-是debug命令提示符。
我们进入了debug程序调试环境现在我们反汇编该程序显然1485是我们数据段的首地址,我们来看看程序运行之前数据段里面的值,我们的数据段里面应该存放至20个数据值还有就是3个存放结果的值(初始都是0)正如我们所料想的。
下面是单步调试的结果。
下面我们执行程序并查看运行程序之后的数据段里面的数据值。
我们返现后面三个值变化了,确实分别记录了数组当中大于5,小于0以及大于等于0小于等于5的三类数据的个数,与事实相符,验证我们的程序设计是正确的。
得出:大于5的数据共有:10个小于0的数据共有:6个大于等于0小于等于5的数据共有4个九、实验结论:通过本次实验,掌握了分支程序的结构特点,学习了分支程序的设计和调试方法,掌握了循环程序的结构特点并学习了循环程序的设计和调试方法,本程序完成对一个数组当中大于5,小于0以及大于等于0小于等于5的数的个数的统计,运用了循环程序设计的思想,本实验的原理框图较为复杂,但是框图给出了明确的思路和解题方向,是很好的学习方法。
本次程序设计实验运用了数个跳转指令,JL ,JLE ,跳转指令在循环程序设计过程中具有很重要的特点。
另外在此感谢指导教师的辛勤工作!第二次实验共计两个程序,要求二选一,现在两个题目都做出解答(实验三实验四)如下,供老师批阅!电子科技大学实验报告实验三学生姓名:郭小明学号:2011060100010一、实验室名称:主楼A2-412二、实验项目名称:串操作及其应用程序的设计与调试运行三、实验原理:串操作程序设计基本规范与调试方法;MASM宏汇编开发环境使用方法循环程序设计与调试方法;分配与使用寄存器的相关方法五、实验目的:1、熟悉串操作指令的基本格式和使用方法。
2、掌握常用的串操作程序的设计方法。
3、熟悉串操作程序的调试运行过程七、实验内容:编程实现:编制一程序,从键盘输入两个长度不同的字符串,设字符串长度小于25个字符。
要求在屏幕上以右边对齐的方式显示出来。
六、实验器材(设备、元器件):PC机,MASM软件平台。
八、实验步骤:程序说明:功能:本程序完成两个字符串的键盘输入并且右对齐输出字符串。
结构:1、在数据段中设置两个存放显示信息的字符串,一个是提示用户输入,另一个是提示显示信息位置2、在数据段中设置两个存放输入字符串的缓冲区3、输入字符串曹勇0AH号DOS功能调用,字符串存入缓冲区时,第二个字节为实际输入字符串的长度,从第三个字节开始为字符串的ASCII码。
4、为了显示右对齐,由于两个字符串缓冲区的长度相同,只需要将两个字符串向缓冲区后面靠齐,再调用09H号DOS功能调用即可达到显示的右对齐。
程序清单:调试说明:将汇编语言(.asm文件)翻译为目标代码程序(.obj文件)(MASM.exe);没有出现错误或者警告,下一步进行链接,连接目标代码程序和库函数代码生成可执行程序文件(.exe文件),(LINK.exe);我们成功生成了test3.exe. 然后输入Debug命令进入调试环境,-是debug命令提示符。
我们进入了debug程序调试环境现在我们反汇编该程序下面是单步调试的过程下面运行该程序:正如我们所料想的。
我们输入-g 调试命令之后,提示输入字符串,在输入两个字符串之后就右对齐的输出了两个字符串。
程序框图:开始2 → CXLEA BX,STRING1CX>0?YES显示提示输入字符串的信息NOCH 异或置零获取要传送的字符串字节数送入CLMOV CL,-1[BX]MOVE九、实验结论:本实验完成了串操作指令及其应用程序的设计与调试运行实验,学习了汇编语言程序设计过程中的数据输入方法和字符串存储特点,以及利用串操作命令来将缓冲区大小一致的两个字符串右对齐输出。
本次实验很有难度,提升了我们设计复杂汇编程序的能力。
在此感谢指导教师的辛勤指导!电子科技大学实验报告实验四学生姓名:郭小明学号:2011060100010一、实验室名称:主楼A2-412二、实验项目名称:数制、码制和子程序的编制与调试三、实验原理:数制、码制和子程序设计基本规范与调试方法;MASM宏汇编开发环境使用方法;循环程序设计与调试方法;分配与使用寄存器的相关方法四、实验目的:1、熟悉子程序设计的基本格式和使用方法。
2、掌握常用的数制码制转换程序的设计方法。
3、熟悉子程序程序的调试运行过程五、实验内容:从键盘输入两个2位十进制正数,对这两个正数进行加法运算,结果以十六进制数的形式显示在屏幕上。
六、实验器材(设备、元器件):PC机,MASM软件平台。
七、实验步骤:程序说明:本实验用到了两个子程序,一个是将十进制数转换成二进制数的子程序DTOB,还有就是讲二进制数转换为十六进制数的BTOH。
在程序运行的时候我们首先输入两个十进制数,然后分别转换为二进制数(利用子程序DTOB)之后加法计算出二进制结果然后我们再利用子程序BTOH转出16进制最终结果。
程序清单:DATA SEGMENTSTR1 DB 3,0,3 DUP(?)STR2 DB 3,0,3 DUP(?)TEMPSTR DB ?RESSTR DB 0,0,'$'DATA ENDSSTACK1 SEGMENT PARA STACKDW 20H DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK1,DS:DATABEGIN:MOV AX, DATA MOV DS, AXLEA DX, STR1MOV AH, 0AHINT 21HLEA DX, STR2MOV AH, 0AHINT 21HCALL DTOBCALL BTOHLEA DX, RESSTRMOV AH, 9INT 21HMOV AH, 4CHINT 21HDTOB PROCPUSH AXPUSH CXPUSH DXMOV AL, STR1+2SUB AL, 30HMOV DL, 10MUL DLADD AL, STR1+3SUB AL, 30HMOV TEMPSTR, ALMOV AL, STR2+2SUB AL, 30HMOV DL, 10MUL DLADD AL, STR2+3SUB AL, 30HADD AL, TEMPSTRMOV TEMPSTR, ALPOP DXPOP CXPOP AXRETDTOB ENDPBTOH PROCPUSH AXPUSH BXPUSH CXPUSH DXMOV CH, 2MOV DL, TEMPSTRLEA BX, RESSTR CONV: MOV CL, 4ROL DL, CLMOV AL, DLAND AL, 0FHCMP AL, 09HJLE ASCIADD AL, 07H ASCI: ADD AL, 30HMOV [BX], ALINC BXDEC CHJNE CONVPOP DXPOP CXPOP BXPOP AXRETBTOH ENDPCODE ENDSEND BEGIN调试说明:将汇编语言(.asm文件)翻译为目标代码程序(.obj文件)(MASM.exe);没有出现错误或者警告,下一步进行链接,连接目标代码程序和库函数代码生成可执行程序文件(.exe文件),(LINK.exe);我们成功生成了test4.exe. 然后输入Debug命令进入调试环境,-是debug命令提示符。