汇编语言实验报告.docx

上传人:b****8 文档编号:12164822 上传时间:2023-06-04 格式:DOCX 页数:32 大小:9.03MB
下载 相关 举报
汇编语言实验报告.docx_第1页
第1页 / 共32页
汇编语言实验报告.docx_第2页
第2页 / 共32页
汇编语言实验报告.docx_第3页
第3页 / 共32页
汇编语言实验报告.docx_第4页
第4页 / 共32页
汇编语言实验报告.docx_第5页
第5页 / 共32页
汇编语言实验报告.docx_第6页
第6页 / 共32页
汇编语言实验报告.docx_第7页
第7页 / 共32页
汇编语言实验报告.docx_第8页
第8页 / 共32页
汇编语言实验报告.docx_第9页
第9页 / 共32页
汇编语言实验报告.docx_第10页
第10页 / 共32页
汇编语言实验报告.docx_第11页
第11页 / 共32页
汇编语言实验报告.docx_第12页
第12页 / 共32页
汇编语言实验报告.docx_第13页
第13页 / 共32页
汇编语言实验报告.docx_第14页
第14页 / 共32页
汇编语言实验报告.docx_第15页
第15页 / 共32页
汇编语言实验报告.docx_第16页
第16页 / 共32页
汇编语言实验报告.docx_第17页
第17页 / 共32页
汇编语言实验报告.docx_第18页
第18页 / 共32页
汇编语言实验报告.docx_第19页
第19页 / 共32页
汇编语言实验报告.docx_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

汇编语言实验报告.docx

《汇编语言实验报告.docx》由会员分享,可在线阅读,更多相关《汇编语言实验报告.docx(32页珍藏版)》请在冰点文库上搜索。

汇编语言实验报告.docx

汇编语言实验报告

计算机专业类课程

实验报告

课程名称:

汇编程序语言设计

学  院:

计算机科学与工程

专  业:

计算机科学与技术

学生姓名:

林怡

学  号:

2012060020023

指导教师:

胡建

日  期:

   2014 年 12 月 15 日

电子科技大学

实验报告

实验一

一、实验名称:

汇编源程序的上机调试操作基础训练

二、实验学时:

4

三、实验内容和目的:

实验内容:

1.DEBUG命令的使用

2.程序的调试与运行

3.编写程序计算以下表达式:

Z=(5X+2Y-7)/2

设X、Y的值放在字节变量VARX、VARY中,结果存放在字节单元VARZ中。

实验目的:

1.掌握DEBUG的基本命令及其功能

2.学习数据传送和算术运算指令的用法

3.熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。

四、实验原理:

1.编辑源程序,建立一个以后缀为.ASM的文件.

2.汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。

无错时

继续第3步。

3.连接目标程序,产生可执行程序。

4.用DEBUG程序调试可执行程序,记录数据段的内容。

五、实验器材(设备、元器件)

pc、window7平台、masm5开发环境

六、实验步骤:

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命令查看内存单元的信息;

七、实验数据及结果分析:

实验代码如下:

实验结果如下图:

1、编译连接后执行程序:

2、查看内存单元变量的值

varx=05h,vary=07h,(5x+2y-7)/2=(25d+14d-7d)/2d=16d=10h

可以看到上图中内存单元的值与手工计算的结果相符,说明程序是正确的。

八、实验结论、心得体会和改进建议:

1、本次实验让我掌握debug调试软件的一些基本命令,也学会了如何查看寄存器变量和内存单元;

2、这个程序虽然短小,却是五脏俱全,让我对于一个完整汇编程序的框架有了一个基本的了解,为后面的更为复杂的实验奠定了基础;

电子科技大学

实验报告

实验二

一、实验名称:

分支程序与循环程序设计

二、实验学时:

4

三、实验内容和目的:

实验内容:

根据输入的字母进行大小写转换(若是输入小写字母则转换成为大写字母,反之),若输入的不是字母则提示出错并重新输入。

实验目的:

1.掌握分支程序的结构。

2.掌握分支程序的设计与调试方法。

3.掌握循环程序设计与调试方法

4.掌握正确分配与使用寄存器。

四、实验原理:

1、利用软中断指令,进行人机交互,输入字母并显示转换后的字母;

2、由ascii码表可知,小写字母与其对应的大写字母之间刚好相差20h,即若输入的是

大写字母,将其加上20h就可以得到对应的小写字母,反之小写字母减去20h可以得到其大写字母;

3、利用CMP比较指令对输入的字母判定大小写,在根据标志寄存器的状态执行条件

转移指令找到对应的程序段入口;

五、实验器材(设备、元器件)

pc、window7平台、masm5开发环境

六、实验步骤:

1、根据程序流程图编写源程序文件;

2、汇编,若发现语法错误或者格式错误则修改;

3、链接,形成可执行文件;

4、运行程序,单步执行查看寄存器标量及内存单元;

5、验证程序的正确性;

程序流程图如右图:

 

七、实验数据及结果分析:

实验代码如下:

 

 

实验结果如图:

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、根据程序流程图编写实验代码;

2、汇编,若发现语法错误或者格式错误则修改;

3、链接,形成可执行文件;

4、运行程序,单步执行查看寄存器标量及内存单元;

5、验证程序的正确性流程图如下:

 

 

七、实验数据及结果分析:

实验代码如下:

 

程序运行结果图如下:

由上图可以看出,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、验证程序的正确性;

程序流程图如右图所示:

 

七、实验数据及结果分析:

实验代码如下:

 

 

实验结果如下图:

 

下面是单步执行结果:

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中的位置对齐。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2