58
ch7 1 安安安安安安 安安安安安安安安安 安安安 安安安安安 《》 7 7 安 7 安 安安安安安安安安

第 7 章 高级汇编语言技术

Embed Size (px)

DESCRIPTION

第 7 章 高级汇编语言技术. 第 7 章. 7.1 宏汇编. 什么是宏? 宏(或宏指令)是源程序中一段有独立功能的程序代码, 只需定义一次,可以多次调用。. 为什么使用宏汇编? 在编制汇编语言程序过程中,有些功能程序段需要多次重复使用,所不同的只是参与操作的操作数。 为了减少编程的工作量,通常采用两种方法 : ①将程序段编写为独立的子程序 ② 将 程序段定义成宏 大家想一下 子程序有什么优缺点?. 7.1.1 宏定义、宏调用和宏展开. 1. 宏定义 用伪指令 MACRO/ENDM 实现,其语句格式是: - PowerPoint PPT Presentation

Citation preview

Page 1: 第 7 章 高级汇编语言技术

ch7 1

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

第 7章 高级汇编语言技术

Page 2: 第 7 章 高级汇编语言技术

ch7 2

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

7.1 宏汇编

为什么使用宏汇编? 在编制汇编语言程序过程中,有些功能程序段需要多次重复使用,所不同的只是参与操作的操作数。 为了减少编程的工作量,通常采用两种方法: ①① 将程序段编写为独立的子程序 将程序段编写为独立的子程序 ② ② 将将程序段定义成宏程序段定义成宏 大家想一下 子程序有什么优缺点?

•什么是宏? 宏(或宏指令)是源程序中一段有独立功能的宏(或宏指令)是源程序中一段有独立功能的程序代码,程序代码,只需定义一次,可以多次调用。只需定义一次,可以多次调用。

第第 77章章

Page 3: 第 7 章 高级汇编语言技术

ch7 3

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

1. 宏定义 用伪指令 MACRO/ENDMMACRO/ENDM 实现,其语句格式是:

宏指令名 MACRO [ 形参形参 11 ,形参,形参 22 ,…,形参,…,形参

nn]

┇ 宏定义体

ENDM

7.1.1 7.1.1 宏定义、宏调用和宏展开宏定义、宏调用和宏展开

Page 4: 第 7 章 高级汇编语言技术

说明• 宏指令名宏指令名是该宏定义的名称。调用时使用是该宏定义的名称。调用时使用宏指令名宏指令名对该宏定义进行调用对该宏定义进行调用。

• 宏指令符合标识符规定。宏指令符合标识符规定。宏指令名不能重复,并且宏指令名不能重复,并且指令的第一个字符必须是字母。但可以和源程序中的指令的第一个字符必须是字母。但可以和源程序中的其他变量、标号、指令、伪指令名相同其他变量、标号、指令、伪指令名相同,在这种情况,在这种情况下宏指令的优先级最高下宏指令的优先级最高。。

• MACROMACRO 必须与必须与 ENDMENDM 成对出现。成对出现。 MACROMACRO 标识宏定义标识宏定义的开始的开始 。 。 • 形式参数(即形参,也称哑元、虚参)是可选项,形式参数(即形参,也称哑元、虚参)是可选项,宏可以不带参数;带参数时,多个形参间用逗号分隔宏可以不带参数;带参数时,多个形参间用逗号分隔。

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

Page 5: 第 7 章 高级汇编语言技术

2. 宏调用宏调用的格式为: 宏指令名宏指令名 [[ 实参实参 11 ,实参,实参 22 ,…,实参,…,实参 n]n]

3. 宏展开 宏展开就是宏定义体取代源程序中的宏指令名,宏展开就是宏定义体取代源程序中的宏指令名,

而且用实元取代哑元。而且用实元取代哑元。汇编源程序时,宏汇编汇编源程序时,宏汇编程序将对每条宏指令语句进行宏展开,用实参程序将对每条宏指令语句进行宏展开,用实参替代相应的形参,对宏体目标代码作相应改变。替代相应的形参,对宏体目标代码作相应改变。

说明:实参可以是常数、寄存器、存储单元、地址表达式、指令的操作码或者是操作码的一部分。

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

Page 6: 第 7 章 高级汇编语言技术

Call Q

Call Q

Call Q

Q:

RET

子程序 Q

Q A,B

Q C,D

Q E,F

Q MACRO X,Y

ENDM

主程序主程序

主程序主程序 主程序主程序

展开

子程序调用和宏调用的工作方式

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

Page 7: 第 7 章 高级汇编语言技术

用一个例子来说明宏定义、宏调用和宏展开的情况用一个例子来说明宏定义、宏调用和宏展开的情况

例:将两个例:将两个 1616 位数相加,结果存入位数相加,结果存入 1616 位 位 RESULT RESULT 单元中 。单元中 。

;对两数相加功能进行宏定义 ;对两数相加功能进行宏定义

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

Page 8: 第 7 章 高级汇编语言技术

BCDADD BCDADD MACROMACRO VARX VARX ,, VARYVARY ,, RESULTRESULT MOV ALMOV AL ,, VARX VARX ADD ALADD AL ,, VARYVARY

MOV RESULTMOV RESULT ,, ALAL MOV ALMOV AL ,, VARXVARX ++ 11 ADC ALADC AL ,, VARYVARY ++ 11 MOV RESULTMOV RESULT ++ 11 ,, AL AL ENDMENDM

DATA SEGMENTDATA SEGMENT A1 DW 1234HA1 DW 1234H A2 DW 5678HA2 DW 5678H A3 DW A3 DW ?? B1 DW 1357HB1 DW 1357H B2 DW 2468HB2 DW 2468H B3 DW B3 DW ??DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENT ASSUME CSASSUME CS :: CODECODE ,, DSDS :: DATADATASTART:PUSH DSSTART:PUSH DS MOV AXMOV AX ,, 00 PUSH AXPUSH AX

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

Page 9: 第 7 章 高级汇编语言技术

MOV AXMOV AX ,, DATADATA MOV DSMOV DS ,, AXAX BCDADD A1BCDADD A1 ,, A2A2 ,, A3A3 ;宏;宏调用调用 BCDADD B1BCDADD B1 ,, B2B2 ,, B3B3 ;;再次宏调用再次宏调用 RETRETCODE ENDSCODE ENDS END STARTEND START

经宏展开后:经宏展开后: PUSH DSPUSH DS MOV AXMOV AX ,, 00 PUSH AXPUSH AX MOV AXMOV AX ,, DATADATA MOV DSMOV DS ,, AXAX

1 MOV ALMOV AL ,, A1A1 1 ADD AL1 ADD AL ,, A2A21 MOV A31 MOV A3 ,, ALAL1 MOV AL1 MOV AL ,, A1A1 ++ 111 ADC AL1 ADC AL ,, A2A2 ++ 1111 MOV A3MOV A3 ++ 11 ,, ALAL

1 MOV AL1 MOV AL ,, B1 B1

1 ADD AL1 ADD AL ,, B2 B2 1 MOV B31 MOV B3 ,, ALAL1 MOV AL1 MOV AL ,, B1B1 ++ 1111 ADC ALADC AL ,, B2B2 ++ 11

11 MOV B3MOV B3 ++ 11 ,, ALAL

• 宏汇编程序在所展开的宏汇编程序在所展开的指令前标识以指令前标识以‘‘ 1’1’ 号以号以示区别。较早的版本用示区别。较早的版本用‘‘ ++’’

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

Page 10: 第 7 章 高级汇编语言技术

