汇编实验报告汇总.docx

上传人:b****6 文档编号:12847812 上传时间:2023-06-08 格式:DOCX 页数:15 大小:144.94KB
下载 相关 举报
汇编实验报告汇总.docx_第1页
第1页 / 共15页
汇编实验报告汇总.docx_第2页
第2页 / 共15页
汇编实验报告汇总.docx_第3页
第3页 / 共15页
汇编实验报告汇总.docx_第4页
第4页 / 共15页
汇编实验报告汇总.docx_第5页
第5页 / 共15页
汇编实验报告汇总.docx_第6页
第6页 / 共15页
汇编实验报告汇总.docx_第7页
第7页 / 共15页
汇编实验报告汇总.docx_第8页
第8页 / 共15页
汇编实验报告汇总.docx_第9页
第9页 / 共15页
汇编实验报告汇总.docx_第10页
第10页 / 共15页
汇编实验报告汇总.docx_第11页
第11页 / 共15页
汇编实验报告汇总.docx_第12页
第12页 / 共15页
汇编实验报告汇总.docx_第13页
第13页 / 共15页
汇编实验报告汇总.docx_第14页
第14页 / 共15页
汇编实验报告汇总.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

汇编实验报告汇总.docx

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

汇编实验报告汇总.docx

汇编实验报告汇总

