最新版汇编实验报告汇总.docx

上传人:b****5 文档编号:12095087 上传时间:2023-04-17 格式:DOCX 页数:14 大小:25.78KB
下载 相关 举报
最新版汇编实验报告汇总.docx_第1页
第1页 / 共14页
最新版汇编实验报告汇总.docx_第2页
第2页 / 共14页
最新版汇编实验报告汇总.docx_第3页
第3页 / 共14页
最新版汇编实验报告汇总.docx_第4页
第4页 / 共14页
最新版汇编实验报告汇总.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

最新版汇编实验报告汇总.docx

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

最新版汇编实验报告汇总.docx

最新版汇编实验报告汇总

湖北工程学院

计算机与信息科学学院

实验报告

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。

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

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

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

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

三、实验步骤

1.程序设计流程图

2.调试与运行

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

C:

\UsersXadmin>d:

D:

\>cd

(2)输入“MASMTEST,此命令是调用宏汇编程序MAS对源文件

TEST.AS进行编译,TES■是文件的名称,生成目标文件TEST.OBJ

D:

\maSm>MASMTEST

MicrosoftMacrolerUei*sion5,00

Gopvi'iff^tMicrosoftCo1981^1985,1987.Allrightsreservetl.

ObjectFilename[TEST

SourcelistingEHUL.LST1:

Cross-referenceEHUL.CRF]:

48162+396814Bytessymbolspacefree

0Warnin^Errors

SSevereErrors

(3)若汇编无错误,则用命令“LINKTEST进行连接,生成可执行

文件TEST.EXE

D:

\inasm>LINKTEST

Hieroseft

>OuerlayLinkerUersion3.65

CopyrightMicrosof七Corp1983-1988uAllriffJitsreserved,.

FileITEET..EXE1:

ListFile[NUL.MAP]:

LibrariesEnLIB]=

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

D:

Xfnasn>TEST

D:

四•总结与体会

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

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

在本程序中,主要分为加法,减法,乘法,除法,本程序基本实

现了四则运算的功能,该程序所完成的运算式为:

(a*b+c-70)/a。

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

D+2中。

改程序的不足之处是还没能实现除法运算中不能运算较大的

数,会产生溢出现象。

完成了这次实验后,对汇编产生了兴趣,而且拥有的信心,以后

的学习会再接再厉!

指导教师:

叶从欢.

实验二:

分支结构

■、实验目的

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

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

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

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

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

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

1、实验内容:

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

1.当灿正数时,将字符串变量Y中的内容“NAME~leizhen$'全部

以大写字母输出;

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

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

0!

$”输出。

程序中,当刈、于零时,转到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的值设为正数,运行程序后,丫中“NAME~leizhen$‘所有小写字母变为大写;

AME'LEIZHEN

(2)将X的值设为负数,运行程序后,丫中“NAME~leizhen$‘所有大

写字母变为小写:

=Mnasm>test2ane~leizhen

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

0!

$”。

:

Xmasm>test2:

0?

四、总结体会

通过本次实验,让我更加了解了汇编语言的基本要求和步骤,深

入了解指令执行的方式和不同的转移方式对应不同的机器码,提高自

己动手能力。

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

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

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

完成分支程序设计后,我对分支程序的结构也有了一定的理解,

分支程序的结构很好的体现出了人对于问题的想法和解题思路,结构

比较好理解和有条理。

这次实验也让我学到了许多汇编语言代码的意

义和用法,为以后更加熟练操作编程提供方便。

实验三:

循环结构

■、实验目的

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

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

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

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

二、实验内容:

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

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

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

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

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

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

二、实验步骤

1.程序设计流程图

YN

Y

Y

N

2.调试与运行

编译运行文件test3.asm:

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

D:

\nasn>testd

‘1皂日占e住n广theprimer#广ing:

(2)用户输入字符串:

D:

\MasM>testS

PleaseentertheprimarystringimyNAMEisLEIZHEN!

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

D:

\masin>test3

Pleaseenter-theprimarystrin^:

myNAMEisLEIZHENfOutputthetiransfronedsis«*nehzie1S1eman¥M"Xn»asm>