7.1.2 7.1.2 宏定义中的参数:宏定义中的参数:

1 1 宏定义可以无参宏定义可以无参数数 saveregsavereg macro macro

push axpush ax

push bxpush bx

push cxpush cx

push sipush si

endmendm

2 2 参数可以是操作码参数可以是操作码 a macro a macro p1, p1, p2p2,,p3p3

mov mov ax,p1ax,p1

p2p2 p3p3

endmendm

调用调用: : a word_ var ,a word_ var ,incinc,,axax

展开:展开:11 mov mov ax,word_var ax,word_var

1 1 incinc axax

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

Page 11: 第 7 章 高级汇编语言技术

ch7 11

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

3 参数可以是操作码或操作数的一部分,但在宏定义体中必须使用分隔符 &,即 &是操作符,在宏定义中可作为形参的前缀,展开时把 &前后的两个符号连接起来,形成操作码、操作数或字符串。 &只能出现在宏定义中。例 宏定义例 宏定义::SHIFT MARCO XSHIFT MARCO X ,, YY ,, ZZ MOV CLMOV CL ,, XX SS&&Z YZ Y ,, CLCL ENDMENDM形参形参 ZZ 是操作码的一部分。宏汇编中规定,若宏定义体中的形参没有适当的是操作码的一部分。宏汇编中规定,若宏定义体中的形参没有适当的分隔符,就不被当作形参,调用时也不会被实参代替。分隔符,就不被当作形参,调用时也不会被实参代替。 上例被调用时:上例被调用时: SHIFT 4SHIFT 4 ,, CLCL ,, ALAL

SHIFT 6SHIFT 6 ,, BXBX , , ARAR则宏展开时的目标代码: 则宏展开时的目标代码: 1 MOV CL1 MOV CL ,, 44 1 1 SALSAL AL AL ,, CLCL

1 MOV CL1 MOV CL ,, 66 1 1 SSARAR BX BX ,, CLCL

Page 12: 第 7 章 高级汇编语言技术

ch7 12

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

例例

fo macro fo macro p1p1

jmp jmp tata&&p1p1

endmendm

宏调用:宏调用:

fo fo word_varword_var

宏展开:宏展开:

1 Jmp 1 Jmp tataword_varword_var

如果这样:如果这样:

fo macro p1fo macro p1

jmp tap1jmp tap1

endmendm

宏调用:宏调用:

fo word_varfo word_var

宏展开:宏展开:

1 Jmp1 Jmp ??

Page 13: 第 7 章 高级汇编语言技术

ch7 13

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

4 伪操作 %不能出现在形参的前面,通常用在宏调用中,将跟在它后面的表达式的值转换成以当前基数下的数,在宏展开时,用转换后的值代替形参。

例 宏定义例 宏定义::MAKER MAKER MACROMACRO COUNT COUNT ,, STRSTR MAKER&COUNT DB STRMAKER&COUNT DB STR ENDMENDM

ERRMA ERRMA MACROMACRO TEXT TEXT CNTR=CNTRCNTR=CNTR ++ 11 MAKERMAKER %CNTR %CNTR ,, TEXTTEXT ENDMENDM

经宏调用:经宏调用:

Page 14: 第 7 章 高级汇编语言技术

ch7 14

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

CNTR=0CNTR=0

ERRMA ‘SYNTAX ERROR’ERRMA ‘SYNTAX ERROR’

┇ ┇ ERRMA ‘INVALID OPERAND’ERRMA ‘INVALID OPERAND’

┇ ┇宏展开: 宏展开: ┇ ┇ 2 MAKER1 DB ‘SYNTAX ERROR’2 MAKER1 DB ‘SYNTAX ERROR’

┇ ┇ 2 MAKER2 DB ‘INVALID OPERAND’2 MAKER2 DB ‘INVALID OPERAND’

┇ ┇

Page 15: 第 7 章 高级汇编语言技术

ch7 15

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章 7.1.3 7.1.3 伪指令 伪指令 LOCAL LOCAL

宏定义体内可以使用标号。对于使用了标号的宏宏定义体内可以使用标号。对于使用了标号的宏定义,若多次调用,势必产生标号的多重定义,汇编定义,若多次调用,势必产生标号的多重定义,汇编时出错。解决这一问题可使用伪指令时出错。解决这一问题可使用伪指令 LOCALLOCAL ,其一般,其一般格式为:格式为: LOCAL LOCAL 局部标号局部标号 11 ,局部标号,局部标号 22 ,…,…

宏汇编程序将为标号分别生成格式为宏汇编程序将为标号分别生成格式为“??“?? XXXX”XXXX”的唯一的符号以代替各局部标号。的唯一的符号以代替各局部标号。 XXXXXXXX 代表四位十六代表四位十六进制数进制数 00000000 ~~ FFFFFFFF 。这样,在汇编源程序中,避免。这样,在汇编源程序中,避免了多次宏调用时生成的标号重复。了多次宏调用时生成的标号重复。•注意注意:: LOCALLOCAL 伪操作只能用在宏定义体内,而且必须伪操作只能用在宏定义体内,而且必须是是 MACROMACRO 伪操作后的伪操作后的第一个第一个语句,在语句,在 MACROMACRO 与与 LOCALLOCAL不能出现注释和分号标志。不能出现注释和分号标志。

Page 16: 第 7 章 高级汇编语言技术

ch7 16

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

例 定义取绝对值的宏指令如下:例 定义取绝对值的宏指令如下:

ABS ABS MACROMACRO OPS OPS LOCAL PLUSLOCAL PLUS CMP OPSCMP OPS ,, 00 JGE JGE PLUSPLUS NEG OPSNEG OPS PLUSPLUS :: MOV AXMOV AX ,, OPSOPS ENDMENDM

宏调用宏调用:: ABS CXABS CX MOV BXMOV BX ,, AXAX ABS DXABS DX

宏展开后的指令为宏展开后的指令为::

11 CMP CXCMP CX ,, 001 JGE1 JGE ???? 000000001 NEG CX1 NEG CX11 ???? 00000000 :: MOV AXMOV AX ,, CCXX

MOV BXMOV BX ,, AXAX

1 CMP DX1 CMP DX ,, 001 JGE1 JGE ???? 000000111 NEG DX1 NEG DX11 ???? 00010001 :: MOV AXMOV AX ,,DX DX

Page 17: 第 7 章 高级汇编语言技术

7.1.4 7.1.4 在宏定义内使用宏在宏定义内使用宏宏定义中允许使用宏调用,宏定义中允许使用宏调用,限制条件是:必须先定义限制条件是:必须先定义

dif macro x , ydif macro x , y

mov ax,xmov ax,x

sub ax ,ysub ax ,y

endmendm

difsqr macro opr1,opr2,resultdifsqr macro opr1,opr2,result

push dxpush dx

push axpush ax

dif opr1,opr2dif opr1,opr2

mov result,axmov result,ax

pop axpop ax

pop dxpop dx

endmendm

difsqr var1,var2,var3 difsqr var1,var2,var3 调用调用

宏展开宏展开

1 push dx1 push dx

1 push ax1 push ax

2 mov ax,var12 mov ax,var1

2 sub ax,var22 sub ax,var2

1 mov var3,ax1 mov var3,ax

1 pop ax1 pop ax

1 pop dx1 pop dx

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

Page 18: 第 7 章 高级汇编语言技术

7.1.5 7.1.5 列表伪操作列表伪操作

