汇编语言实验报告.docx
- 文档编号:11968604
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:36
- 大小:7.01MB
汇编语言实验报告.docx
《汇编语言实验报告.docx》由会员分享,可在线阅读,更多相关《汇编语言实验报告.docx(36页珍藏版)》请在冰豆网上搜索。
汇编语言实验报告
实验报告
计算机专业类课程
课程名称:
汇编程序语言设计
学 院:
计算机科学与工程
专 业:
计算机科学与技术
******
学 号:
*************
******
日 期:
2014 年 12 月 15 日电子科技大学计算机学院实验中心
电子科技大学
实
验
报
告
实验一
1、实验名称:
汇编源程序的上机调试操作基础训练
2、实验学时:
4
3、实验内容和目的:
实验内容:
1.DEBUG命令的使用
2.程序的调试与运行
1.编写程序计算以下表达式:
Z=(5X+2Y-7)/2
设X、Y的值放在字节变量VARX、VARY中,结果存放在字节单元VARZ中。
实验目的:
1.掌握DEBUG的基本命令及其功能
2.学习数据传送和算术运算指令的用法
3.熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。
4、实验原理:
1.编辑源程序,建立一个以后缀为.ASM的文件.
2.汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。
无错时继续第3步。
3.连接目标程序,产生可执行程序。
4.用DEBUG程序调试可执行程序,记录数据段的内容。
5、实验器材(设备、元器件)
pc、window7平台、masm5开发环境
6、实验步骤:
1、在数据段中分别用两个单元varx和vary存放变量x和y;另一个单元varz用来存放运算结果Z;
2、由于是字节变量,所以用al存放变量x的值,然后将al左移两位得到4*x,再把al
加上x,进而得到5*x;
3、再用bl存放变量y的值,用add命令得到2*y,之后把al与bl相加,再用sub命令减去7,得到(5*x+2*y-7)的值,并保存到al中;
4、最后将al右移一位,得到最后的z=(5*x+2*y-7)/2,并把al的值送入varz单元;5、运行程序,使用-d命令查看内存单元的信息;
7、实验数据及结果分析:
实验代码如下:
电子科技大学计算机学院实验中心
实验结果如下图:
1、编译连接后执行程序:
2、查看内存单元变量的值
varx=05h,vary=07h,(5x+2y-7)/2=(25d+14d-7d)/2d=16d=10h
可以看到上图中内存单元的值与手工计算的结果相符,说明程序是正确的。
8、实验结论、心得体会和改进建议:
1、
2、
本次实验让我掌握debug调试软件的一些基本命令,也学会了如何查看寄存器变量和内存单元;
这个程序虽然短小,却是五脏俱全,让我对于一个完整汇编程序的框架有了一个基本的了解,为后面的更为复杂的实验奠定了基础;
电子科技大学计算机学院实验中心
电子科技大学
实
验
报
告
实验二
1、实验名称:
分支程序与循环程序设计
2、实验学时:
4
3、实验内容和目的:
实验内容:
根据输入的字母进行大小写转换(若是输入小写字母则转换成为大写字母,反之),若输入的不是字母则提示出错并重新输入。
实验目的:
1.掌握分支程序的结构。
2.掌握分支程序的设计与调试方法。
3.掌握循环程序设计与调试方法
2.掌握正确分配与使用寄存器。
4、实验原理:
1、利用软中断指令,进行人机交互,输入字母并显示转换后的字母;
2、由ascii码表可知,小写字母与其对应的大写字母之间刚好相差20h,即若输入的是
大写字母,将其加上20h就可以得到对应的小写字母,反之小写字母减去20h可以得到其大写字母;
3、利用CMP比较指令对输入的字母判定大小写,在根据标志寄存器的状态执行条件转移指令找到对应的程序段入口;
5、实验器材(设备、元器件)
pc、window7平台、masm5开发环境
6、实验步骤:
1、根据程序流程图编写源程序文件;
2、汇编,若发现语法错误或者格式错误则修改;
3、链接,形成可执行文件;
4、
运行程序,单步执行查看寄存器标量及内存单元;5、验证程序的正确性;
程序流程图如右图:
只
开始
al<41h
al>5ah
al<61h
al>71h
电子科技大学计算机学院实验中心
结束
七、实验数据及结果分析:
实验代码如下:
实验结果如图:
1、编译连接以及调试:
电子科技大学计算机学院实验中心
2、输入小写p
3、输出大写P
4、输入小写t
5、输出大写T
电子科技大学计算机学院实验中心
6、输入非字母的字符
7、输出警告信息并重新输入一个字符(大写的Q)
八、实验结论、心得体会和改进建议:
本实验也有其他的做法,由观察可知,小写字母的8位二进制数的第5
位(从第0位开始数)上的值一定为1,而大写字母的第五位一定为0,所以
也可以对将小写字母与11011111B做and运算,把第五位上的1置0从而转
换为大写字母,而大写字母与0010000B做or运算,把第五位上的0置为1变为小写字母。
电子科技大学计算机学院实验中心
电子科技大学
实
验
报
告
实验三
一、实验名称:
数制、码制和子程序的编程与调试
二、实验学时:
4
三、实验内容和目的:
实验内容:
从键盘输入两个2位十六进制数,相加,结果以十进制形式显示在屏幕上。
(要求结果显示完整的算式)
实验目的:
1.、熟练掌握编写汇编语言原程序的基本方法和基本框架。
2、熟练使用DEBUG调试程序。
3.、掌握十六进制数与ASCII码之间,ASCII码与BCD码之间的转换。
4.、掌握用DOS功能调用,实现字符的输入和显示。
5.、掌握子程序的编程与调试方法。
四、实验原理:
1、调用0ah号功能,从键盘输入两个2位十六进制数,并存入指定缓冲区;
2、根据ascii码表的规律将十六进制数转换为二进制数,其中对于数字型ascii码取其低四位,而字母型的ascii码先减去07h后,再取低四位;
3、而把二进制数转换为十进制数可以采用除基取余法,但要注意取出的余数是从低位往高位排列的。
五、实验器材(设备、元器件)
pc、window7平台、masm5开发环境
六、实验步骤:
1、根据程序流程图编写实验代码;
1、汇编,若发现语法错误或者格式错误则修改;3、链接,形成可执行文件;
流程图如下:
4、运行程序,单步执行查看寄存器标量及内存单元;5、验证程序的正确性
开始
bin2dec
cc
中
asc2bin
bl<’0’
单元
bl<=9
bl<’A’
商al=0?
bl<=’F’
返回
ch=0?
bl<’a’
bl<=’f’
结束
电子科技大学计算机学院实验中心
返回
七、实验数据及结果分析:
实验代码如下:
电子科技大学计算机学院实验中心
程序运行结果图如下:
电子科技大学计算机学院实验中心
由上图可以看出,63H=99D,2CH=44D,99D+44D=143D,可见结果是正确的。
单步执行结果如下图:
1、输入第一个十六进制数:
2、输入第二个十六进制数:
3、调用子程序acs2bin:
(由于篇幅有限,只截部分图示意)
电子科技大学计算机学院实验中心
4、将两数之和转换为十进制数,调用bin2dec子程序(程序中笔误写成了bin2hex)
电子科技大学计算机学院实验中心
电子科技大学计算机学院实验中心
5、将十进制数转换为ascii码,显示完整算式
电子科技大学计算机学院实验中心
6、执行程序过程中发现,当输入的字符不在0-9A-Za-z区间时,程序并没有
如想象中的打印出错误信息,而是直接回到了dos操作界面,这一点我十分不明白,如下图所示:
电子科技大学计算机学院实验中心
八、实验结论、心得体会和改进建议:
1、
如上面提到的,执行程序过程中发现错误提示信息打印不了,在网上
也是没有找到答案,后来我想了想是不是在子程序中就不能再进行软中断了
呢?
子程序调用和软中断都会对现场进行压栈保护,可能两者之间有所冲突。
2、
实验过程中,在把二进制数转换为十进制数时,一开始我是把每次除
以10求得的余数按正序存放的,这样得到的十进制数就正好是倒序的,后来发现了错误,及时改正了。
电子科技大学
实
验
报
告
实验四
一、实验名称:
串操作指令及其应用程序的设计与调试运行
二、实验学时:
4
三、实验内容和目的:
实验内容:
从键盘输入两个相同长度的字符串,分别放到数据段和附加段,利用串比较指令比较数据段和附加段中两个字符串,如果两串一样,输出Y,否则输出不同的字符。
实验目的:
1.熟悉串操作指令的基本格式和使用方法。
2.掌握常用的串操作程序的设计方法。
3.熟悉串操作程序的调试运行过程。
四、实验原理:
1、需要用到9号DOS功能调用显示字符串,以实现人机对话。
比如:
在数据段中设置两个存放提示信息的字符串,一个是提示用户输入,另一个是指示显示结果:
massage1DB‘pleaseinputastring:
’,0AH,0DH,‘$’
2、需要用到10号DOS功能调用输入连续的字符串,并为这些字串预留存储空间,比如:
电子科技大学计算机学院实验中心
STRING1DB20,0,20DUP(‘0‘),0AH,0DH,‘$’
3、利用串比较指令CMPSB比较两个字符串的对应字符是否相等,同时使用REPE重复执行指令再配合JNZ和JMP等转移指令来控制程序的循环和跳转;
五、实验器材(设备、元器件)
pc、window7平台、masm5开发环境
六、实验步骤:
1、根据程序流程图编写实验代码;
2、
汇编,若发现语法错误或者格式错误则修改;
3、链接,形成可执行文件;
4、运行程序,单步执行查看寄存器标量及内存单元;5、验证程序的正确性;
开始
程序流程图如右图所示:
元
元
ZF=0&&cx≠0?
ZF≠0?
ZF≠0?
结束
七、实验数据及结果分析:
实验代码如下:
电子科技大学计算机学院实验中心
实验结果如下图:
下面是单步执行结果:
1、输入第一个字符串str1
电子科技大学计算机学院实验中心
2、输入第二个字符串str2
3、串操作指令CMPSB,当两个字符不等时,跳转
4、打印不同的字母,然后继续进行串比较
电子科技大学计算机学院实验中心
对于这一部分,看图可以注意到我手动的添加了一个CMPCX,0指令,当CX≠0时才继续执行CMPSB指令,这是由于在之前的代码调试过程中,我发现当我不对cx进行手动的判0时,REPZCMPSB指令将会永远执行下去,即使此时CX的值已经等于0000了,如下图所示:
5、继续输出不相同的字符,并且此时CX=0000
电子科技大学计算机学院实验中心
6、程序运行完毕
八、实验结论、心得体会和改进建议:
1、通过这次试验,我熟练的掌握了串比较指令CMPSB以及重复前缀指
令REPZ/REPE的工作原理。
通过单步执行并查看寄存器变量的值我更加深入
的体会到了CMPSB指令的运行机制,以及它对于标志寄存器的影响;
2、然而,在这次试验中我还是有一些疑问没能得到解决,正如之前提到
的,在对不相等字符进行处理时,我发现当输出一个不相等字符后,若此时CX=0000,再继续REPZCMPSB指令时,该指令将永远执行下去,也就是说此
时REPZ指令并没有对CX的值进行检查。
我想了很久也没有想出原因,最后还是通过手动的对CX进行一个CMP操作来停止字符串的比较。
3、在输出不相等的字符时可以考虑将它们与原本在str2中的位置对齐。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 实验 报告