汇编语言 第七章 子程序设计范文.docx
- 文档编号:11766771
- 上传时间:2023-04-01
- 格式:DOCX
- 页数:83
- 大小:32.31KB
汇编语言 第七章 子程序设计范文.docx
《汇编语言 第七章 子程序设计范文.docx》由会员分享,可在线阅读,更多相关《汇编语言 第七章 子程序设计范文.docx(83页珍藏版)》请在冰豆网上搜索。
汇编语言第七章子程序设计范文
第七章子程序设计
返回目录
练习题
7.4.1单项选择题
1.在子程序中,如果利用堆栈保护现场,在恢复现场时,先压入堆栈的内容()。
A.先弹出堆栈B.后弹出堆栈C.不分先后弹出堆栈D.任意弹出堆栈
2.下列叙述不正确的是()。
A.在子程序中的现场保护只能用堆栈来实现。
B.在子程序中的现场保护用堆栈来实现是其中的一种方法。
C.在子程序中的现场保护可以有多种实现方法。
D.在子程序中的现场保护可以将要保护的内容送内存变量来实现。
3.下列定义子程序的是()。
A.PNAMEPROCB.PNAMEPROC
……
PNAMEENDSENDM
C.PNAMEPROCD.PNAMEPROC
……
PNAMEENDPPNAMEEND
4.子程序重定位可选在内存中的整个区域内,在进行程序设计时,子程序应采用()。
A.绝对地址B.相对地址C.逻辑地址D.物理地址
5.下列叙述不正确的是()。
A.在子程序中可以再次调用子程序。
B.在主程序中一般用跳转指令转移到子程序。
C.在子程序中一般用返回指令返回到主程序。
D.在主程序中一般用调用指令转移到子程序。
6.下列叙述正确的是()。
A.执行一条段内返回指令,先从堆栈弹出两个字节的内容,然后SP指针减2。
B.执行一条段内返回指令,先SP指针减2,然后从堆栈弹出两个字节的内容。
C.执行一条段内返回指令,先SP指针加2,然后从堆栈弹出两个字节的内容。
D.执行一条段内返回指令,先从堆栈弹出两个字节的内容,然后SP指针加2。
7.下列叙述正确的是()。
A.执行一条段间调用指令,先将CS、IP的内容压栈,然后将目的地址送CS和IP。
B.执行一条段间调用指令,先将目的地址送CS和IP,然后将CS、IP的内容压栈。
C.执行一条段间调用指令,先将CS、IP的内容压栈,然后SP指针加2。
D.执行一条段间调用指令,先将CS、IP的内容压栈,然后SP指针减2。
8.下列叙述不正确的是()。
A.在汇编语言程序中,每一个过程允许有多条RET指令。
B.在汇编语言程序中,每一个过程只允许出现一条RET指令。
C.在汇编语言程序中,每一个过程结束之前一定有一条RET指令。
D.在汇编语言程序中,以过程形式表示的代码段一定有一条RET指令存在。
9.下列叙述中属于子程序嵌套的是()。
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.下列叙述中属于子程序递归调用的有()。
A.子程序1调用子程序2,子程序2调用子程序3。
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
INT21H
STOPROC
CMPAL,30H
JBNEXT
CMPAL,39H
JANEXT
MOV[DI],AL
INCDI
NEXT:
RET
STOENDP
CODEENDS
ENDSTART
请回答:
(1)STO子程序完成的功能是什么?
(2)该程序完成的功能是什么?
2.现有程序如下:
STACKSEGMENTSTACK‘STACK’
DW100DUP(0)
STACKENDS
DATASEGMENT
BUF1DB100DUP(?
)
BUF2DB200,0,200DUP(0)
EQDB‘两个字符串相等!
$’
NEQDB‘两个字符串不相等!
$’
FLAGDB0
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVEX,AX
MOVAX,STACK
MOVSS,AX
LEADX,BUF2
MOVAH,0AH
INT21H
MOVCX,100
LEASI,BUF1
LEADI,BUF2+2
CALLSCMP
CMPFLAG,0
JZN
LEADX,EQ
MOVAH,9
INT21H
JMPEXIT
N:
LEADX,NEQ
MOVAH,9
INT21H
EXIT:
MOVAH,4CH
INT21H
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
CODEENDS
ENDSTART
请回答:
(1)SCMP子程序完成的功能是什么?
(2)该程序完成的功能是什么?
3.现有程序如下:
STACKSEGMENTSTACK‘STACK’
DW100DUP(0)
STACKENDS
DATASEGMENT
BUFDB20
CDB4
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
MOVBL,C
MOVSI,BUF
L1:
PUSHSI
CALLSUBP1
CALLSUBP2
POPSI
INCSI
DECBL
JNZL1
MOVAH,4CH
INT21H
SUBP1PROC
PUSHAX
PUSHDX
L2:
MOVDL,20H
MOVAH,2
INT21H
DECSI
JNZL2
POPDX
POPAX
RET
SUBP1ENDP
SUBP2PROC
PUSHAX
PUSHDX
MOVCX,8
L3:
MOVDL,‘*’
MOVAH,2
INT21H
LOOPL3
MOVDL,0DH
MOVAH,2
INT21H
MOVDL,0AH
MOVAH,2
INT21H
POPDX
POPAX
RET
SUBP2ENDP
CODEENDS
ENDSTART
请回答:
(1)SUBP1子程序完成的功能是什么?
(2)SUBP2子程序完成的功能是什么?
(3)该程序完成的功能是什么?
4.现有程序如下:
STACKSEGMENTSTACK‘STACK’
DW100DUP(0)
STACKENDS
DATASEGMENT
ADB30
BDB9
CDW5
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
MOVCX,C
MOVBH,B
MOVBL,A
L1:
PUSHBX
CALLSUBP1
CALLSUBP2
POPBX
INCBL
SUBBH,2
LOOPL1
MOVAH,4CH
INT21H
SUBP1PROC
PUSHAX
PUSHDX
L2:
MOVDL,20H
MOVAH,2
INT21H
DECBL
JNZL2
POPDX
POPAX
RET
SUBP1ENDP
SUBP2PROC
PUSHAX
PUSHDX
L3:
MOVDL,‘*’
MOVAH,2
INT21H
DECBH
JNZL3
MOVDL,0DH
MOVAH,2
INT21H
MOVDL,0AH
MOVAH,2
INT21H
POPDX
POPAX
RET
SUBP2ENDP
CODEENDS
ENDSTART
请回答:
(1)SUBP1子程序完成的功能是什么?
(2)SUBP2子程序完成的功能是什么?
(3)该程序完成的功能是什么?
5.现有程序如下:
STACKSEGMENTSTACK‘STACK’
DW100DUP(0)
STACKENDS
DATASEGMENT
BUF1DB0E5H,01H,73H,34H,3AH,0D5H
C1=$-BUF1
BUF2DB22H,12H,67H,35H,73H,0B3H
C2DB$-BUF2
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
LEABX,BUF1
MOVCX,C1
CALLSORT
LEABX,BUF2
MOVCX,C2
CALLSORT
MOVAH,4CH
INT21H
SORTPROC
PUSHAX
PUSHDX
PUSHSI
PUSHDI
MOVDX,CX
DECDX
MOVSI,1
L1:
MOVDI,SI
INCDI
MOVAL,[BX+SI-1]
L2:
CMPAL,[BX+DI-1]
JBENEXT
XCHG[BX+DI-1],AL
MOV[BX+SI-1],AL
NEXT:
INCDI
CMPDI,CX
JBEL2
INCSI
CMPSI,DX
JBEL1
POPDI
POPSI
POPDX
POPAX
RET
SORTENDP
CODEENDS
ENDSTART
请回答:
(1)该子程序完成的功能是什么?
(2)程序执行完后,BUF1和BUF2的内容各是什么?
6.现有程序如下:
STACKSEGMENTSTACK‘STACK’
DW100DUP(0)
STACKENDS
DATASEGMENT
BUFDW20E5H,4501H,7653H,1234H,354AH,60D5H
C=($-BUF)/2
SMAXDW0
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
LEAAX,BUF
PUSHAX
MOVAX,C
PUSHAX
CALLMAX
MOVAH,4CH
INT21H
MAXPROC
PUSHBP
MOVBP,SP
PUSHSI
PUSHAX
PUSHBX
PUSHCX
PUSHF
MOVSI,[BP+6]
MOVCX,[BP+4]
MOVBX,[SI]
DECCX
ADDSI,2
CLD
MAX1:
LODSW
CMPAX,BX
JNANEXT
XCHGAX,BX
NEXT:
LOOPMAX1
MOVSMAX,BX
POPF
POPCX
POPBX
POPAX
POPSI
POPBP
RET4
MAXENDP
CODEENDS
ENDSTART
请回答:
(1)该子程序完成的功能是什么?
(2)程序执行完后,SMAX中的内容为何值?
7.现有程序如下:
STACKSEGMENTSTACK
DB100DUP(0)
STACKENDS
DATASEGMENT
BUFDW1064H
N=($-BUF)/2
STRDB9DUP(‘’)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
LEASI,BUF
MOVCX,N
L:
MOVAX,[SI]
LEADI,STR
CALLCBD
ADDSI,2
LOOPL
MOVAH,4CH
INT21H
CBDPROC
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHDI
PUSHDI
ORAX,AX
JNSPLUS
MOVBYTEPTR[DI],‘-’
INCDI
NEGAX
PLUS:
MOVCX,5
MOVBX,10
L1:
MOVDX,0
DIVBX
ADDDL,30H
MOV[DI],DL
INCDI
ORAX,AX
JZL2
LOOPL1
L2:
MOVBYTEPTR[DI],0DH
INCDI
MOVBYTEPTR[DI],0AH
INCDI
MOVBYTEPTR[DI],‘$’
POPDX
MOVAH,9
INT21H
POPDI
POPDX
POPCX
POPBX
POPAX
RET
CBDENDP
CODEENDS
ENDSTART
请回答:
(1)该子程序完成的功能是什么?
(2)程序执行完后,显示输出的结果是什么?
8.现有程序如下:
STACKSEGMENTSTACK‘STACK’
DW100DUP(0)
STACKENDS
DATASEGMENT
NUM1DQABCDEFH
NUM2DQ0FEDCBAH
RESULDT0
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVAX,STACK
MOVSS,AX
LEASI,NUM1
LEABX,NUM2
LEADI,RESUL
CALLAD
MOVAH,4CH
INT21H
ADPROC
PUSHAX
PUSHCX
PUSHF
CLC
CLD
MOVCX,4
AGAIN:
LODSW
ADCAX,[BX]
STOSW
ADDBX,2
LOOPAGAIN
MOVAX,0
ADCAX,0
MOV[DI],AX
POPF
POPCX
POPAX
RET
ADENDP
CODEENDS
ENDSTART
请回答:
(1)该子程序完成的功能是什么?
(2)程序执行完后,RESUL单元的内容是什么?
9.现有程序如下:
STACKSEGMENTSTACK‘STACK’
DW100DUP(0)
STACKENDS
DATASEGMENT
STRDB‘PLEASEINPUTSTRING(0…9):
$’
ASCDB20,0,20DUP(0)
BCDBDB20DUP(0)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
LEADX,STR
MOVAH,9
INT21H
LEA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 第七章 子程序设计范文 第七 子程序 设计 范文