MasmMasm 提供了提供了 .xall , .lall, sall.xall , .lall, sall 来控制汇编清单来控制汇编清单中宏展开的列出情况中宏展开的列出情况

.xall.xall 为为默认情况默认情况,它指示清单中,它指示清单中只列出产生目标 只列出产生目标 代码的宏展开 代码的宏展开;;

.lall.lall 列出列出包括注释在内的所有宏展开包括注释在内的所有宏展开;;

.sall .sall 则则不列出任何信息不列出任何信息;;

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

Page 19: 第 7 章 高级汇编语言技术

如果程序中定义了如果程序中定义了很多宏很多宏,可以把这,可以把这些宏组合起来建立一个独立的文件,这个只包些宏组合起来建立一个独立的文件,这个只包含若干个宏定义的文件称为宏库含若干个宏定义的文件称为宏库。扩展名是。扩展名是 mamac c 或或 incinc 来表示。来表示。当需要使用宏库中的某些宏当需要使用宏库中的某些宏定义时,只需要在该程序的开始用定义时,只需要在该程序的开始用 INCLUDEINCLUDE 语语句说明句说明

INCLUDEINCLUDE C:\ C:\MACRO.MACMACRO.MAC

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

7.1.6 7.1.6 宏库的建立与调用宏库的建立与调用

Page 20: 第 7 章 高级汇编语言技术

宏汇编程序提供了伪操作宏汇编程序提供了伪操作 PURGEPURGE ,用来在适当的,用来在适当的时候取消宏定义。时候取消宏定义。

PURGEPURGE 伪指令的一般格式是:伪指令的一般格式是: PURGE PURGE 宏定义名宏定义名 [[ ,…,… ]] 方括号表示方括号表示 PURGEPURGE 可以取消多个宏定义,宏名之可以取消多个宏定义,宏名之间用逗号隔开间用逗号隔开。。如如宏定义:宏定义: SUBSUB MACROMACRO VARX VARX ,, VARYVARY ,, RESULTRESULT ┇ ┇ ENDMENDM宏调用:宏调用: SUB XSUB X ,, YY ,, ZZ PURGE SUBPURGE SUB

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

7.1.7 7.1.7 伪指令伪指令 PURGEPURGE

Page 21: 第 7 章 高级汇编语言技术

7.2 重复汇编

其一般格式为:其一般格式为: REPT REPT 表达式表达式 ┇ ┇ (重复块 )(重复块 ) ENDMENDM 其中,其中, REPTREPT 和和 ENDMENDM 必须成对出现,两者间的重复块是必须成对出现,两者间的重复块是要重复汇编的部分。要重复汇编的部分。表达式的值用来表示重复块的重复汇编表达式的值用来表示重复块的重复汇编次数次数。。重复伪操作不一定要用在宏定义体内重复伪操作不一定要用在宏定义体内。。

7.2.1 7.2.1 定重复伪指令定重复伪指令 REPT REPT

有时汇编语言程序要连续地重复完成相同或者几乎完全有时汇编语言程序要连续地重复完成相同或者几乎完全相同的一组代码,这时可用重复汇编。相同的一组代码,这时可用重复汇编。

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

Page 22: 第 7 章 高级汇编语言技术

例 有下列语句例 有下列语句:: NUM=0NUM=0 REPT 10REPT 10 NUM=NUMNUM=NUM ++ 11 DB NUMDB NUM ENDMENDM 汇编后,将数据汇编后,将数据 11 ,, 22 ,, 33 ,…,,…, 1010 分配给十个连续分配给十个连续的字节单元的字节单元::11 DB 1 DB 111 DB 2 DB 211 DB 3 DB 3 ┇ ┇11 DB 10 DB 10

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

Page 23: 第 7 章 高级汇编语言技术

7.2.2 7.2.2 不定重复伪指令不定重复伪指令 IRP IRP

其一般格式为:其一般格式为: IRP IRP 形参,〈参数形参,〈参数 11 ,参数,参数 22 ,…〉,…〉 ┇ ┇ (重复块)(重复块) ENDMENDM 此伪指令重复执行重复块中所包含的语句,重此伪指令重复执行重复块中所包含的语句,重复的次数由参数表中的参数个数决定。复的次数由参数表中的参数个数决定。重复汇编时,重复汇编时,依次用参数表中的参数取代形参,直到表中的参数依次用参数表中的参数取代形参,直到表中的参数用完为止。用完为止。参数表中的参数必须用两个三角号括起参数表中的参数必须用两个三角号括起来,参数可以是常数、符号、字符串等,各参数间来,参数可以是常数、符号、字符串等,各参数间用逗号隔开。 用逗号隔开。

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

Page 24: 第 7 章 高级汇编语言技术

ch7 24

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

例 多次将例 多次将 AXAX 、、 BXBX 、、 CXCX 、、 DXDX 寄存器内容压栈,寄存器内容压栈,宏定义如下:宏定义如下:PUSHR PUSHR MACROMACRO IRP REGIRP REG ,〈,〈 AXAX ,, BXBX ,, CXCX ,, DXDX 〉〉 PUSH REGPUSH REG ENDMENDM ENDMENDM

汇编后:汇编后:11 PUSH AX PUSH AX11 PUSH BX PUSH BX11 PUSH CX PUSH CX1 PUSH DX1 PUSH DX

Page 25: 第 7 章 高级汇编语言技术

ch7 25

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

7.2.3 7.2.3 不定重复字符伪指令不定重复字符伪指令 IRPC IRPC

其语句格式为:其语句格式为: IRPC IRPC 形参,字符串(或〈字符串〉)形参,字符串(或〈字符串〉) ┇ ┇ (重复块)(重复块) ENDMENDM 此伪指令重复执行重复块中的语句,此伪指令重复执行重复块中的语句,重复汇编重复汇编的次数等于字符串中字符的个数的次数等于字符串中字符的个数。每次重复执行时,。每次重复执行时,依次用字符串中的一个字符取代形参,直到字符串依次用字符串中的一个字符取代形参,直到字符串结束。可见结束。可见 IRPCIRPC 伪指令与伪指令与 IRPIRP 伪指令类似,只是伪指令类似,只是 IRIRPCPC 用字符串(其三角括号可以有也可以无)代替了用字符串(其三角括号可以有也可以无)代替了IRPIRP伪指令中的参数表。伪指令中的参数表。

Page 26: 第 7 章 高级汇编语言技术

ch7 26

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

例:例:Irpc x ,01234567Irpc x ,01234567

Db x+1Db x+1

EndmEndm

汇编后:汇编后:11 Db 1Db 1

1 Db 2 1 Db 2

┇┇

1 Db 81 Db 8

再如:可用再如:可用 IRPCIRPC 实现:实现:PUSHR MACROPUSHR MACRO IRPC REGIRPC REG ,, ABCDABCD PUSH REGPUSH REG&&XX ENDMENDM ENDMENDM

同样,汇编后也可得到:同样,汇编后也可得到:11 PUSH AX PUSH AX11 PUSH BX PUSH BX11 PUSH CX PUSH CX11 PUSH DX PUSH DX

Page 27: 第 7 章 高级汇编语言技术

ch7 27

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

7.3 7.3 条件汇编条件汇编 汇编程序能根据条件把一段源程序包括在汇编语言程序内的或汇编程序能根据条件把一段源程序包括在汇编语言程序内的或排除在外,这里就用到条件伪操作。条件伪操作的一般格式是:排除在外,这里就用到条件伪操作。条件伪操作的一般格式是:

Ifxx argumentIfxx argument

┇ ┇ ;; 自变量满足条件汇编此块自变量满足条件汇编此块

