汇编语言 第七章 子程序设计.docx

上传人:b****3 文档编号:27139677 上传时间:2023-06-27 格式:DOCX 页数:78 大小:30.91KB
下载 相关 举报
汇编语言 第七章 子程序设计.docx_第1页
第1页 / 共78页
汇编语言 第七章 子程序设计.docx_第2页
第2页 / 共78页
汇编语言 第七章 子程序设计.docx_第3页
第3页 / 共78页
汇编语言 第七章 子程序设计.docx_第4页
第4页 / 共78页
汇编语言 第七章 子程序设计.docx_第5页
第5页 / 共78页
点击查看更多>>
下载资源
资源描述

汇编语言 第七章 子程序设计.docx

《汇编语言 第七章 子程序设计.docx》由会员分享,可在线阅读,更多相关《汇编语言 第七章 子程序设计.docx(78页珍藏版)》请在冰豆网上搜索。

汇编语言 第七章 子程序设计.docx

汇编语言第七章子程序设计

第七章子程序设计

返回目录

练习题

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

NUM1DQ7654321089ABCDEFH

NUM2DQ0FEDCBA9801234567H

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

MOV

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

当前位置:首页 > 自然科学 > 物理

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

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