(此文档为word格式,下载后您可任意编辑修改!

 

湖北工程学院

计算机与信息科学学院

 

实验报告

 

2013—2014学年第二学期

 

课程名称:

汇编语言程序设计

班级:

学号:

姓名:

雷震

任课教师:

叶从欢

实验一:

顺序结构

一、实验目的:

1.加深对汇编的理解; 

2.掌握汇编程序的设计方法; 

3.学会使用顺序结构。

二、实验内容:

定义变量A、B、C、D,编写程序实现:

(a*b+c-70)a。

并将最后的商保存在D中,余数保存在D+2中。

本实验中:

a=15,b=75,c=70。

程序中,定义字型变量A、B、C、D。

A、B、C分别保存算数表达式中的数值a、b、c,D保存算数运算的最终结果。

程序开始,先将变量A、B、C赋初值,计算A乘以B的值,将结果保存在DX、AX中,然后逐步计算A*B+C,A*B+C-70和(A*B+C-70)A。

最后计算结果的商保存在AX中,余数保存在DX中,最终将AX赋值给D,DX赋值给D+2。

程序运行完毕,程序返回。

三、实验步骤

1.程序设计流程图

2.调试与运行

(1)首先进入DOS系统,进入目标文件所在的系统盘和文件夹;

(2)输入“MASMTEST”,此命令是调用宏汇编程序MASM对源文件TEST.ASM进行编译,TEST是文件的名称,生成目标文件TEST.OBJ;

(3)若汇编无错误,则用命令“LINKTEST”进行连接,生成可执行文件TEST.EXE;

(4)若连接成功,则用命令“TEST”运行。

四.总结与体会

通过这次实验,我初步了解了汇编程序设计的基本方法和步骤,掌握了汇编程序设计的顺序结构。

顺序结构是其他结构的基础,学好顺序结构对进一步学习汇编的好处不言而喻。

在本程序中,主要分为加法,减法,乘法,除法,本程序基本实现了四则运算的功能,该程序所完成的运算式为:

(a*b+c-70)a。

并将运算结果存入变量D中,而余数存入D+2中。

改程序的不足之处是还没能实现除法运算中不能运算较大的数,会产生溢出现象。

完成了这次实验后,对汇编产生了兴趣,而且拥有的信心,以后的学习会再接再厉!

指导教师:

叶从欢___

实验二:

分支结构

1、实验目的

1.熟悉汇编语言程序设计结构;

2.了解汇编语言循环程序设计的基本流程; 

3.熟悉汇编语言循环基本指令的使用方法; 

4.掌握利用汇编语言实现分支程序设计方法;

5.熟悉汇编语言分支程序基本指令的使用方法; 

6.掌握利用汇编语言的循环指令完成循环程序设计方法。

二、实验内容:

根据X的正、负、零来实现分支结构,最终分别输出不同的结果。

1.当X为正数时,将字符串变量Y中的内容“NAME~leizhen$”全部以大写字母输出;

2.当X为负数时,将字符串变量Y中的内容“NAME~leizhen$”全部以小写字母输出;

3.当X为0时,将字符串变量BUF中的内容“X:

0!

$”输出。

程序中,当X小于零时,转到A1标记,A1、A2、A3处理将Y中内容小写输出;当X大于等于0时,转到B1标记,在B1处判断X大于0还是等于0;当X等于0时,输出BUF中的内容;当X大于0时,程序跳转到C1标记,C1、C2、C3处理将Y中的内容大写输出。

三、实验步骤

1.程序设计流程图

YY

N

N

YN

N

2.调试与运行

编译运行文件test2.asm:

(1)将X的值设为正数,运行程序后,Y中“NAME~leizhen$”所有小写字母变为大写;

(2)将X的值设为负数,运行程序后,Y中“NAME~leizhen$”所有大写字母变为小写:

(3)将X的值设为0,运行程序后,输出BUF“X:

0!

$”。

四、总结体会

通过本次实验,让我更加了解了汇编语言的基本要求和步骤,深入了解指令执行的方式和不同的转移方式对应不同的机器码,提高自己动手能力。

本程序中利用利用X值的不同,从而对字符串BUF中的大小写进行相应的变换。

增加了程序的灵活性,让程序不在显得很死板。

这是程序设计的一个很大改善。

完成分支程序设计后,我对分支程序的结构也有了一定的理解,分支程序的结构很好的体现出了人对于问题的想法和解题思路,结构比较好理解和有条理。

这次实验也让我学到了许多汇编语言代码的意义和用法,为以后更加熟练操作编程提供方便。

指导教师:

叶从欢

实验三:

循环结构

一、实验目的

1.加深对循环结构的理解; 

2.掌握循环程序的设计方法; 

3.掌握程序接受用户从键盘输入数据的方法;

4.加深提示用户输入数据的这一习惯。

二、实验内容:

由用户从屏幕输入一个字符串,利用循环,将字符串中的大写转化为小写,小写转化为大写,然后逆序并输出。

程序中,INFO1和INFO2分别保存进行输入和输出的提示字符串;BUF保存输入字符串缓冲区的大小;LEN保存输入字符串的长度;STR1保存输入字符串的串首偏移地址;STR2保存装换后的字符串。

程序开始,进行9号调用输出提示信息INFO1,然后10号调用录入用户输入的字符串,然后换行。

将字符串长度保存在CL中,DI指向STR1的字符串尾,SI指向STR2的串首偏移地址,对读写字符进行控制。

CONT标号中利用循环逐一从STR1中取出字符,如果ASCLL码大于或等于‘a’,跳到BIG标号处,进行大写转小写操作,如果比‘a’小,而且大于或等于‘A’,则跳到SMALL标号处进行小写转大写操作,接着跳到FINAL对循环条件进行更改,如果CL不为0,则继续跳到CONT标号处进行循环。

最后先利用2号调用输出一个回车,然后9号调用输出STR2字符串,进入到EXIT标号,程序结束。

三、实验步骤

1.程序设计流程图

YN

Y

Y

N

2.调试与运行

编译运行文件test3.asm:

(1)编译运行源程序,出现提示用户输入的字符串;

(2)用户输入字符串:

(3)显示转换后的字符串:

四、总结体会

通过运行分析源程序,让我更加了解了循环程序的基本要求和步骤。

不仅如此,本程序还增加了输入输出提示功能,这在程序设计中是一个很重要的内容。

在设计的过程中,在换行上出现了不少的问题,比如本来要输出的字符串从本行开始覆盖了提示字符串,没有出现在它该出现的位置。

对此,我的解决方案是先输出一个换行,然后再输出一个回车,从而解决了我的问题。

在程序设计中,就要有这种独自探索的思想,发现问题,解决问题。

这次的实验让我更加了解了汇编,受益匪浅!

指导教师:

叶从欢

实验四:

双重循环结构

一、实验目的

1.加深对循环结构的理解; 

2.掌握双重循环程序的设计方法; 

3.掌握程序接受用户从键盘输入数据的方法;

4.加深提示用户输入数据的这一习惯;

5.加深对编程的独立探索能力。

二、实验内容:

由用户从屏幕输入连续的一串正整数,利用冒泡排序法,进行排序并输出。

程序中,INFO1和INFO2分别保存进行输入和输出的提示字符串;BUF保存输入字符串缓冲区的大小,BUF+1保存输入字符串的长度;BUF+2保存输入字符串的串首偏移地址。

程序开始,进行9号调用输出提示信息INFO1,然后10号调用录入用户输入的字符串,然后换行。

将字符串长度保存在CL中。

冒泡排序需要用到两层循环,均用CX对循环进行控制。

进入里层循环时,用BX保存当前CX的值。

循环开始,SI指向输入字符串的串首,逐一进行内循环将偏移地址SI中的内容与偏移地址SI+1中的内容进行比较,如果前者大于后者,则将两数进行交换;CX控制循环的次数,当CX减至0时,内层循环完成一次,此时将当前比较的字符中最大的移动到末尾。

退出内循环进入外层循环,将保存在BX中的数赋值给CX,若CX不为1,则继续进入到内循环执行。

否则循环执行完毕,冒泡排序结束。

最后先利用9号调用分别输出提示输出字符串和排好序的字符,程序结束。

三、实验步骤

1.程序设计流程图

YN

N

Y

Y

N

2.调试与运行

编译运行文件test4.asm:

(1)编译运行源程序,出现提示用户输入的字符串;

(2)用户输入字符串:

(3)显示冒泡排序后的字符串:

四、总结体会

通过运行分析源程序,让我更加了解了双重循环程序的基本要求和步骤。

本程序还增加了输入输出提示功能,这在程序设计中是一个很重要的内容,提高了程序设计的灵活、通用性。

除此之外,本程序实现了对用户输入的任意0~9间的字符进行排序。

因为要将排好序的数存放在原地址上,而且又是用户自己输入,所以,在一开始开辟内存单元时,就全部初始化为’$’符号,方便了最终程序利用9号调用对用冒泡排好序的字符进行输出。

在设计此程序时,不免失败了很多次,但是当最终成功的时候,那种快乐时用言语无所表达的。

这次的实验让我更加了解了汇编,受益良多!

指导教师:

叶从欢

实验五:

子程序

一、实验目的

1.加深对子程序的理解; 

2.掌握子程序的设计方法; 

3.学会使用while循环结构;

4.不同模块间程序的调用和调试;

5.学会利用子程序的特点减少程序的冗余度;

6.加深对编程的独立探索、创新能力。

二、实验内容:

利用子程序输出6行8列的平行四边形图形。

程序中,INFO保存输出提示字符串。

START标号指示代码段的开始;LOP标号指示调用BLANK子程序,输出空格;TAG标号指示调用GRAPH子程序,输出‘*’号;EXIT标号指示主程序的退出。

BLANK子程序中LOP1标号指示输出空格循环的开始,GRAPH子程序中LOP2标号指示输出星号循环的开始。

程序开始,进行9号调用输出提示信息INFO,然后换行。

用BX存放总的循环次数,5次。

将BX赋值给CX,CX控制BLANK子程序中输出空格的次数。

进入LOP标记,调用BLANK子程序,输出空格。

然后进入TAG标记,调用GRAPH子程序,输出星号。

输出一行图形后,对循环条件进行更改,将BX减1,如果BX小于0,则整个外层循环完成,程序退出。

否则将BX赋值给CX,继续跳转到LOP标记进行循环。

BLANK子程序中,利用while循环结构对空格进行输出。

首先将循环条件CX减1,对CX进行判断,如果CX小于0,则程序返回,否则就输出一个空格。

然后就继续跳转到BLANK中的LOP1标号进行循环。

GRAPH子程序中,保存主程序中用到的CX,并将CX赋值为8。

利用do-while循环,输出8个星号,然后输出换行,对进行下次图形输出做准备。

三、实验步骤

1.程序设计流程图

主函数流程图:

N

Y

BLANK函数流程图:

N

Y

GRAPH函数流程图:

Y

N

2.调试与运行

编译运行文件test5.asm:

编译运行源程序,屏幕出现平行四边形图案

四、总结体会

这次实验学习了子程序的编写以及主程序和子程序的调用,不同模块间程序的调用和调试方法,实践的过程中加深了对子程序调用的代码的使用,让我更加了解了子程序设计的基本格式和步骤。

本实验中用到了两个子程序,分别实现了输出空格和输出星号的功能。

在编写输出空格子程序时,由于当CX等于0时,仍然要执行一次循环,如果用do-while循环,则要将CX减1,则CX中存储的内容变成了-1的补码,也就是255,使得程序陷入死循环。

在此的处理办法是将do-while循环改写成while循环,执行循环内容之前先对条件进行判断,从而解决了这个难题。

好的程序都是调试出来的,而不是写出来的。

所以在编程过程中,我们应该有耐心去一步步的调试程序,发现问题,解决问题,最终走向成功。

指导教师:

叶从欢

实验六:

宏程序

一、实验目的

1.掌握宏的应用; 

2.掌握宏的定义和使用; 

3.加深对宏程序的理解;

4.掌握创建宏组和条件宏的方法;

5.加深对编程的独立探索、创新能力;

6.学会利用宏程序的特点减少程序的冗余度。

二、实验内容:

利用宏程序实现将输入的字符串逆序输出,要求尽可能提高时间复杂度。

本程序没有开辟一个新的空间来存储逆序后的字符串,而是直接在原存储区上对输入字符串进行改变。

不仅如此,本程序每次循环逐一将首尾字符进行交换,这样将时间复杂度由原来的O(N)提高到O(n2)。

程序中,INFO1保存输入提示字符串,INFO2保存输出提示字符串。

BUF指示缓冲区的大小,LEN指示输入字符串的长度,STR指示输入的字符串。

程序开始,利用定义在MACRO.LIB中的定义的宏进行宏调用,RETURN输出回车换行符,PRINT输出字符变量INFO1,INPUT从键盘输入字符带缓冲区。

将输入字符串串首的偏移地址赋给SI,将AH,CH初始化为0,将输入字符串长度LEN赋给AL,然后将字符串长度加到SI中,此时SI指向输入字符串尾的后一个字节。

将BX赋值为2,将字符串长度除以2,将除得的商作为循环次数赋值给CX。

接着,将SI里面的数据减1,将输入字符串串首的偏移地址赋给DI。

此时,SI指向输入字符串的最后一个字符,DI指向输入字符串的第一个字符。

循环开始,将偏移地址SI中的字符赋给AL,交换AL和偏移地址DI中的字符,最后将AL中的字符赋给偏移地址为SI的内存单元,完成首尾字符的交换。

更改循环条件,将DI后移一个字符,SI前移一个字符,循环条件CX减1。

循环完成后,利用宏程序调用,RETURN输出回车换行符,PRINT输出字符串变量INFO2,PRINT输出变换后的字符串STR。

程序返回,执行完毕。

三、实验步骤

1.程序设计流程图

Y

N

2.调试与运行

编译运行文件test6.asm:

1.运行源程序,屏幕出现输入提示字符串:

2.按照提示输入字符串:

3.回车输出逆序后的字符串:

四、总结体会

这次实验学习了子程序的编写以及主程序和子程序的调用,不同模块间程序的调用和调试方法,实践的过程中加深了对子程序调用的代码的使用,让我更加了解了子程序设计的基本格式和步骤。

宏是源程序中一段有独立功能的代码,需要在源程序中定义一次,就可以多次调用,调用时只需要一个宏指令语句就行了。

在需要传送的数据较多的时候使用宏会变得更加有利。

注意事项:

1.宏指令库在编写时,要特别注意保存要有到的寄存器,并且对宏指令的执行逻辑要非常清晰,保证当形参被替换为实参时,展开的汇编语句是正确的,否则将会出现错误;

2.宏指令在定义时,一个好的习惯是在其代码前面加以说明,解释对应宏指令的功能和执行逻辑。

这样在使用时才能根据需要使用不同的宏指令,也方便代码阅读。

 

3.宏指令和子程序的用途可以简单的总结为:

通常宏指令被用在代码较短且参数较多的场合,而子程序则被用在代码较长的场合。

指导教师:

叶从欢

总结

通过这次汇编课程设计的学习,我在汇编语言方面收获了很多东西。

同C语言一样,汇编也有顺序、分支和循环结构,通过此次对汇编的学习,对基本的顺序、分支和循环结构有了更加深刻的了解。

与C语言所不同的是,汇编中还有子程序和宏程序结构,通过此次的学习在宏定义,宏调用和子程序定义,调用方面我学到了更多的知识,子程序和宏程序就像C语言中的函数一样,通过使用子程序和宏程序让程序更加简洁易懂,减少程序代码的重复性。

都说计算机的语言都是相同的,如此可见一斑。

此外,这次课程设计让我认识到了上课认真听讲的必要性,老师在课堂上讲解的许多知识都很重要,在本次课程设计中就充分体现了这一点,所以学好课堂老师讲解的知识是很有必要的。

从今往后,我会加倍努力学习汇编方面的知识,使自己的能力得以提高,以便未来能在本专业的道路上走的更远、更好。

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

当前位置:首页 > 解决方案 > 学习计划

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

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