[ELSE][ELSE]

┇ ┇ ;自变量不满足条件汇编此块;自变量不满足条件汇编此块

ENDIFENDIF

说明:说明:汇编程序在对源程序汇编时,汇编程序在对源程序汇编时,要对源程序扫描二要对源程序扫描二遍 。第一遍建立符号表 ,第二遍才把汇编语言指令翻译成遍 。第一遍建立符号表 ,第二遍才把汇编语言指令翻译成机器语言指令。机器语言指令。那么自变量必须在汇编程序第一遍扫视后就那么自变量必须在汇编程序第一遍扫视后就成为确定的数值。成为确定的数值。

Page 28: 第 7 章 高级汇编语言技术

ch7 28

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

IF expressionIF expression ; ; 汇编程序求出表达式的值,如此值不为汇编程序求出表达式的值,如此值不为 00 ,, 则 满足条件则 满足条件 ..

IFE expressionIFE expression ; ; 汇编程序求出表达式的值,如此值为汇编程序求出表达式的值,如此值为 00 ,,则 则 满足条件 满足条件 ..

例:宏指令例:宏指令 MAXMAX 把三个变元中的最大值放在把三个变元中的最大值放在 AXAX 中,而中,而且使变元数不同时产生不同的程序段。且使变元数不同时产生不同的程序段。

7.3.17.3.1

Page 29: 第 7 章 高级汇编语言技术

ch7 29

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

MAX MACRO K,A,B,CMAX MACRO K,A,B,C

LOCAL NEXT ,OUTLOCAL NEXT ,OUT

MOV AX,AMOV AX,A

IF K-1IF K-1

IF K-2IF K-2

CMP C,AXCMP C,AX

JLE NEXTJLE NEXT

MOV AX,CMOV AX,C

ENDIFENDIF

NEXT:NEXT:

CMP B,AXCMP B,AX

JLE OUTJLE OUT

MOV AX,BMOV AX,B

ENDIFENDIF

OUT:OUT:

ENDMENDM

宏调用:宏调用:MOV 1,PMOV 1,P

MOV 2,P,QMOV 2,P,Q

MOV 3,P,QMOV 3,P,Q

宏展开:宏展开: MOV 1,PMOV 1,P

11 MOV AX,PMOV AX,P

1 ??0002:1 ??0002:

MAX 2,P,QMAX 2,P,Q

11 JLE ??0000JLE ??0000

1 MOV AX,Q1 MOV AX,Q

1 ??0003:1 ??0003:

MAX 3,P,Q,RMAX 3,P,Q,R

1 MOV AX,P1 MOV AX,P

1 CMP R,AX1 CMP R,AX

1 JLE ??00041 JLE ??0004

11 MOV AX,RMOV AX,R

1 ??0004:1 ??0004:

11 CMP Q,AXCMP Q,AX

1 JLE ??00051 JLE ??0005

11 MOV AX,QMOV AX,Q

1 ??00051 ??0005

Page 30: 第 7 章 高级汇编语言技术

ch7 30

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

BRANCH MACRO X BRANCH MACRO X

IF ($-X) IF ($-X) LTLT 128 128

JMP SHORT X JMP SHORT X

ELSE ELSE

JMP NEAR PTR X JMP NEAR PTR X

ENDIF ENDIF

ENDMENDM

LAB: LAB:

MOV AX,BX MOV AX,BX

BRANCH LABBRANCH LAB

JMP SHORT LABJMP SHORT LAB

该宏要完成什么功能。 宏定义允许递归调用 power macro x,npower macro x,n sal x,1sal x,1 count=count+1count=count+1 if count-nif count-n power x,npower x,n endifendifEndmEndm宏调用:宏调用: count=0count=0 power ax,3power ax,3宏展开:宏展开:Sal ax,1Sal ax,1Sal ax,1Sal ax,1Sal ax,1Sal ax,1

Page 31: 第 7 章 高级汇编语言技术

ch7 31

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

IF1 ;IF1 ; 在汇编程序的第一遍扫视期间满足条件在汇编程序的第一遍扫视期间满足条件

IF2 ;IF2 ; 在汇编程序的第二遍扫视期间满足条件在汇编程序的第二遍扫视期间满足条件

说明:汇编程序在对包括宏库的源程序汇编时也分两次扫描,说明:汇编程序在对包括宏库的源程序汇编时也分两次扫描,第一次将宏库及程序中的宏定义登入宏定义表,第二次 扫描时第一次将宏库及程序中的宏定义登入宏定义表,第二次 扫描时进行宏扩展,形成列表文件。进行宏扩展,形成列表文件。

  大家看书上 268 页的例7 .24, 然后和 259 页的例 7.12 比较看有什么不同?

IFB<argument> ;IFB<argument> ; 如自变量为空,则满足条件如自变量为空,则满足条件

IFNB<argument> ;IFNB<argument> ; 如自变量不为空,则满足条件如自变量不为空,则满足条件

注意:自变量用“注意:自变量用“ < >”< >” 括起来括起来

7.3.27.3.2

7.3.37.3.3

Page 32: 第 7 章 高级汇编语言技术

ch7 32

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章例:宏指令 例:宏指令 GOTO L,X,REL,Y GOTO L,X,REL,Y 可以根据不同情况产生无条件可以根据不同情况产生无条件

转移指令或比较和条件转移指令。转移指令或比较和条件转移指令。宏定义:宏定义:   

GOTO MACRO L,X,REL,YGOTO MACRO L,X,REL,Y IFB <REL>IFB <REL> JMP LJMP L ELSEELSE MOV AX,XMOV AX,X CMP AX,YCMP AX,Y J&REL LJ&REL L ENDIFENDIF ENDMENDM

宏调用宏调用::                ┇┇    GOTO LOOP1,SUM,NZ,15GOTO LOOP1,SUM,NZ,15

┇┇ GOTO EXITGOTO EXIT   

宏展开:宏展开:         ┇┇

1       1        MOV AX,SUMMOV AX,SUM1 1 CMP AX,15CMP AX,1511             JNZ LOOP1JNZ LOOP1

            ┇┇1        1        JMP EXIJMP EXI

TT

Page 33: 第 7 章 高级汇编语言技术

ch7 33

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

DISP MACRO CHARDISP MACRO CHAR

IFB <CHAR>IFB <CHAR>

MOV DL,’ ‘MOV DL,’ ‘

ELSEELSE

MOV DL,CHARMOV DL,CHAR

ENDIFENDIF

MOV AH,02HMOV AH,02H

INT 21HINT 21H

ENDMENDM

宏调用:宏调用:       DISP ‘A’DISP ‘A’

DISPDISP

下面程序要完成什么样的功能?下面程序要完成什么样的功能?

Page 34: 第 7 章 高级汇编语言技术

ch7 34

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

IFDEF symbol IFDEF symbol     ;; 如符号已在程序中定义,或者用如符号已在程序中定义,或者用 extrnextrn 说说明明        该符号是在外部定义的,则满足条件。  该符号是在外部定义的,则满足条件。

IFNDEF symbol IFNDEF symbol     ;; 如符号未定义或未通过如符号未定义或未通过 EXTRNEXTRN 说明为说明为外外   部符号则满足条件  部符号则满足条件。。

7.3.47.3.4

Page 35: 第 7 章 高级汇编语言技术

ch7 35

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

divide macro divide macro devidend,divisor,quotientdevidend,divisor,quotient local cmop,outlocal cmop,out cntr=0cntr=0 ifndef ifndef dividenddividend cntr=1cntr=1 endifendif ifndef ifndef divisordivisor cntr =1cntr =1 endifendif ifndef ifndef quotientquotient cntr=1cntr=1 endifendif

