>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语言
中的函数一样,通过使用子程序和宏程序让程序更加简洁易懂,减少程序代码的重复性。
都说计算机的语言都是相同的,如此可见一斑。
此外,这次课程设计让我认识到了上课认真听讲的必要性,
老师在课堂上讲解的许多知识都很重要,在本次课程设计中
就充分体现了这一点,所以学好课堂老师讲解的知识是很有必要的。
从今往后,我会加倍努力学习汇编方面的知识,使自己的能力得以提高,以便未来能在本专业的道路上走的更远、更好。