汇编习题四.docx
- 文档编号:18380153
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:14
- 大小:22.51KB
汇编习题四.docx
《汇编习题四.docx》由会员分享,可在线阅读,更多相关《汇编习题四.docx(14页珍藏版)》请在冰点文库上搜索。
汇编习题四
第四章习题
4.1编写汇编语言程序的一般步骤是什么?
答:
一般说来,编写汇编程序应遵循如下步骤。
(1) 分析问题,确定算法。
这一步是能否编制出高质量程序的关键,在开始设计之前,应该仔细地分析、理解问题,并确定需求。
对于一些较为复杂的问题,还需要将问题进行分解,划分模块并确定各模块间的接口关系。
然后根据要解决的问题确定合理的算法及适当的数据结构。
(2) 绘制流程图。
流程图可以将算法逻辑、控制结构及数据流程形象地表示出来,是设计思想的直观表现形式。
流程图是编写程序的指导性的文件,认真绘制流程图可以有效地减少出错的可能性。
这一点对初学者而言尤其重要。
(3) 分配资源。
汇编程序不同于高级语言程序,汇编程序的许多资源需要由程序员来分配和使用,而这些资源有时是非常有限的,因此,在开始编写代码前,要合理地分配和使用这些资源,如为原始数据、中间结果和最后结果分配必要的存储空间或寄存器。
(4) 根据流程图编写程序。
在编写代码的过程中,要以程序流程图为主线,并根据预先确定的资源分配方案,选择合适的汇编语句进行编制,并进行必要的注释。
(5) 上机调试程序。
调试程序的目的是查找和排除错误的关键环节。
任何程序都必须经过反复上机调试才能验证出设计思想是否正确、编写的程序是否符合设计思想。
在调试程序的过程中应充分利用调试工具(如DEBUG),发现并修正程序中存在的各种语法错误和逻辑错误。
4.2从程序结构上看,汇编语言程序分为哪四种基本结构形式?
简要说明这四种结构的特点和用途。
答:
汇编程序有顺序、分支、循环和子程序等四种基本结构形式。
顺序程序是一种最简单也是最基本的结构形式,它的执行流程与指令的排列顺序完全一致,运行时从前至后逐条执行。
对于一些复杂的问题,顺序结构往往是作为复杂程序结构中的一部分;而对于一些简单的问题,可以依次写出相应的汇编指令,用顺序结构即可实现编程要求。
分支结构是利用条件转移指令或跳转表,使程序执行到某一指令后,根据运行结果是否满足一定条件来改变程序执行的顺序,然后去执行不同的分支语句,分支结构程序使计算机有了一定的分析和判断能力。
分支程序的结构通常有三种典型形式:
不完全分支、完全分支和多分支。
当需要重复执行某段程序时,可以利用循环程序结构。
循环结构一般是根据某一条件判断为真或为假来确定是否重复执行循环体。
循环结构的程序通常由以下3个部分组成。
(1) 循环初始部分:
为开始循环准备必要的条件,如循环次数,以及为循环体正常工作而建立的初始状态等。
(2) 循环体部分:
重复执行的程序代码,这是循环工作的主体,它由循环的工作部分及修改部分组成。
循环的重复部分是为完成程序功能而设计的主要程序段,循环的修改部分则是为保证每一次重复时,参加执行的信息能发生有规律的变化而建立的程序段。
(3) 循环控制部分:
判断循环条件是否成立,决定是否继续循环。
子程序是程序设计的基础。
实际编程时,常把功能相对独立的程序段单独编写和调试,使之作为一个相对独立的模块供程序使用,这就是子程序,也称为过程,相当于高级语言中的过程和函数。
调用子程序的程序称为主程序(或称调用程序)。
利用子程序可以简化程序结构,实现程序的模块化,缩短源程序长度,节省目标程序的存储空间,也可提高程序的可维护性和共享性。
4.4假设有三个无符号字存放在以BUFFER为开始的缓冲区中,编写一个程序把它们按从低到高排序。
答:
DATASEGMENT
BUFFERDB15H,98H,05H
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
STARTMOVAX,DATA
MOVDS,AX
LEASI,BUFFER
MOVAL,[SI]
CMPAL,[SI+1]
JAENEXT1
XCHGAL,[SI+1]
MOV[SI],AL
NEXT1:
CMPAL,[SI+2]
JAENEXT2
XCHGAL,[SI+2]
MOV[SI],AL
NEXT2:
MOVAL,[SI+1]
CMPAL,[SI+2]
JAENEXT3
XCHGAL,[SI+2]
MOV[SI+1],AL
NEXT3:
MOVAH,4CH
INT21H
DATAENDS
ENDSTART
4.5编写程序,将一个字符串(字符串以0结尾)中的所有小写字母转换为对应的大写字母,并统计转换次数。
答:
DATASEGMENT
FIRSTDB‘SADadJHJBsdbjshlcSKxjasncnN….0’
SUNDBDUP(?
)
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
STARTMOVAX,DATA
MOVDS,AX
LEASI,FIRST
XORBL,BL
NEXT2:
MOVAL,[SI]
CMPAL,30H
JZLOOP
CMPAL,41H
JLNEXT1
CMPAL,6EH
JANEXT1
SUBAL,20H
MOV[SI],AL
INCBL
NEXT1:
INCSI
JMPNEXT2
LOOP:
MOVSUN,BL
MOVAH,4CH
INT21H
DATAENDS
ENDSTART
4.6编写程序,找出自BUF存储单元开始的50个无符号数中最大值和最小值,分别存入MAX单元和MIN单元中。
答:
DATASEGMENT
BUFDB56H,0D5H,90H,12H……;50个数
MAXDBDUP(?
)
MINDBDUP(?
)
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
STARTMOVAX,DATA
MOVDS,AX
LEASI,BUF
MOVCX,50
MOVAL,[SI]
NEXT2:
CMPAL,[SI+1]
JAENEXT1
XCHGAL,[SI]
NEXT1:
INCSI
LOOPNEXT2
MOVMAX,AL
LEASI,BUF
MOVCX,50
MOVAL,[SI]
NEXT4:
CMPAL,[SI+1]
JLENEXT3
XCHGAL,[SI]
NEXT3:
INCSI
LOOPNEXT4
MOVMIN,AL
MOVAH,4CH
INT21H
DATAENDS
ENDSTART
4.7编写程序,对从内存单元BUFFER开始的100个字求和,并把结果存入程序中的变量SUM中。
答:
DATASEGMENT
BUFFERDW89ADH,8012H,45EFH,…….;100个字
SUMDWDUP(?
)
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
STARTMOVAX,DATA
MOVDS,AX
LEASI,BUFFER
MOVCX,100
CLC
MOVAX,[SI]
NEXT1:
ADCAX,[SI+2]
INCSI
INCSI
LOOPNEXT1
LOOP:
MOVSUM,AX
MOVAH,4CH
INT21H
DATAENDS
ENDSTART
4.8子程序的参数传递有哪些方法?
请简单比较。
答:
子程序参数传递方法包括:
利用寄存器传递参数、约定存储单元传递参数和利用堆栈传递参数。
由于CPU中的寄存器在任何程序中都是“可见”的,一个程序对某寄存器赋值后,在另一个程序中就能够直接使用,所以,用寄存器来传递参数最直接、简便,也是最常用的参数传递方式。
但由于CPU中寄存器的个数和容量都是有限的,所以该方法适用于传递较少的参数信息。
主程序与子程序之间可利用约定的一组存储单元来传递参数。
在调用子程序时,当需要向子程序传递大量数据时,因受到寄存器容量的限制,不能采用寄存器传递参数的方式,而要改用约定存储单元的传送方式。
这种方法适于参数较多的情况。
由于堆栈具有先进后出、后进先出的特性,所以多重调用中各重参数的层次很分明,很适于参数多且子程序有嵌套、递归调用的情况。
通常情况下用堆栈传入口参数,用寄存器传出口参数。
4.9统计以MSG开始的字符串中数字的个数。
设该字符串的首地址用DS:
DX来指定,以$为结束标志。
答:
DATASEGMENT
MSGDB‘SADa567868879hlcSKx8664….$’
SUNDBDUP(?
)
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
STARTMOVAX,DATA
MOVDS,AX
LEADX,MSG
XORBL,BL
NEXT2:
MOVAL,[DX]
CMPAL,’$’
JZLOOP
CMPAL,30H
JLNEXT1
CMPAL,39H
JANEXT1
INCBL
NEXT1:
INCDX
JMPNEXT2
LOOP:
MOVSUN,BL
MOVAH,4CH
INT21H
DATAENDS
ENDSTART
4.10将0~9的数字转换成所要求的密码。
明确和密码的关系:
0123456789
2854397106
答:
DATASEGMENT
BUFFER1DB0,1,2,3,4,5,6,7,8,9
BUFFER1DB10DUP(?
)
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
STARTMOVAX,DATA
MOVDS,AX
LEABX,BUFFER1
LEASI,BUFFER2
MOVCX,10
MOVAL,0
NEXT:
XLAT
MOV[SI],AL
INCAL
INCSI
LOOPNEXT
MOVAH,4CH
INT21H
DATAENDS
ENDSTART
4.11简述模块划分的一般原则。
答:
模块化程序设计的首要问题是合理地划分模块,这就要求将一个复杂问题进行分解,确定功能模块和接口关系。
模块划分的一般原则如下:
(1) 模块功能相对独立。
每个模块的功能要明确,大小要适中,独立性要强,交换的接口信息要少,最好只有一个入口和一个出口。
(2) 模块间的关系要明确。
各模块最好再分层,形成树型层次结构。
即上层模块可调用下层模块,下层模块可返回上层模块,反之则不然。
(3) 程序中易变化的部分与不易变化的部分要分开,形成不同的模块,这样便于软件的升级。
例如,系统软件中,通常把与CPU有关的部分分出来形成一个专门模块。
MASM汇编程序提供了两种模块划分的方法。
一种是源程序级的模块划分,MASM允许把一个大的源程序分别放在几个源程序文件中,但每个文件不能独立汇编和执行,汇编时必须通过包含伪指令(INCLUDE)将这些源程序文件结合起来,统一汇编后形成一个的目标文件,这样划分的好处是便于源程序的管理与维护,同时也利于这些文件的重复应用。
另一种模块划分是目标代码级的,每个模块可以单独编写和调试,形成若干个目标文件,最后由连接程序将这些目标文件连接起来形成一个完整的可执行文件。
通常所说的模块化程序设计就是这种方式。
4.12简述模块化程序设计的基本思想,不同模块连接应注意哪几个方面的问题。
答:
按照软件工程的思想,复杂的软件应该进行模块化设计,这样可以将一个复杂的问题分解成若干相对简单的问题,便于软件的开发和管理,同时也有利于软件质量的提高。
模块化程序设计就是将一个大的软件按功能划分为许多功能相对独立的模块,模块间按统一的规范连接,每个模块分别编写和调试,最后连接成一个完整的软件。
利用模块间连接方式开发源程序时,必须注意以下3个问题。
(1) 全局符号的使用
单个模块中使用的符号(变量、过程等)为局部符号,一个模块中定义的符号如不另加说明,均为局部符号,局部符号只能在定义它的模块中使用。
多个模块间可共同使用的符号称为全局符号。
在大型程序开发过程中,一个文件可能要利用另一个文件定义的变量或过程,为了实现这样的调用,必须将相应的变量或过程声明为全局符号。
(2) 段属性的匹配
由于各个文件独立汇编,所以子程序文件也必须在代码段中定义,同时各个文件也可以具有局部的数据变量。
采用简化段定义格式,因为默认的段名(如_TEXT)、类别(如CODE)相同,组合类型都是PUBLIC,所以只要采用相同的存储模式,很容易实现正确的调用。
(3) 模块间的参数传递问题
模块间传递参数的基本方法与子程序间的参数传递方法相似,可以用寄存器或堆栈的方法传递数据或数据缓冲区指针,当然也可以用全局变量传递参数。
4.13编写程序,将一个包含有20个有符号数据的数组arrayM分成两个数组:
正数数组arrayP和负数数组arrayN。
答:
DATASEGMENT
ARRAYMDB89H,12H,45H,…….;20个字节
ARRAYPDB20DUP(?
)
ARRAYNDB20DUP(?
)
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
STARTMOVAX,DATA
MOVDS,AX
LEASI,ARRAYM
LEADI,ARRAYP
LEABX,ARRAYN
MOVCX,20
NEXT3:
MOVAL,[SI]
ANDAL,AL
JSNEXT1
MOV[DI],AL
INCDI
JMPNEXT2
NEXT1:
MOV[BX],AL
INCBX
NEXT2:
INCSI
LOOPNEXT3
MOVAH,4CH
INT21H
DATAENDS
ENDSTART
4.14分别编写计算两个数X和Y的最小公倍数和最大公约数的子程序,并编写相应的调用程序。
4.15编写如下函数的子程序。
答:
i=0,m=N
.MODELSMALL
.STACK
.DATA
NDW5
RESULTDW?
.CODE
.STARTUP
MOVAX,N;N通过寄存器AX传递到子程序
CALLFACT;调用求N!
的子程序
MOVAX,RESULT;
.EXIT0
FACTPROC
CMPAX,0
JNEL1
MOVRESULT,1;0!
=1
JMPEXIT;
L1:
PUSHAX
DECAX
CALLFACT;求(N-1)!
POPAX
MULRESULT;计算N(N-1)!
MOVRESULT,AX
EXIT:
RET
FACTENDP
END
4.16编写子程序,把一个16位二进制数用十六进制数形式在屏幕上显示出来。
答:
.MODELSMALL
.STACK
.DATA
XDW0011110111101111
.CODE
.STARTUP
LEASI,X
MOVAX,[SI]
MOVBX,AX
CALLFACT
.EXIT0
FACTPROC
MOVCH,2
NEXT4:
ANDAH,0F0H
MOVCL,4
SHRAH,CL
CMPAH,09H
JLENEXT1
ADDAH,07H
NEXT1:
ADDAH,30H
MOVDL,AH
MOVAH,02H
INT21H
MOVAH,BH
ANDAH,0FH
CMPAH,09H
JLENEXT2
ADDAH,07H
NEXT2:
ADDAH,30H
MOVDL,AH
MOVAH,02H
INT21H
DECCH
JZNEXT3
MOVAH,BL
JMPNEXT4
NEXT3:
RET
FACTENDP
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 习题