if cntrif cntr exitmexitm endifendif

mov ax,dividendmov ax,dividend mov bx,divisormov bx,divisor sub cx,cxsub cx,cx comp: cmp ax,bxcomp: cmp ax,bx jb outjb out sub ax,bxsub ax,bx jnc cxjnc cx Jmp compJmp comp out : mov quotient ,cxout : mov quotient ,cx endmendm

Page 36: 第 7 章 高级汇编语言技术

ch7 36

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

MOVDIF MACRO XMOVDIF MACRO X

IFIDN <&X>,<‘B’>IFIDN <&X>,<‘B’>

REP MOVSBREP MOVSB

ELSEELSE

REP MOVSWREP MOVSW

ENDIFENDIF

ENDMENDM

宏调用:宏调用:

MOVDIF ‘B’MOVDIF ‘B’

宏展开:宏展开:

1 REP MOVSB1 REP MOVSB

IFIDN <arg-1>,<arg-2> IFIDN <arg-1>,<arg-2> ;; 如果字符串如果字符串 <arg-1><arg-1> 和字符串和字符串 <arg-2><arg-2>相相   同,则满足条件。  同,则满足条件。

IFDIF <arg-1>,<arg-2> IFDIF <arg-1>,<arg-2> ;; 如果字符串如果字符串 <arg-1><arg-1> 和字符串和字符串 <arg-2><arg-2>不           相同,则满足条件。不           相同,则满足条件。

  在格式中,两个参数必须用尖括号括起  在格式中,两个参数必须用尖括号括起

7.3.57.3.5

Page 37: 第 7 章 高级汇编语言技术

ch7 37

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

例 编写一个可用功能调用输入字符的宏定义。 例 编写一个可用功能调用输入字符的宏定义。 READCH MACRO   char

MOV AH, 1H

INT 21H

;;接受一个字符,并存入接受一个字符,并存入 ALAL 中中IFNB <char> ; 若参数 char 有实参与之对应 IFDIF   <char>, <AL> ; 若参数 char≠AL ,则把所输入字符保存到实参中  MOV   char, AL

ENDIF

ENDIF

ENDM

Page 38: 第 7 章 高级汇编语言技术

ch7 38

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

1. 1. 在在 DEBUGDEBUG 上机调试程序时,存储器地址表示为上机调试程序时,存储器地址表示为 12FA12FA :: 015F015F ,它的物理,它的物理地址是( )地址是( )。    a. 12FAH    b. 1305FH   c. 130FFH   d. 015FH2. IP2. IP 指令指针寄存器是属于( )指令指针寄存器是属于( )。    a. 通用寄存器 b. 段寄存器 c. 变址寄存器 d. 控制寄存器3. 3. 下面有语法错误的指令是( )下面有语法错误的指令是( )。    a. ADD AL , AH       b. ADD [BX+3] , AL    c. ADD AH , [DI]    d. ADD [BP+2] , DA1 ( DA1 是变量名)4. 4. 完成对完成对 DXDX 的有符号数除以的有符号数除以 22 的指令是( )的指令是( )。    a. IDIV 2    b. SAR DX , 1    c. ROR DX , 1    d. RCR DX , 15. 5. 使进位位置使进位位置 11 的指令是( )。的指令是( )。    a. CLC    b. CMC    c. STC    d. NOP

Page 39: 第 7 章 高级汇编语言技术

ch7 39

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

6. 6. 设设 AL=-15AL=-15 ,要使,要使 AL=15AL=15 应执行的指令是( )应执行的指令是( )。    a. NEG AL    b. NOT AL    c. INC AL    d. DEC AL7. 7. 在条件转移指令中,结果为负数则转移的指令是( )在条件转移指令中,结果为负数则转移的指令是( )。    a. JNS    b. JX    c. JS    d. JP8. 8. 下面的下面的 XCHGXCHG 指令中,语法正确的是( )指令中,语法正确的是( )。    a. XCHG AL , DS      b. XCHG BL , [BX]    c. XCHG AL , 0FH    d. XCHG BUF1 , BUF29. 9. 一条指令中目的操作数不允许使用的寻址方式是( )一条指令中目的操作数不允许使用的寻址方式是( )。    a. 寄存器寻址    b. 立即数寻址    c. 变址寻址   d. 寄存器间接寻址10. 10. 设设 SP=1FFEHSP=1FFEH ,执行下列指令后,,执行下列指令后, SPSP 寄存器的值是( )。寄存器的值是( )。    POPF    PUSH AX   a.. 2000H    b. 2002H    c. 1FFCH    d. 1FFEH

Page 40: 第 7 章 高级汇编语言技术

ch7 40

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

11 .. [ ][ ] 下列标号不合法的是下列标号不合法的是: A . MOV B. WANG C. F8 D. AB322 .. [ ][ ] 语句语句 DADA DW ‘AB’, ‘CD’, ‘E’DADA DW ‘AB’, ‘CD’, ‘E’ ,‘,‘ F’F’ 汇编后占用汇编后占用

的存储空间是:的存储空间是: A . 4 个字节 B. 8 个字节 C. 6 个字节 D.5 个字节33 .. [ ]PSW[ ]PSW 中使用的标志位以及其中的状态标志位、控制标志位的位中使用的标志位以及其中的状态标志位、控制标志位的位

数分别是:数分别是: A . 9 , 6 , 3 B. 9 , 8 , 1 C. 9 , 7 , 2 D. 16 , 9 , 744 .. [ ][ ] 指令指令 ADD AXADD AX , , [BX][DI][BX][DI] 中源操作数的寻址方式是:中源操作数的寻址方式是: A .段内寄存器间接寻址 B. 段间寄存器间接寻址 C .基址加变址寻址 C. 寄存器寻址55 .. [ ][ ] 在伪指令语句在伪指令语句 NUMBER DW 1234HNUMBER DW 1234H 中的中的 NUMBERNUMBER 项称为:项称为: A .标号 B. 变量 C. 伪操作符 D. 数据

Page 41: 第 7 章 高级汇编语言技术

ch7 41

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

66 .. [ ][ ] 在存储器中保留待定的在存储器中保留待定的 1010 个字节单元的伪指令语句是:个字节单元的伪指令语句是: A . NUMB EQU 10 B. NUMB DW 10 DUP(?) C. NUMB DB 10 D. NUMB DB 2 DUP( 5 DUP(?))77 .. [ ][ ] 把汇编语言源程序翻译成目标代码的程序是:把汇编语言源程序翻译成目标代码的程序是: A .编译程序 B. 解释程序 C. 汇编程序 D.连接程序88 .. [ ][ ] 下列指令中,不影响下列指令中,不影响 PSWPSW 的指令是的指令是: A. MOV B. TEST C. SAL D. CLD99 .. [ ][ ] 下列叙述不正确的是下列叙述不正确的是:            A. 立即数不能直接送段寄存器。 B. 目的操作数不能是立即数和段寄存器。 C. 不能在两个存储单元间直接传送数据。 D. 两个段寄存器之间不能直接传送数据。1010 .. [ ][ ] 汇编语言在程序设计语言家族中属于汇编语言在程序设计语言家族中属于: A. 第一代语言 B. 第二代语言 C. 第三代语言 D. 第四代语言

Page 42: 第 7 章 高级汇编语言技术

ch7 42

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