四、总结体会

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

骤。

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

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

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

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

题。

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

指导教师:

叶从欢

实验四:

双重循环结构

一、实验目的

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

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

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

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

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

二、实验内容:

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

程序中,INF01和INF02分别保存进行输入和输出的提示字符串;

BUF呆存输入字符串缓冲区的大小,BUF+保存输入字符串的长度;

BUF+保存输入字符串的串首偏移地址。

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

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

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

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

循环开始,SI指向输入字符串的串首,逐一进行内循环将偏移地

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

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

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

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

二、实验步骤

1.程序设计流程图

N

Y

Y

N

2.调试与运行

编译运行文件test4.asm:

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

D:

\masm>testi

Pleaseentertheprimarystring:

(2)用户输入字符串:

D:

\masm>tesU

Pleaseentertheprimarystring:

1825734690

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

D:

Sii*asm>test4

Pleaseentertheprimarysti'ingf:

182S734690butputtheorderedstringis:

01234S6789

四、总结体会

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

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

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

因为要将排好序的数存放在原地址上,而且又是用户自己输入,所以,在一开始开辟内存单元时,就全部初始化为’$'符号,方便

了最终程序利用9号调用对用冒泡排好序的字符进行输出。

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

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

指导教师:

叶从欢

实验五:

子程序

一、实验目的

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

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

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

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

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

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

二、实验内容:

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

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

STAR标号指示代码段的开始;LOF标号指示调用BLAN子程序,输出空格;TA前号指示调用GRAPH子程序,输出‘*'号;EXIT标号指示主程序的退出。

BLANI子程序中LOP标号指示输出空格循环的开始,GRAP子程序中LOP标号指示输出星号循环的开始。

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

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

将BX赋值给CX。

短制BLANI子程序中输出空格的次数。

进入LOF标记,调用BLANI子程序,输出空格。

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

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

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

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

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

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

GRAP子程序中,保存主程序中用到的CX并将CX赋值为&利用do-while循环,输出8个星号,然后输出换行,对进行下次图形输出做准备。

三、实验步骤

1.程序设计流程图

主函数流程图:

N

Y

BLAN函数流程图:

N

Y

2.调试与运行

编译运行文件test5.asm:

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

四、总结体会

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

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

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

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

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

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

指导教师:

叶从欢

实验六:

宏程序

一、实验目的

1.掌握宏的应用;

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

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

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

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

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

二、实验内容:

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

复杂度。

本程序没有开辟一个新的空间来存储逆序后的字符串,而是直接

在原存储区上对输入字符串进行改变。

不仅如此,本程序每次循环逐

一将首尾字符进行交换,这样将时间复杂度由原来的0(N)提高到0

(n/2)。

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

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

程序开始,利用定义在MACRO.LI中的定义的宏进行宏调用,

RETURN出回车换行符,PRINT输出字符变量INF01,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。

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

程序返回,执行完毕。

三、实验步骤

1.程序设计流程图

2.调试与运行

编译运行文件test6.asm:

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

D:

\masm>TEST6

input卩厂im日厂y£tr~ing:

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

p:

\masm>TEST6

'Pleaseinputprimarystring:

MvnameisLeiZhen?

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

D:

\masm>TEST6

Pleaseinputprimarystring:

HynameisLeiZhen!

Outputhetransferee!

string:

fnehZieLsimm日nyMD:

\masiii>

四、总结体会

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

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

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

注意事项:

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

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

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

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

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

指导教师:

叶从欢

总结

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

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

与C语言所不同的是,汇编中还有子程序和宏程序结构,通过此次的学习在宏定义,宏调用和子程序定义,调用方面我学到了更多的知识,子程序和宏程序就像C语言

中的函数一样,通过使用子程序和宏程序让程序更加简洁易懂,减少程序代码的重复性。

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

此外,这次课程设计让我认识到了上课认真听讲的必要性,

老师在课堂上讲解的许多知识都很重要,在本次课程设计中

就充分体现了这一点,所以学好课堂老师讲解的知识是很有必要的。

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

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

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1