电子科技大学汇编实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机专业类课程
实
验
报
告
课程名称:汇编语言程序设计
学院:计算机科学与工程
专业:计算机科学与技术
学生姓名:郭小明
学号:20
日期:2013年12月24日
电子科技大学
实验报告
实验一
学生姓名:郭小明学号:20
一、实验室名称:主楼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程序调试可执行程序,记录数据段的内容。
V ARX V ARY V ARZ
54
105
2020
六、实验器材(设备、元器件):
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 →AL
5 →CL
AL = AL * CL
AL →DL
AX与AX进行异或(置零)
V ARY →AL
2 →CL
AL = AL * CL
AL + DL →AL
AL - 7 →AL
2 →CL
CL / 2 = CL
AL →V ARZ
结束
V ARX V ARY V ARZ
5413
10526
202066
九、实验结论:
通过本次实验,我们学习了解掌握了DEBUG 的基本命令及其
功能,学习了数据传送和算术运算指令的用法,熟悉了在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。
完成了Z = (5*X + 2*Y - 7)/ 2 算术式的编程计算,使用到了以上学习到的知识,并且利用了顺序程序设计的思想。
通过本次实验,大大提升了对汇编程序设计这门课实践意义的理解,提高了编程能力和设计水平。
另外在此感谢指导老师的辛勤工作!
电子科技大学
实验报告
实验二
学生姓名:郭小明学号:20
一、实验室名称:主楼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个
程序框图:
开始
取出表BUF 的首地址放入SI 当中
COUNT → CX
CX>0?
YES
[SI] → AL
AL < 0?
YES
RES2 +1→RES2
NO
SI +1 → SI
NO
结束
九、实验结论:
通过本次实验,掌握了分支程序的结构特点,学习了分支程序的设计和调试方法,掌握了循环程序的结构特点并学习了循环程序的设计和调试方法,本程序完成对一个数组当中大于5,小于0以及大于等于0小于等于5的数的个数的统计,运用了循环程序设计的思想,本实验的原理框图较为复杂,但是框图给出了明确的思路和解题方向,是很好的学习方法。
本次程序设计实验运用了数个跳转指令,JL ,JLE ,跳转指令在循环程序设计过程中具有很重要的特点。
另外在此感谢指导教师的辛勤工作!
第二次实验共计两个程序,要求二选一,现在两个题目都做出解答(实验三实验四)如 下,供老师批阅! 电 子 科 技 大 学
实 验 报 告
实验三
学生姓名:郭小明 学 号:20
AL<=5?
YES
RES3 +1 → RES3
NO
RES1 + 1 = RES1
一、实验室名称:主楼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 →CX
LEA BX,STRING1
CX>0?
YES
显示提示输入字符串的信息
输入一个字符串
LEA BX,STRING2
CX -1 →CX
NO
LEA BX,STRING1+2
调用MOVE子程序字符串右
对齐处理
CH异或置零
获取要传送的字符串字节数送入CL
MOV CL,-1[BX]
MOV SI,CX ADD SI,BX DEC SI
获取传送源串地址SI
MOV DI,BX ADD DI,NUM-1 获取传送目的串地址
STD
设置DF为1,SI每次减去1
MOVE
九、实验结论:
本实验完成了串操作指令及其应用程序的设计与调试运行实验,学习了汇编语言程序设计过程中的数据输入方法和字符串存储特点,以及利用串操作命令来将缓冲区大小一致的两个字符串右对齐输出。
本次实验很有难度,提升了我们设计复杂汇编程序的能力。
在此感谢指导教师的辛勤指导!
电 子 科 技 大 学
实 验 报 告
实验四
学生姓名:郭小明 学 号:20
一、实验室名称: 主楼A2-412 二、实验项目名称:数制、码制和子程序的编制与调试
输出右对齐字符串 结束 LEA BX,STRING2+2
调用MOVE 子程序字符串右对齐处理
REP MOVSB 进行字符串传送
剩余字节填空格
返回
三、实验原理:
数制、码制和子程序设计基本规范与调试方法;
MASM宏汇编开发环境使用方法;
循环程序设计与调试方法;
分配与使用寄存器的相关方法
四、实验目的:
1、熟悉子程序设计的基本格式和使用方法。
2、掌握常用的数制码制转换程序的设计方法。
3、熟悉子程序程序的调试运行过程
五、实验内容:
从键盘输入两个2位十进制正数,对这两个正数进行加法运算,结果以十六进制数的形式显示在屏幕上。
六、实验器材(设备、元器件):
PC机,MASM软件平台。
七、实验步骤:
程序说明:
本实验用到了两个子程序,一个是将十进制数转换成二进制数的子程序DTOB,还有就是讲二进制数转换为十六进制数的BTOH。
在程序运行的时候我们首先输入两个十进制数,然后分别转换为二进
制数(利用子程序DTOB)之后加法计算出二进制结果然后我们再利用子程序BTOH转出16进制最终结果。
程序清单:
DATA SEGMENT
STR1 DB 3,0,3 DUP(?)
STR2 DB 3,0,3 DUP(?)
TEMPSTR DB ?
RESSTR DB 0,0,'$'
DATA ENDS
STACK1 SEGMENT PARA STACK
DW 20H DUP(0)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK1,DS:DATA
BEGIN:MOV AX, DATA
MOV DS, AX
LEA DX, STR1
MOV AH, 0AH
INT 21H
LEA DX, STR2
MOV AH, 0AH
INT 21H
CALL DTOB
CALL BTOH
LEA DX, RESSTR
MOV AH, 9
INT 21H
MOV AH, 4CH
INT 21H
DTOB PROC
PUSH AX
PUSH CX
PUSH DX
MOV AL, STR1+2
SUB AL, 30H
MOV DL, 10
MUL DL
ADD AL, STR1+3
SUB AL, 30H
MOV TEMPSTR, AL
MOV AL, STR2+2
SUB AL, 30H
MOV DL, 10
MUL DL
ADD AL, STR2+3
SUB AL, 30H
ADD AL, TEMPSTR
MOV TEMPSTR, AL
POP DX
POP CX
POP AX
RET
DTOB ENDP
BTOH PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CH, 2
MOV DL, TEMPSTR
LEA BX, RESSTR CONV: MOV CL, 4
ROL DL, CL
MOV AL, DL
AND AL, 0FH
CMP AL, 09H
JLE ASCI
ADD AL, 07H
ASCI: ADD AL, 30H
MOV [BX], AL
INC BX
DEC CH
JNE CONV
POP DX
POP CX
POP BX
POP AX
RET
BTOH ENDP
CODE ENDS
END BEGIN
调试说明:
将汇编语言(.asm文件)翻译为目标代码程序(.obj文件)(MASM.exe);
没有出现错误或者警告,下一步进行链接,连接目标代码程序和库函数代码生成可执行程序文件(.exe文件),(LINK.exe);
我们成功生成了test4.exe. 然后输入Debug命令进入调试环境,-是debug命令提示符。
我们进入了debug程序调试环境
现在我们反汇编该程序
下面是单步调试的过程
下面运行该程序:
正如我们所料想的。
我们输入-g调试命令之后,提示输入数据,在输入两个数据10和18之后我们得出了10+18的十六进制结果1E,然后程序结束。
八、实验结论:
本实验完成了数制,码制子程序调试设计及其应用程序的设计与调试运行实验,学习了汇编语言程序设计过程中的数据输入方法和字符串存储特点,以及利用码制转换将两个十进制数相加并以十六进制形式输出。
在此感谢指导教师的辛勤指导!
【此课件下载可自行编辑修改,供参考,感谢你的支持!】。