11 、设、设 DS=8225HDS=8225H ,, DI=3942HDI=3942H ,指令,指令 NEG BYTE PTR [DI]NEG BYTE PTR [DI] 操作数的物理地址操作数的物理地址是是 ( )( ) A、 85B92H B、 86192H C、 BB690H D、 12169H22 、下列寄存器组中在段内寻址时可以提供偏移地址的寄存器组是、下列寄存器组中在段内寻址时可以提供偏移地址的寄存器组是 ( ( ) ) A、 AX , BX , CX , DX B、 BX , BP , SI , DI C、 SP , IP , BP , DX D、 CS , DS , ES , SS33 、循环指令、循环指令 LOOPNZLOOPNZ 终止循环的条件是终止循环的条件是 ( )( ) 。。 A、 CX=0 ,且 Z=0 B、 CX=0 ,或 Z=1 C、 CX≠0 ,且 Z=0 D、 CX≠0 ,或 Z=144 、对寄存器、对寄存器 AXAX 的内容乘以的内容乘以 44 的正确指令序列是的正确指令序列是 ( )( ) 。。 A、 SHR AX , 1     SHR AX , 1 B、 SHL AX , 1     SHL , AX , 1 C、 ROL AX , 1     ROL AX , 1 D、 RCR AX , 1     RCR AX , 155 、保存字除法商的寄存器是、保存字除法商的寄存器是 ( )( ) 。。 A、 AX B、 AH C、 AL D、通用寄存器

Page 43: 第 7 章 高级汇编语言技术

ch7 43

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

66 、设、设 DH=10HDH=10H ,执行,执行 NEG DHNEG DH 指令后,正确的结果是指令后,正确的结果是 ( )( ) 。。 A、 DH=10H      C=1 B、 DH=0F0H     C=0 C、 DH=10H      C=0 D、 DH=0F0H     C=177 、下列传送指令中有语法错误的是、下列传送指令中有语法错误的是 ( )( ) 。。 A、MOV CS , AX B、MOV DS , AX C、MOV SS , AX D、MOV ES , AX88 、下面指令执行后,改变、下面指令执行后,改变 ALAL 寄存器内容的指令是寄存器内容的指令是 ( )( ) 。。 A、 TEST  AL , 02H B、 OR  AL , AL C、 CMP  AL , BL D、 AND  AL , BL99 、一条指令中目的操作数不允许使用的寻址方式是、一条指令中目的操作数不允许使用的寻址方式是 ( )( )A. 寄存器寻址    B. 立即数寻址    C. 变址寻址   D. 寄存器间接寻址1010 、执行下面指令序列后,结果是、执行下面指令序列后,结果是 ( )( ) 。。 MOV  AL , 82H CBWA、 AX=0FF82H B、 AX=8082H C、 AX=0082H D、 AX=0F82H

Page 44: 第 7 章 高级汇编语言技术

ch7 44

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

11 .指令.指令 JMP FAR PTR DONEJMP FAR PTR DONE 属于( )。属于( )。   参考答案为 :C   A .段内转移直接寻址   B .段内转移间接寻址   C .段间转移直接寻址   D .段间转移间接寻址22 .下列叙述正确的是( )。 .下列叙述正确的是( )。   参考答案为 :C   A .对两个无符号数进行比较采用 CMP 指令,对两个有符号数比较用 CMPS 指令   B .对两个无符号数进行比较采用 CMPS 指令,对两个有符号数比较用 CMP 指令   C .对无符号数条件转移采用 JAE/JNB 指令,对有符号数条件转移用 JGE/JNL 指令   D .对无符号数条件转移采用 JGE/JNL 指令,对有符号数条件转移用 JAE/JNB 指令33 .一个有.一个有 128128 个字的数据区,它的起始地址为个字的数据区,它的起始地址为 12ABH12ABH :: 00ABH00ABH ,请给出这个数,请给出这个数据区最末一个字单元的物理地址是( )。据区最末一个字单元的物理地址是( )。   参考答案为 :C   A . 12CSBH    B . 12B6BH    C . 12C59H    D . 12BFEH44 .在下列指令的表示中,不正确的是( )。.在下列指令的表示中,不正确的是( )。   参考答案为 :C   A . MOV AL , [BX+SI]    B . JMP SHORT DONI   C . DEC [BX]    D . MUL CL55 .在进行二重循环程序设计时,下列描述正确的是( )。.在进行二重循环程序设计时,下列描述正确的是( )。   参考答案为 :A   A .外循环初值应置外循环之外;内循环初值应置内循环之外,外循环之内   B .外循环初值应置外循环之内;内循环初值应置内循环之内   C .内、外循环初值都应置外循环之外   D .内、外循环初值都应置内循环之外,外循环之内

Page 45: 第 7 章 高级汇编语言技术

ch7 45

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章66 .条件转移指令.条件转移指令 JNEJNE 的测试条件为( )。的测试条件为( )。   参考答案为 :A

   A . ZF=0    B . CF= 0    C . ZF=1    D . CF=177 .. 8086CPU8086CPU 在基址加变址的寻址方式中,变址寄存器可以为( )。在基址加变址的寻址方式中,变址寄存器可以为( )。   参考答案为 :D   A . BX 或 CX    B . CX 或 SI    C . DX 或 SI    D . SI 或 DI88 .已知.已知 BX=2000HBX=2000H ,, SI=1234HSI=1234H ,则指令,则指令 MOV AXMOV AX ,, [BX+SI+2][BX+SI+2] 的源操作在( )的源操作在( )中中。 参考答案为 :A   A .数据段中偏移量为 3236H 的字节   B .附加段中偏移量为 3234H 的字节   C .数据段中偏移量为 3234H 的字节   D .附加段中偏移量为 3236H 的字节99 .执行如下程序.执行如下程序:     MOV AXMOV AX ,, 00         MOV BXMOV BX ,, 11         MOV CXMOV CX ,, 100100         AA :: ADD AXADD AX ,, BXBX         INC BXINC BX         LOOP ALOOP A         HLTHLT    执行后(执行后( BXBX )) == (( )。 )。   参考答案为 :C   A . 99    B . 100    C . 101    D . 1021010 .上题的程序执行后(.上题的程序执行后( AXAX )) == ( )。( )。   参考答案为 :B   A . 5000    B . 5050     C . 5100     D . 5150

Page 46: 第 7 章 高级汇编语言技术

ch7 46

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

1.1. 在堆栈段中,存放栈顶地址的寄存器是( )在堆栈段中,存放栈顶地址的寄存器是( )。A.IP B.SP C.BX D.BP 2.2. 汇编语言程序中,反映指令操作结果的标志是( )汇编语言程序中,反映指令操作结果的标志是( )。A.状态标志 B. 控制标志 C.ZF D.DF 3.3. 书写汇编语言程序时规定,对字母开头的十六进制数,其前面书写汇编语言程序时规定,对字母开头的十六进制数,其前面必须加( )。必须加( )。A.0 B.D C.B D.H 4.4. 计算机中用来存储程序、数据等信息的记忆装置是( )。计算机中用来存储程序、数据等信息的记忆装置是( )。A. 控制器 B.运算器 C.CPU D. 存储器 5.MOV 5.MOV [[ SISI ][][ BXBX ],], ALAL ,该指令中自操作数采用的寻址方式,该指令中自操作数采用的寻址方式是( )。是( )。A. 基址加变址 B. 寄存器 C. 寄存器间接 D. 寄存器相对

Page 47: 第 7 章 高级汇编语言技术

ch7 47

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

