汇编语言 第七章 子程序设计范文文档格式.docx
《汇编语言 第七章 子程序设计范文文档格式.docx》由会员分享,可在线阅读,更多相关《汇编语言 第七章 子程序设计范文文档格式.docx(83页珍藏版)》请在冰点文库上搜索。
A.主程序调用子程序1
B.主程序调用子程序2
C.主程序调用子程序3
D.子程序1调用子程序2
10.下列叙述中属于子程序直接递归调用的是()。
A.子程序1调用子程序2
B.子程序2调用子程序3
C.子程序3调用子程序4
D.子程序4调用子程序4
11.在进行DOS功能调用前,其功能号应先送()。
A.AH寄存器B.BH寄存器C.CH寄存器D.DH寄存器
12.执行“INT10H”指令时,中断向量地址是()。
A.10HB.20HC.30HD.40H
13.执行“INT10H”指令时,其中断处理程序的入口地址存放在()。
A.10H~13HB.20H~23HC.30H~33HD.40H~43H
14.执行“INT10H”指令时,压入堆栈的内容有()。
A.PSW、CS、IPB.CS、IPC.PSW、IPD.PSW、CS
15.在进行字符串显示的DOS功能调用时,要求字符串的最后一个字符是()。
A.0B.‘0’C.‘$’D.0DH
7.4.2多项选择题
1.一般的子程序说明文件有()。
A.子程序名B.功能描述C.入口参数D.出口参数
2.在子程序的设计中,通常采用现场保护和现场恢复的方法有()。
A.寄存器法B.堆栈法C.约定单元法D.变元法
3.子程序的参数传递方法有()。
A.寄存器法B.约定单元法C.堆栈法D.变元法
4.下列叙述中属于子程序嵌套的有()。
A.子程序1调用子程序2,子程序2调用子程序3。
B.主程序调用子程序2。
C.主程序调用子程序3。
D.子程序3调用子程序4。
5.下列叙述中属于子程序递归调用的有()。
B.子程序2调用子程序3,子程序3调用子程序2。
C.子程序3调用子程序4,子程序4调用子程序3。
D.子程序3调用子程序3。
6.在执行“CALLFARPTRM”指令后,完成的操作有()。
A.CS、IP入栈B.SP+2C.SP+4D.目的地址送CS、IP
7.下列叙述正确的有()。
A.如果主程序和子程序A在同一代码段,则用“CALLA”可以实现子程序的调用。
B.如果主程序和子程序A不在同一代码段,则用“CALLA”可实现子程序的调用。
C.如果主程序和子程序A在同一代码段,则用“CALLFARPTRA”可以实现子程序的调用。
D.如果主程序和子程序A不在同一代码段,则用“CALLFARPTRA”可以实现子程序的调用。
8.下列叙述不正确的有()。
A.在子程序设计中,不论采用什么参数传递方法,须将所有寄存器的内容保护起来。
B.在子程序设计中,为了防止寄存器内容被破坏,通常将有关寄存器内容保护起来。
C.在子程序设计中,都是采用寄存器法传递参数。
D.在子程序设计中,子程序都只安排一个出口。
9.在进行字符串输入的DOS功能调用时,输入字符串缓冲区中的内容是()。
A.第一单元存放字符个数。
B.第二单元存放的是实际输入字符的个数。
C.第三单元开始存放输入字符的ASCII码。
D.最后一个单元存放回车符。
10.如果要将BUF字符缓冲区的内容显示输出,在采用DOS功能调用前,必须()。
A.将BUF字符缓冲区的段地址送DS。
B.将BUF字符缓冲区的段地址送ES。
C.将BUF字符缓冲区的偏移地址送DX。
D.将功能号9送AH寄存器。
7.4.3填空题
1.调用子程序通常用指令,返回调用程序通常用指令。
2.在子程序的设计中,通常用堆栈来保护现场和恢复现场。
而堆栈的操作原则是。
3.如果主程序和子程序在同一个代码段,则主程序调用子程序时只改变地址。
如果主程序和子程序不在同一个代码段,则主程序调用子程序时要改变地址。
4.在调用程序中调用子程序的CALL指令执行后,压人堆栈的内容是指令的下一条指令的地址。
在子程序中的RET指令将返回指令继续执行程序。
5.子程序(过程)的定义是以“过程名”开始,以“过程名”结束。
6.在调用子程序前,如果将要参加运算的数送寄存器,这种参数传递方法称为;
如果将要参加运算的数送指定的内存单元,这种参数传递方法称为;
如果将要参加运算的数压入堆栈,这种参数传递方法称为。
7.一个子程序调用另一个子程序称为;
一个子程序直接或间接调用该子程序本身称为。
8.以过程定义的子程序有两种类型的属性,他们分别是和。
9.在程序设计中,利用堆栈不仅可以保存,而且还可以保存主程序和子程序之间传递的参数,这些参数既可以是,也可以是。
10.在程序的执行过程中,近程调用时CALL指令执行完后压入堆栈的内容是字节,远程调用时CALL指令执行完后压入堆栈的内容是字节。
11.在编制子程序时,的使用是十分频繁的,它不仅可以用来保存返回的地址,而且还可以用来存放主程序与子程序之间传递的。
12.子程序的正确执行是由主程序中的指令和子程序的指令来完成的。
13.在进行“INT45H”功能调用时,其中断类型号为,调用的功能号应送。
14.DOS系统功能调用是根据中断类型号从中断向量表中取中断处理程序的入口地址。
每一个中断处理程序的入口地址占用内存字节,其中的低地址字用来存放中断处理程序的,高地址字用来存放中断处理程序的。
15.中断向量表占用内存字节,它的物理地址范围是。
16.在DOS系统功能调用中,01号功能调用表示,它的出口参数在中。
02号功能调用表示,它的入口参数在中。
17.在DOS系统功能调用中,要实现字符串显示输出应使用号功能调用,要实现字符串输入应使用号功能调用。
18.在进行字符串输入的DOS系统功能时,如果键盘输入字符“345A”后按回车键,则在键盘输入缓冲区的第二单元的值是,在第三到第七单元的值依次是。
19.在进行字符串显示输出的DOS系统功能时,要求输出字符串以结尾。
20.在进行DOS功能调用时,压入堆栈的内容是。
7.4.4简答题
1.简述在程序设计中,采用子程序结构有哪些优点?
2.简述过程的定义与子程序的定义有何区别?
3.简述一个完整的子程序结构应包含哪几方面的内容?
4.在子程序的设计过程中,子程序的现场保护和现场恢复通常采用哪几种方法?
哪一种方法使用较为方便?
5.调用程序和子程序之间一般使用哪几种参数的传递方法?
他们各自的特点是什么?
6.简述段内调用和段间调用时堆栈有何不同?
7.简述子程序嵌套调用的基本原理。
8.简述递归调用的基本原理。
9.简述DOS系统功能调用的使用方法。
10.简述DOS系统功能调用和中断返回时堆栈的变化?
7.4.5程序分析题
1.现有程序如下:
STACKSEGMENTSTACK‘STACK’
DW100DUP(0)
STACKENDS
DATASEGMENT
BUFDB100DUP(0)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
LEADI,BUF
L:
MOVAH,1
INT21H
CMPAL,0DH
JZEXIT
CALLSTO
JMPL
EXIT:
MOVBYTEPTR[DI],‘$’
LEADX,BUF
MOVAH,9
INT21H
MOVAH,4CH
STOPROC
CMPAL,30H
JBNEXT
CMPAL,39H
JANEXT
MOV[DI],AL
INCDI
NEXT:
RET
STOENDP
CODEENDS
ENDSTART
请回答:
(1)STO子程序完成的功能是什么?
(2)该程序完成的功能是什么?
2.现有程序如下:
BUF1DB100DUP(?
)
BUF2DB200,0,200DUP(0)
EQDB‘两个字符串相等!
$’
NEQDB‘两个字符串不相等!
FLAGDB0
MOVEX,AX
LEADX,BUF2
MOVAH,0AH
MOVCX,100
LEASI,BUF1
LEADI,BUF2+2
CALLSCMP
CMPFLAG,0
JZN
LEADX,EQ
MOVAH,9
JMPEXIT
N:
LEADX,NEQ
SCMPPROC
PUSHAX
MOVAH,[DI-1]
MOVAL,9
MOVAH,0
CMPAX,CX
JZR
CLD
CMPSB
JNZR
MOVFLAG,0FFH
JMPR1
R:
MOVFLAG,0
R1:
POPAX
RET
SCMPENDP
(1)SCMP子程序完成的功能是什么?
3.现有程序如下:
BUFDB20
CDB4
MOVBL,C
MOVSI,BUF
L1:
PUSHSI
CALLSUBP1
CALLSUBP2
POPSI
INCSI
DECBL
JNZL1
SUBP1PROC
PUSHDX
L2:
MOVDL,20H
MOVAH,2
DECSI
JNZL2
POPDX
POPAX
SUBP1ENDP
SUBP2PROC
PUSHAX
PUSHDX
MOVCX,8
L3:
MOVDL,‘*’
LOOPL3
MOVDL,0DH
MOVDL,0AH
SUBP2ENDP
(1)SUBP1子程序完成的功能是什么?
(2)SUBP2子程序完成的功能是什么?
(3)该程序完成的功能是什么?
4.现有程序如下:
ADB30
BDB9
CDW5
MOVCX,C
MOVBH,B
MOVBL,A
PUSHBX
POPBX
INCBL
SUBBH,2
LOOPL1
DECBH
JNZL3
5.现有程序如下:
STACKSEGMENTSTACK‘STACK’
DW100DUP(0)
STACKENDS
BUF1DB0E5H,01H,73H,34H,3AH,0D5H
C1=$-BUF1
BUF2DB22H,12H,67H,35H,73H,0B3H
C2DB$-BUF2
DATAENDS
CODESEGMENT
ASSUMECS:
START:
MOVDS,AX
MOVAX,STACK
MOVSS,AX
LEABX,BUF1
MOVCX,C1
CALLSORT
LEABX,BUF2
MOVCX,C2
SORTPROC
PUSHSI
PUSHDI
MOVDX,CX
DECDX
MOVSI,1
L1:
MOVDI,SI
MOVAL,[BX+SI-1]
CMPAL,[BX+DI-1]
JBENEXT
XCHG[BX+DI-1],AL
MOV[BX+SI-1],AL
NEXT:
INCDI
CMPDI,CX
JBEL2
CMPSI,DX
JBEL1
POPDI
SORTENDP
CODEENDS
ENDSTART
(1)该子程序完成的功能是什么?
(2)程序执行完后,BUF1和BUF2的内容各是什么?
6.现有程序如下:
BUFDW20E5H,4501H,7653H,1234H,354AH,60D5H
C=($-BUF)/2
SMAXDW0
LEAAX,BUF
MOVAX,C
CALLMAX
MOVAH,4CH
MAXPROC
PUSHBP
MOVBP,SP
PUSHBX
PUSHCX
PUSHF
MOVSI,[BP+6]
MOVCX,[BP+4]
MOVBX,[SI]
DECCX
ADDSI,2
MAX1:
LODSW
CMPAX,BX
JNANEXT
XCHGAX,BX
LOOPMAX1
MOVSMAX,BX
POPF
POPCX
POPBP
RET4
MAXENDP
(2)程序执行完后,SMAX中的内容为何值?
7.现有程序如下:
STACKSEGMENTSTACK
DB100DUP(0)
DATASEGMENT
BUFDW1064H
N=($-BUF)/2
STRDB9DUP(‘’)
LEASI,BUF
MOVCX,N
MOVAX,[SI]
LEADI,STR
CALLCBD
LOOPL
CBDPROC
PUSHCX
PUSHDI
ORAX,AX
JNSPLUS
MOVBYTEPTR[DI],‘-’
NEGAX
PLUS:
MOVCX,5
MOVBX,10
MOVDX,0
DIVBX
ADDDL,30H
MOV[DI],DL
JZL2
LOOPL1
MOVBYTEPTR[DI],0DH
MOVBYTEPTR[DI],0AH
MOVBYTEPTR[DI],‘$’
POPDX
POPDI
POPCX
POPBX
CBDENDP
(2)程序执行完后,显示输出的结果是什么?
8.现有程序如下:
NUM1DQABCDEFH
NUM2DQ0FEDCBAH
RESULDT0
MOVES,AX
LEASI,NUM1
LEABX,NUM2
LEADI,RESUL
CALLAD
ADPROC
CLC
MOVCX,4
AGAIN:
LODSW
ADCAX,[BX]
STOSW
ADDBX,2
LOOPAGAIN
MOVAX,0
ADCAX,0
MOV[DI],AX
ADENDP
(2)程序执行完后,RESUL单元的内容是什么?
9.现有程序如下:
STRDB‘PLEASEINPUTSTRING(0…9):
ASCDB20,0,20DUP(0)
BCDBDB20DUP(0)
LEADX,STR
LEA