6.MUL WORD PTR[SI]6.MUL WORD PTR[SI] 指令中的乘积是存放在( )、指令中的乘积是存放在( )、 AXAX 中。中。A.CX B.BX C.DX D.SI 7.7. 汇编语言中,存放下一条将要执行的指令地址寄存器是( )。汇编语言中,存放下一条将要执行的指令地址寄存器是( )。A.SP B.AX C.DI D.IP 8.8. 在计算机中,以先进后出方式工作的存储空间是( )。在计算机中,以先进后出方式工作的存储空间是( )。A. 存储器 B.RAM C.ROM D.堆栈 9.TEST AH9.TEST AH ,, 30H30H 指令的功能与( )指令功能相类似指令的功能与( )指令功能相类似。A.AND B.CMP C.SUB D.OR 10.10. 在存储器中留在存储器中留 6060 个字的空单元的伪指令是( )。个字的空单元的伪指令是( )。A.ARRAY EQU 60 B.ARRAY DW 60C.ARRAY DB 60 DUP (?) D.ARRAY DW 60 DUP (?)

Page 48: 第 7 章 高级汇编语言技术

ch7 48

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

1.1. 用用 DEBUGDEBUG 调试汇编语言程序时,显示某指令的地址是调试汇编语言程序时,显示某指令的地址是 2F80:F4002F80:F400 ,此时段,此时段寄存器寄存器 CSCS 的值是( )。的值是( )。A.F400H B.2F80H C.F4000H D.2F800H2.2. 设设 DS=1100HDS=1100H ,(,( 12000H12000H )) =80H=80H ,(,( 12001H12001H )) =20H=20H ,(,( 12002H12002H )) =30=30HH ,执行,执行 MOV AXMOV AX , [, [ 1000H1000H ]则]则 AX=AX= ( )。( )。A.8000H B.0080H C.2080H D.8020H3.3. 下列四条指令中错误的是( )。下列四条指令中错误的是( )。A.MOV AX ,[ SI] B.MOV AX ,[ DI]C.MOV AX ,[ SI+DI] D.MOV AX ,[ SI-DI]4.4. 下列四条指令执行后不影响标志位的是( )。下列四条指令执行后不影响标志位的是( )。A.JNC NEXT B.CMP AX , BX C.SHL AX , 1 D.OR AL , AL5.5. 已知已知 AX=0001HAX=0001H ,下列四条指令执行后,不能使,下列四条指令执行后,不能使 ZF=1ZF=1 的语句是( )。的语句是( )。A.DEC AX B.SUB AX , 1 C.AND AX , 1 D.CMP AX , 1

Page 49: 第 7 章 高级汇编语言技术

ch7 49

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

6.6. 在在 8086/80888086/8088 系统中,约定用于形成堆栈段数据物理地址的寄存器有系统中,约定用于形成堆栈段数据物理地址的寄存器有( )。( )。A.SS , SP , BP B.SS , SP , BX C.DS , BX , BP D.DS , SP , BP7.7. 有指令有指令 MOV AXMOV AX , , 1234H1234H ,指令中的立即数,指令中的立即数 1234H1234H 是存储在( )。是存储在( )。A. 数据段 B. 代码段 C.附加段 D.堆栈段8.8. 要在程序中定义缓冲区要在程序中定义缓冲区 BUFBUF ,保留,保留 99 个字节存储空间的语句是( )个字节存储空间的语句是( )

。。A.BUF DW 9 B.BUF DB 9C.BUF DB 9 DUP ( ? ) D.BUF DW 9 DUP ( ? )9.9. 已知已知 AL=56HAL=56H ,, BL=34HBL=34H ,都是压缩,都是压缩 BCDBCD 码,要执行二数相加,正确的码,要执行二数相加,正确的

指令是( )。指令是( )。A.ADD AL , BL B.ADC AL , BL C.ADD BL , AL D.ADC BL ,

AL DAA DAA DAA DAA10.10. 在执行子程序段内调用在执行子程序段内调用 CALL SUBRCALL SUBR 指令后,指令后, SPSP 的值( )。的值( )。A.加 1 B.减 1 C.加 2 D.减 2

Page 50: 第 7 章 高级汇编语言技术

ch7 50

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

11 .. Intel 8086 CPUIntel 8086 CPU 的段寄存器有的段寄存器有 ______________________________________________ 。22 .. Intel 8086 CPUIntel 8086 CPU 的的 SPSP 寄存器的主要作用是寄存器的主要作用是 ____________________________________ 。33 .(.( CSCS )) =1000H=1000H ,(,( DSDS )) =2000H=2000H ,(,( ESES )) =3000H=3000H ,(,( SSSS )) =4000H=4000H ,,(( DIDI )) =a100=a100 ,操作数 ,操作数 [DI+1000H] [DI+1000H] 的寻址方式是的寻址方式是 ____________________,物理地址是 ________________ 。44 . 志寄存器中. 志寄存器中 OFOF 标志位的主要作用是标志位的主要作用是 __________________________________ 。55 .. TESTTEST 指令的功能是指令的功能是 __________________________________ 。66 .指令.指令 LEA__AXLEA__AX , , [SI+100H][SI+100H] 的具体操作是的具体操作是 ______________________________ 。77 .有符号二进制字节数可表示的数的范围是.有符号二进制字节数可表示的数的范围是 ____________________________ 。88 .执行一条.执行一条 POP__AXPOP__AX 指令后,指令后, SPSP 的内容发生的变化是的内容发生的变化是 ______________________ 。99 .. ALAL 寄存器的内容为寄存器的内容为 28H28H ,执行指令,执行指令 OR__ALOR__AL , , 33H33H 后,后, ALAL 的值为的值为 ____________ 。1010 .测试寄存器.测试寄存器 ALAL 和和 BLBL 的值是否相等而不改变其值应使用指令的值是否相等而不改变其值应使用指令 __________________ 。

Page 51: 第 7 章 高级汇编语言技术

ch7 51

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

1.1. 用户为了解决自己的问题,用汇编语言所编写的程序,称为( )用户为了解决自己的问题,用汇编语言所编写的程序,称为( )。  ①目标程序  ②源程序  ③可执行程序  ④汇编程序2.2. 某系列微机对存储器的分段,如果每一个段最多的字存储单元(某系列微机对存储器的分段,如果每一个段最多的字存储单元( 1616 位二位二进制)是进制)是 32K32K ,那么表示段内字节单元偏移地址的二进制位数应是( ),那么表示段内字节单元偏移地址的二进制位数应是( )。  ① 20位  ② 16位  ③ 15位  ④ 12位3.3. 可用作寄存器间接寻址或基址、变址寻址的地址寄存器,正确的是( )可用作寄存器间接寻址或基址、变址寻址的地址寄存器,正确的是( )。  ① AX, BX, CX, DX  ② DS, ES, CS, SS  ③ SP, BP, IP, BX   ④ SI, DI, BP, BX4.4. 用一条指令仅实现将用一条指令仅实现将 BX+SI=>AXBX+SI=>AX 的方法是( )。的方法是( )。  ① XCHG AX, [BX][SI]   ②MOV AX, [BX+SI]  ③ LEA AX, BX[SI]   ④ LEA AX, [BX][SI]5.5. 设设 SPSP 初值为初值为 2000H2000H ,执行指令“,执行指令“ PUSH AX”PUSH AX” 后,后, SPSP 的值是( )。的值是( )。  ① 1FFFH   ② 1998H   ③ 2002H   ④ 1FFEH

Page 52: 第 7 章 高级汇编语言技术

ch7 52

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

6.6. 条件转移指令条件转移指令 JBJB 产生程序转移的条件是( )产生程序转移的条件是( )。  ① CF=1   ② CF=0  ③ CF=1 和 ZF=1   ④ CF=1 和 ZF=07.7. 选用串操作指令时,错误的操作是( )。选用串操作指令时,错误的操作是( )。  ①置方向标志位  ②根据串操作指令设置重复次数并送入 CX  ③设置源操作数及目的操作数指针  ④源操作数和目的操作数都可以加段超越8.8. 设设 AL=20HAL=20H ,, SI=0500HSI=0500H ,, DS=3000HDS=3000H ,(,( 30500H30500H )) =0C0H=0C0H ,, CF=1CF=1 。执行。执行 SBBSBB

AL AL ,, [SI][SI] 后,正确的结果是( )。后,正确的结果是( )。  ① AL=5FH SF=1 CF=1    ② AL=60H SF=1 CF=0  ③ AL=5FH SF=0 CF=1    ④ AL=60H SF=0 CF=09.9. 设设 AX=1000HAX=1000H     NEG AXNEG AX     NOT AXNOT AX  执行上述指令后,正确的结果是( )。  执行上述指令后,正确的结果是( )。  ① AX=1001H  ② AX=0FFFH  ③ AX=1000H  ④ AX=0111H10.CBW10.CBW 指令的功能是( )。指令的功能是( )。  ①把源操作数的符号位扩展到目的操作数中  ②把 AL 中的符号位扩展到 AH中  ③把 AH 中的符号位扩展到 AL 中   ④把 AX 中的符号位扩展到 DX

Page 53: 第 7 章 高级汇编语言技术

ch7 53

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

1.1. 下列寄存器中下列寄存器中 , , 作为作为 1616 位寄存器的是 ( )。位寄存器的是 ( )。 A. AL B. BL C. CH D.DX2.2. 在程序运行过程中在程序运行过程中 , , 确定下一条指令的物理地址的计算表达式是 ( 确定下一条指令的物理地址的计算表达式是 (

)。)。 A.DS*16+SI B. ES*16+DI C. CS*16+IP D. SS*16+SP3.3. 物理地址(物理地址( 10FF0H 10FF0H )) =10H, =10H, (( 10FF1H 10FF1H )) =20H, =20H, (( 10FF2H 10FF2H )) =30H, =30H,

从地址从地址 10FF1H10FF1H 中取一个字的内容是 ( )。中取一个字的内容是 ( )。A.1020H B.3020H C.2030H D.2010H4.4. 将将 AX AX 清零清零 , , 下列指令错误的是 ( )。下列指令错误的是 ( )。A.SUB AX,AX B.XOR AX,AX C.OR AX,00H D.AND AX,00H5.5. 下列指令中下列指令中 , , 影响或修改标志位的是 ( )。影响或修改标志位的是 ( )。A.LOOPZ B.JNLE C.PUSHF D.POPF

Page 54: 第 7 章 高级汇编语言技术

ch7 54

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

6. 6. 设设 DS=8225HDS=8225H ,, DI=3942HDI=3942H ,指令,指令 NEG BYTE PTR[DI]NEG BYTE PTR[DI] 操作数的物理地址操作数的物理地址是( )。是( )。

A.85B92H B.86192H C.BB690H D.12169H7.7. 通用数据传送指令中通用数据传送指令中 , , 错误的是 ( )。错误的是 ( )。A.累加器到存储器 B. 立即数到存储器 C. 寄存器到存储器 D. 存储器到

存储器8.8. 移位指令中移位指令中 , , 应先将移位次数放在 ( )。应先将移位次数放在 ( )。A.AX B. AL C. CX D.CL9. MOV AL, 799. MOV AL, 79 ADD AL, 0B1HADD AL, 0B1H上述指令执行后上述指令执行后 , CF, CF 和和 OFOF 的值是 ( )。的值是 ( )。A.CF=0 OF=1 B.CF=1 OF=1 C.CF=0 OF=0 D.CF=1 OF=010.10. 下列语句中能实现留空下列语句中能实现留空 88 个字节单元的语句是( )。个字节单元的语句是( )。A. DA1 DT ? B. DA2 DW ?,? C. DA3 DD ? D. DA4 DQ ?

Page 55: 第 7 章 高级汇编语言技术

ch7 55

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

11 .指令.指令 JMP FAR PTR DONEJMP FAR PTR DONE 属于( )。 属于( )。  A. 段内转移直接寻址 B. 段内转移间接寻址C. 段间转移直接寻址   D. 段间转移间接寻址  22 .执行下面指令序列后,结果是( )。.执行下面指令序列后,结果是( )。 MOV AL , 82H CBW A. AX=0FF82H B. AX=8082H C. AX=0082H D. AX=0F82H33 .. 8088/80868088/8086 存储器分段,每个段不超过( )存储器分段,每个段不超过( ) . . A.64K 个字 B.32K 个字节 C.1 兆个字节 D.64K 个字节 44 .. CPUCPU 发出的访问存储器的地址是( )。发出的访问存储器的地址是( )。 A.物理地址 B.偏移地址 C.逻辑地址 D. 段地址55 .. BUF DW 10H DUPBUF DW 10H DUP (( 3 DUP3 DUP (( 22 ,, 10H10H ),), 33 ,, 55 ) ) 上述语句汇编后,为变量上述语句汇编后,为变量 BUFBUF 分配的存储单元字节数是( )。分配的存储单元字节数是( )。 A.80H B.100H C.124 D.192

Page 56: 第 7 章 高级汇编语言技术

ch7 56

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

66.若.若 AX= - 15AX= - 15要得到要得到 AX=15AX=15应执行的指令是( )。应执行的指令是( )。 A.NEG AX B.NOT AX C.INC AX D.DEC AX 77.. 8086/80888086/8088 系统执行传送指令系统执行传送指令 MOVMOV 时( )。时( )。 A. 不影响标志位 B.影响 DF 方向标志 C.影响 SF 符号标志 D.影响 CF进位标志 88 . . MOV ALMOV AL ,, 79 79 ADD ALADD AL ,, 0B1H 0B1H 上面指令执行后,设置的标志位 上面指令执行后,设置的标志位 CFCF 和和 OFOF 的值是( )。的值是( )。A.CF=0 , OF=1 B.CF=1 , OF=1 C.CF=0 , OF=1 D.CF=1 , OF=0

Page 57: 第 7 章 高级汇编语言技术

ch7 57

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

99 .检查.检查 BUFBUF 的内容是否为正偶数,如是正偶数,则的内容是否为正偶数,如是正偶数,则 AL=0AL=0 。下面程序。下面程序段正确的是( )。段正确的是( )。 A. MOV AL , BUF B. MOV AL , BUF JS K1 AND AL , 11 SHR AL , 1 JNZ K2 JNC K1 MOV AL , 0 MOV AL , 0 K2 :…… K1 :…… C.MOV AL , BUF D.MOV AL , BUF TEST AL , 81H JNP K4 JNZ K3 TEST AL , 80H MOV AL , 0 JNZ K4 K3 :…… MOV AL , 0 K4 :……1010 .下列指令中操作数在代码段中的是( )。 .下列指令中操作数在代码段中的是( )。 A.MOV AL , 42H B.ADD AL , BL

C.SUB [BX] , DI D.INC [DI]

Page 58: 第 7 章 高级汇编语言技术

ch7 58

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第第 77章章

作业作业

7-1 7-4 7-8 7-157-1 7-4 7-8 7-15