第
This presentation is the property of its rightful owner.
Sponsored Links
1 / 58

第 7 章 高级汇编语言技术 PowerPoint PPT Presentation


  • 130 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

第 7 章 高级汇编语言技术

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


7

第7章 高级汇编语言技术

ch7


7

第7章

7.1 宏汇编

  • 什么是宏?

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

为什么使用宏汇编?

在编制汇编语言程序过程中,有些功能程序段需要多次重复使用,所不同的只是参与操作的操作数。

为了减少编程的工作量,通常采用两种方法:

①将程序段编写为独立的子程序

②将程序段定义成宏

大家想一下 子程序有什么优缺点?

ch7


7

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

1.宏定义

用伪指令MACRO/ENDM实现,其语句格式是:

宏指令名MACRO [形参1,形参2,…,形参n]

┇ 宏定义体

ENDM

ch7


7

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

第7章

说明

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

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

  • MACRO必须与ENDM成对出现。MACRO标识宏定义的开始 。

  • 形式参数(即形参,也称哑元、虚参)是可选项,宏可以不带参数;带参数时,多个形参间用逗号分隔。


7

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

第7章

2.宏调用

宏调用的格式为:

宏指令名[实参1,实参2,…,实参n]

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

  • 宏展开

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


7

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

第7章

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

主程序

主程序

展开

主程序

子程序Q


7

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

第7章

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

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

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


7

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

第7章

BCDADD MACRO VARX,VARY,RESULT

MOV AL,VARX

ADD AL,VARY

MOV RESULT,AL

MOV AL,VARX+1

ADC AL,VARY+1

MOV RESULT+1,AL

ENDM

DATA SEGMENT

A1 DW 1234H

A2 DW 5678H

A3 DW ?

B1 DW 1357H

B2 DW 2468H

B3 DW ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:PUSH DS

MOV AX,0

PUSH AX


7

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

第7章

  • MOV AL,A1

  • 1 ADD AL,A2

  • 1 MOV A3,AL

  • 1 MOV AL,A1+1

  • 1 ADC AL,A2+1

  • MOV A3+1,AL

  • 1 MOV AL,B1

  • 1 ADD AL,B2

  • 1 MOV B3,AL

  • 1 MOV AL,B1+1

  • ADC AL,B2+1

  • MOV B3+1,AL

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

MOV AX,DATA

MOV DS,AX

BCDADD A1,A2,A3;宏调用

BCDADD B1,B2,B3;再次宏调用

RET

CODE ENDS

END START

经宏展开后:

PUSH DS

MOV AX,0

PUSH AX

MOV AX,DATA

MOV DS,AX


7

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

第7章

7.1.2 宏定义中的参数:

2 参数可以是操作码

1 宏定义可以无参数

  • a macro p1, p2,p3

  • mov ax,p1

  • p2p3

  • endm

  • 调用:

  • a word_ var ,inc,ax

  • 展开:

  • mov ax,word_var

  • 1 incax

savereg macro

push ax

push bx

push cx

push si

endm


7

3 参数可以是操作码或操作数的一部分,但在宏定义体中必须使用分隔符&,即&是操作符,在宏定义中可作为形参的前缀,展开时把&前后的两个符号连接起来,形成操作码、操作数或字符串。&只能出现在宏定义中。

例 宏定义:

SHIFT MARCO X,Y,Z

MOV CL,X

S&Z Y,CL

ENDM

形参Z是操作码的一部分。宏汇编中规定,若宏定义体中的形参没有适当的

分隔符,就不被当作形参,调用时也不会被实参代替。

上例被调用时:SHIFT 4,CL,AL

SHIFT 6,BX, AR

则宏展开时的目标代码: 1 MOV CL,4

1 SAL AL,CL

1 MOV CL,6

1 SAR BX,CL

ch7


7

如果这样:

fo macro p1

jmp tap1

endm

宏调用:

fo word_var

宏展开:

1 Jmp?

fo macro p1

jmp ta&p1

endm

宏调用:

fo word_var

宏展开:

1 Jmp taword_var

ch7


7

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

例 宏定义:

MAKER MACRO COUNT,STR

MAKER&COUNT DB STR

ENDM

ERRMA MACRO TEXT

CNTR=CNTR+1

MAKER %CNTR,TEXT

ENDM

经宏调用:

ch7


7

CNTR=0

ERRMA ‘SYNTAX ERROR’

ERRMA ‘INVALID OPERAND’

宏展开:

2 MAKER1 DB ‘SYNTAX ERROR’

2 MAKER2 DB ‘INVALID OPERAND’

ch7


7

7.1.3 伪指令 LOCAL

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

  • LOCAL 局部标号1,局部标号2,…

  • 宏汇编程序将为标号分别生成格式为“??XXXX”的唯一的符号以代替各局部标号。XXXX代表四位十六进制数0000~FFFF。这样,在汇编源程序中,避免了多次宏调用时生成的标号重复。

  • 注意:LOCAL伪操作只能用在宏定义体内,而且必须是MACRO伪操作后的第一个语句,在MACRO与LOCAL不能出现注释和分号标志。

ch7


7

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

ABS MACRO OPS

LOCAL PLUS

CMP OPS,0

JGE PLUS

NEG OPS

PLUS:MOV AX,OPS

ENDM

宏调用:

ABS CX

MOV BX,AX

ABS DX

宏展开后的指令为:

1CMP CX,0

1 JGE??0000

1 NEG CX

1??0000:MOV AX,CX

MOV BX,AX

1 CMP DX,0

1 JGE??0001

1 NEG DX

1??0001:MOV AX,DX

ch7


7

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

第7章

7.1.4 在宏定义内使用宏

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

dif macro x , y

mov ax,x

sub ax ,y

endm

difsqr macro opr1,opr2,result

push dx

push ax

dif opr1,opr2

mov result,ax

pop ax

pop dx

endm

difsqr var1,var2,var3 调用

宏展开

1 push dx

1 push ax

2 mov ax,var1

2 sub ax,var2

1 mov var3,ax

1 pop ax

1 pop dx


7

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

第7章

7.1.5 列表伪操作

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

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

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

.sall 则不列出任何信息;


7

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

第7章

7.1.6 宏库的建立与调用

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

INCLUDE C:\MACRO.MAC


7

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

第7章

7.1.7 伪指令PURGE

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

PURGE伪指令的一般格式是:

PURGE 宏定义名[,…]

方括号表示PURGE可以取消多个宏定义,宏名之间用逗号隔开。如宏定义:

SUBMACRO VARX,VARY,RESULT

ENDM

宏调用:SUB X,Y,Z

PURGE SUB


7

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

第7章

7.2 重复汇编

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

7.2.1 定重复伪指令REPT

其一般格式为:

REPT 表达式

┇ (重复块 )

ENDM

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


7

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

第7章

例 有下列语句:

NUM=0

REPT 10

NUM=NUM+1

DB NUM

ENDM

汇编后,将数据1,2,3,…,10分配给十个连续

的字节单元:

1 DB 1

1 DB 2

1 DB 3

1 DB 10


7

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

第7章

7.2.2 不定重复伪指令IRP

其一般格式为:

IRP 形参,〈参数1,参数2,…〉

┇ (重复块)

ENDM

此伪指令重复执行重复块中所包含的语句,重复的次数由参数表中的参数个数决定。重复汇编时,依次用参数表中的参数取代形参,直到表中的参数用完为止。参数表中的参数必须用两个三角号括起来,参数可以是常数、符号、字符串等,各参数间用逗号隔开。


7

例 多次将AX、BX、CX、DX寄存器内容压栈,宏定义如下:

PUSHR MACRO

IRP REG,〈AX,BX,CX,DX〉

PUSH REG

ENDM

ENDM

汇编后:

1 PUSH AX

1 PUSH BX

1 PUSH CX

1 PUSH DX

ch7


7

7.2.3 不定重复字符伪指令IRPC

其语句格式为:

IRPC 形参,字符串(或〈字符串〉)

┇ (重复块)

ENDM

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

ch7


7

  • 例:

  • Irpc x ,01234567

  • Db x+1

  • Endm

  • 汇编后:

  • Db 1

  • 1 Db 2

  • 1 Db 8

再如:可用IRPC实现:

PUSHR MACRO

IRPC REG,ABCD

PUSH REG&X

ENDM

ENDM

同样,汇编后也可得到:

1 PUSH AX

1 PUSH BX

1 PUSH CX

1 PUSH DX

ch7


7

7.3 条件汇编

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

Ifxx argument

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

[ELSE]

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

ENDIF

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

ch7


7

7.3.1

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

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

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

ch7


7

MAX MACRO K,A,B,C

LOCAL NEXT ,OUT

MOV AX,A

IF K-1

IF K-2

CMP C,AX

JLE NEXT

MOV AX,C

ENDIF

NEXT:

CMP B,AX

JLE OUT

MOV AX,B

ENDIF

OUT:

ENDM

宏调用:

MOV 1,P

MOV 2,P,Q

MOV 3,P,Q

  • MAX 3,P,Q,R

  • 1 MOV AX,P

  • 1 CMP R,AX

  • 1 JLE ??0004

  • MOV AX,R

  • 1 ??0004:

  • CMP Q,AX

  • 1 JLE ??0005

  • MOV AX,Q

  • 1 ??0005

  • 宏展开:

  • MOV 1,P

  • MOV AX,P

  • 1 ??0002:

  • MAX 2,P,Q

  • JLE ??0000

  • 1 MOV AX,Q

  • 1 ??0003:

ch7


7

该宏要完成什么功能。

宏定义允许递归调用

BRANCH MACRO X

IF ($-X) LT 128

JMP SHORT X

ELSE

JMP NEAR PTR X

ENDIF

ENDM

LAB:

MOV AX,BX

BRANCH LAB

JMP SHORT LAB

power macro x,n

sal x,1

count=count+1

if count-n

power x,n

endif

Endm

宏调用:

count=0

power ax,3

宏展开:

Sal ax,1

Sal ax,1

Sal ax,1

ch7


7

7.3.2

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

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

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

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

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

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

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

7.3.3

ch7


7

例:宏指令 GOTO L,X,REL,Y 可以根据不同情况产生无条件转移指令或比较和条件转移指令。

宏定义:

GOTO MACRO L,X,REL,Y

IFB <REL>

JMP L

ELSE

MOV AX,X

CMP AX,Y

J&REL L

ENDIF

ENDM

宏调用:

GOTO LOOP1,SUM,NZ,15

GOTO EXIT

  • 宏展开:┇

  • 1       MOV AX,SUM

  • 1 CMP AX,15

  • JNZ LOOP1

  • 1        JMP EXIT

ch7


7

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

DISP MACRO CHAR

IFB <CHAR>

MOV DL,’ ‘

ELSE

MOV DL,CHAR

ENDIF

MOV AH,02H

INT 21H

ENDM

宏调用:

DISP ‘A’

DISP

ch7


7

7.3.4

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

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

ch7


7

divide macro devidend,divisor,quotient

local cmop,out

cntr=0

ifndef dividend

cntr=1

endif

ifndef divisor

cntr =1

endif

ifndef quotient

cntr=1

endif

if cntr

exitm

endif

mov ax,dividend

mov bx,divisor

sub cx,cx

comp: cmp ax,bx

jb out

sub ax,bx

jnc cx

Jmp comp

out : mov quotient ,cx

endm

ch7


7

7.3.5

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

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

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

MOVDIF MACRO X

IFIDN <&X>,<‘B’>

REP MOVSB

ELSE

REP MOVSW

ENDIF

ENDM

宏调用:

MOVDIF ‘B’

宏展开:

1 REP MOVSB

ch7


7

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

READCH MACROchar

MOV AH, 1H

INT 21H

;接受一个字符,并存入AL中

IFNB <char> ;若参数char有实参与之对应

IFDIF<char>, <AL> ;若参数char≠AL,则把所输入字符保存到实参中

MOVchar, AL

ENDIF

ENDIF

ENDM

ch7


7

1. 在DEBUG上机调试程序时,存储器地址表示为12FA:015F,它的物理地址是( )。

a. 12FAH    b. 1305FH   c. 130FFH   d. 015FH

2. IP指令指针寄存器是属于( )。

a. 通用寄存器    b. 段寄存器   c. 变址寄存器   d. 控制寄存器

3. 下面有语法错误的指令是( )。

a. ADD AL,AH       b. ADD [BX+3],AL

    c. ADD AH,[DI]    d. ADD [BP+2],DA1 (DA1是变量名)

4. 完成对DX的有符号数除以2的指令是( )。

a. IDIV 2    b. SAR DX,1    c. ROR DX,1    d. RCR DX,1

5. 使进位位置1的指令是( )。

a. CLC    b. CMC    c. STC    d. NOP

ch7


7

6. 设AL=-15,要使AL=15应执行的指令是( )。

a. NEG AL    b. NOT AL    c. INC AL    d. DEC AL

7. 在条件转移指令中,结果为负数则转移的指令是( )。

a. JNS    b. JX    c. JS    d. JP

8. 下面的XCHG指令中,语法正确的是( )。

a. XCHG AL,DS      b. XCHG BL,[BX]

    c. XCHG AL,0FH    d. XCHG BUF1,BUF2

9. 一条指令中目的操作数不允许使用的寻址方式是( )。

a. 寄存器寻址b. 立即数寻址c. 变址寻址d. 寄存器间接寻址

10. 设SP=1FFEH,执行下列指令后,SP寄存器的值是( )。

POPF

    PUSH AX

   a.. 2000H    b. 2002H    c. 1FFCH    d. 1FFEH

ch7


7

1.[ ]下列标号不合法的是:

A.MOV B. WANG C. F8 D. AB3

2.[ ]语句DADA DW ‘AB’, ‘CD’, ‘E’,‘F’汇编后占用的存储空间是:

A.4个字节B. 8个字节C. 6个字节D.5个字节

3.[ ]PSW中使用的标志位以及其中的状态标志位、控制标志位的位数分别是:

A.9,6,3 B. 9,8,1 C. 9,7,2 D. 16,9,7

4.[ ]指令ADD AX, [BX][DI]中源操作数的寻址方式是:

A.段内寄存器间接寻址B. 段间寄存器间接寻址

C.基址加变址寻址C. 寄存器寻址

5.[ ]在伪指令语句NUMBER DW 1234H中的NUMBER项称为:

A.标号B. 变量C. 伪操作符D. 数据

ch7


7

6.[ ]在存储器中保留待定的10个字节单元的伪指令语句是:

A.NUMB EQU 10 B. NUMB DW 10 DUP(?)

C. NUMB DB 10 D. NUMB DB 2 DUP(5 DUP(?))

7.[ ]把汇编语言源程序翻译成目标代码的程序是:

A.编译程序B. 解释程序C. 汇编程序D.连接程序

8.[ ]下列指令中,不影响PSW的指令是:

A. MOV B. TEST C. SAL D. CLD

9.[ ]下列叙述不正确的是:

A. 立即数不能直接送段寄存器。

B. 目的操作数不能是立即数和段寄存器。

C. 不能在两个存储单元间直接传送数据。

D. 两个段寄存器之间不能直接传送数据。

10.[ ]汇编语言在程序设计语言家族中属于:

A. 第一代语言B. 第二代语言

C. 第三代语言D. 第四代语言

ch7


7

1、设DS=8225H,DI=3942H,指令NEGBYTEPTR [DI]操作数的物理地址是()

A、85B92H B、86192H C、BB690H D、12169H

2、下列寄存器组中在段内寻址时可以提供偏移地址的寄存器组是()

A、AX,BX,CX,DX B、BX,BP,SI,DI

C、SP,IP,BP,DX D、CS,DS,ES,SS

3、循环指令LOOPNZ终止循环的条件是()。

A、CX=0,且Z=0 B、CX=0,或Z=1

C、CX≠0,且Z=0 D、CX≠0,或Z=1

4、对寄存器AX的内容乘以4的正确指令序列是()。

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,1

5、保存字除法商的寄存器是()。

A、AX B、AH C、AL D、通用寄存器

ch7


7

6、设DH=10H,执行NEGDH指令后,正确的结果是()。

A、DH=10H      C=1 B、DH=0F0H     C=0

C、DH=10H      C=0 D、DH=0F0H     C=1

7、下列传送指令中有语法错误的是()。

A、MOV CS,AX B、MOV DS,AX

C、MOV SS,AX D、MOV ES,AX

8、下面指令执行后,改变AL寄存器内容的指令是()。

A、TEST  AL,02H B、OR  AL,AL

C、CMP  AL,BL D、AND  AL,BL

9、一条指令中目的操作数不允许使用的寻址方式是( )

A. 寄存器寻址B. 立即数寻址C.变址寻址D.寄存器间接寻址

10、执行下面指令序列后,结果是()。

MOV  AL,82H

CBW

A、AX=0FF82H B、AX=8082H C、AX=0082H D、AX=0F82H

ch7


7

1.指令JMP FAR PTR DONE属于( )。   参考答案为:C

A.段内转移直接寻址  B.段内转移间接寻址

C.段间转移直接寻址  D.段间转移间接寻址

2.下列叙述正确的是( )。   参考答案为:C

A.对两个无符号数进行比较采用CMP指令,对两个有符号数比较用CMPS指令

B.对两个无符号数进行比较采用CMPS指令,对两个有符号数比较用CMP指令

C.对无符号数条件转移采用JAE/JNB指令,对有符号数条件转移用JGE/JNL指令

D.对无符号数条件转移采用JGE/JNL指令,对有符号数条件转移用JAE/JNB指令

3.一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区最末一个字单元的物理地址是( )。   参考答案为:C

A.12CSBHB.12B6BHC.12C59HD.12BFEH

4.在下列指令的表示中,不正确的是( )。   参考答案为:C

A.MOV AL,[BX+SI]B.JMP SHORT DONI

C.DEC [BX] D.MUL CL

5.在进行二重循环程序设计时,下列描述正确的是( )。   参考答案为:A

A.外循环初值应置外循环之外;内循环初值应置内循环之外,外循环之内

B.外循环初值应置外循环之内;内循环初值应置内循环之内

C.内、外循环初值都应置外循环之外

D.内、外循环初值都应置内循环之外,外循环之内

ch7


7

6.条件转移指令JNE的测试条件为( )。   参考答案为:A

A.ZF=0B.CF=0C.ZF=1D.CF=1

7.8086CPU在基址加变址的寻址方式中,变址寄存器可以为( )。   参考答案为:D

A.BX或CXB.CX或SIC.DX或SID.SI或DI

8.已知BX=2000H,SI=1234H,则指令MOV AX,[BX+SI+2]的源操作在( )中。

 参考答案为:A

A.数据段中偏移量为3236H的字节  B.附加段中偏移量为3234H的字节

C.数据段中偏移量为3234H的字节  D.附加段中偏移量为3236H的字节

9.执行如下程序:

MOV AX,0

MOV BX,1

MOV CX,100

A:ADD AX,BX

INC BX

LOOP A

HLT

执行后(BX)=()。   参考答案为:C

A.99B.100C.101D.102

10.上题的程序执行后(AX)=( )。   参考答案为:B

A.5000B.5050C.5100D.5150

ch7


7

1.在堆栈段中,存放栈顶地址的寄存器是( )。

A.IP B.SP C.BX D.BP

2.汇编语言程序中,反映指令操作结果的标志是( )。

A.状态标志B.控制标志C.ZF D.DF

3.书写汇编语言程序时规定,对字母开头的十六进制数,其前面必须加( )。

A.0 B.D C.B D.H

4.计算机中用来存储程序、数据等信息的记忆装置是( )。

A.控制器B.运算器C.CPU D.存储器

5.MOV [SI][BX],AL,该指令中自操作数采用的寻址方式是( )。

A.基址加变址B.寄存器C.寄存器间接D.寄存器相对

ch7


7

6.MUL WORD PTR[SI]指令中的乘积是存放在( )、AX中。

A.CX B.BX C.DX D.SI

7.汇编语言中,存放下一条将要执行的指令地址寄存器是( )。

A.SP B.AX C.DI D.IP

8.在计算机中,以先进后出方式工作的存储空间是( )。

A.存储器B.RAM C.ROM D.堆栈

9.TEST AH,30H指令的功能与( )指令功能相类似。

A.AND B.CMP C.SUB D.OR

10.在存储器中留60个字的空单元的伪指令是( )。

A.ARRAY EQU 60 B.ARRAY DW 60

C.ARRAY DB 60 DUP(?)D.ARRAY DW 60 DUP(?)

ch7


7

1.用DEBUG调试汇编语言程序时,显示某指令的地址是2F80:F400,此时段寄存器CS的值是( )。

A.F400H B.2F80H C.F4000H D.2F800H

2.设DS=1100H,(12000H)=80H,(12001H)=20H,(12002H)=30H,执行MOV AX, [1000H]则AX=( )。

A.8000H B.0080H C.2080H D.8020H

3.下列四条指令中错误的是( )。

A.MOV AX,[SI]B.MOV AX,[DI]

C.MOV AX,[SI+DI]D.MOV AX,[SI-DI]

4.下列四条指令执行后不影响标志位的是( )。

A.JNC NEXT B.CMP AX,BX C.SHL AX,1 D.OR AL,AL

5.已知AX=0001H,下列四条指令执行后,不能使ZF=1的语句是( )。

A.DEC AX B.SUB AX,1 C.AND AX ,1 D.CMP AX,1

ch7


7

6.在8086/8088系统中,约定用于形成堆栈段数据物理地址的寄存器有( )。

A.SS,SP,BP B.SS,SP,BX

C.DS,BX,BP D.DS,SP,BP

7.有指令MOV AX, 1234H,指令中的立即数1234H是存储在( )。

A.数据段B.代码段C.附加段D.堆栈段

8.要在程序中定义缓冲区BUF,保留9个字节存储空间的语句是( )。

A.BUF DW 9 B.BUF DB 9

C.BUF DB 9 DUP(?)D.BUF DW 9 DUP(?)

9.已知AL=56H,BL=34H,都是压缩BCD码,要执行二数相加,正确的指令是( )。

A.ADD AL,BL B.ADC AL,BL C.ADD BL,AL D.ADC BL,AL

DAA DAA DAA DAA

10.在执行子程序段内调用CALL SUBR指令后,SP的值( )。

A.加1 B.减1 C.加2 D.减2

ch7


7

1.Intel 8086 CPU的段寄存器有______________________________________________。

2.Intel 8086 CPU的SP寄存器的主要作用是____________________________________。

3.(CS)=1000H,(DS)=2000H,(ES)=3000H,(SS)=4000H,(DI)=a100,操作数 [DI+1000H] 的寻址方式是____________________,物理地址是________________ 。

4. 志寄存器中OF标志位的主要作用是__________________________________。

5.TEST指令的功能是__________________________________。

6.指令LEA__AX, [SI+100H]的具体操作是______________________________。

7.有符号二进制字节数可表示的数的范围是____________________________ 。

8.执行一条POP__AX指令后,SP的内容发生的变化是______________________。

9.AL寄存器的内容为28H,执行指令OR__AL, 33H后,AL的值为____________。

10.测试寄存器AL和BL的值是否相等而不改变其值应使用指令__________________。

ch7


7

1.用户为了解决自己的问题,用汇编语言所编写的程序,称为( )。

①目标程序  ②源程序  ③可执行程序  ④汇编程序

2.某系列微机对存储器的分段,如果每一个段最多的字存储单元(16位二进制)是32K,那么表示段内字节单元偏移地址的二进制位数应是( )。

①20位  ②16位  ③15位  ④12位

3.可用作寄存器间接寻址或基址、变址寻址的地址寄存器,正确的是( )。

①AX,BX,CX,DX②DS,ES,CS,SS

③SP,BP,IP,BX ④SI,DI,BP,BX

4.用一条指令仅实现将BX+SI=>AX的方法是( )。

①XCHGAX,[BX][SI]②MOVAX,[BX+SI]

③LEAAX,BX[SI] ④LEAAX,[BX][SI]

5.设SP初值为2000H,执行指令“PUSH AX”后,SP的值是( )。

①1FFFH②1998H③2002H④1FFEH

ch7


7

6.条件转移指令JB产生程序转移的条件是( )。

①CF=1②CF=0③CF=1和ZF=1④CF=1和ZF=0

7.选用串操作指令时,错误的操作是( )。

①置方向标志位②根据串操作指令设置重复次数并送入CX

③设置源操作数及目的操作数指针  ④源操作数和目的操作数都可以加段超越

8.设AL=20H,SI=0500H,DS=3000H,(30500H)=0C0H,CF=1。执行SBBAL,[SI]后,正确的结果是( )。

①AL=5FHSF=1CF=1②AL=60HSF=1CF=0

③AL=5FHSF=0CF=1④AL=60HSF=0CF=0

9.设AX=1000H

NEGAX

NOTAX

  执行上述指令后,正确的结果是( )。

①AX=1001H②AX=0FFFH③AX=1000H④AX=0111H

10.CBW指令的功能是( )。

①把源操作数的符号位扩展到目的操作数中  ②把AL中的符号位扩展到AH中

③把AH中的符号位扩展到AL中④把AX中的符号位扩展到DX中

ch7


7

1.下列寄存器中, 作为16位寄存器的是 ( )。

A. AL B. BL C. CH D.DX

2.在程序运行过程中, 确定下一条指令的物理地址的计算表达式是 ( )。

A.DS*16+SI B. ES*16+DI C. CS*16+IP D. SS*16+SP

3.物理地址(10FF0H )=10H, (10FF1H )=20H, (10FF2H )=30H, 从地址10FF1H中取一个字的内容是 ( )。

A.1020H B.3020H C.2030H D.2010H

4.将AX 清零, 下列指令错误的是 ( )。

A.SUB AX,AX B.XOR AX,AX C.OR AX,00H D.AND AX,00H

5.下列指令中, 影响或修改标志位的是 ( )。

A.LOOPZ B.JNLE C.PUSHF D.POPF

ch7


7

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

A.85B92H B.86192H C.BB690H D.12169H

7.通用数据传送指令中, 错误的是 ( )。

A.累加器到存储器B.立即数到存储器C.寄存器到存储器D.存储器到存储器

8.移位指令中, 应先将移位次数放在 ( )。

A.AX B. AL C. CX D.CL

9. MOV AL, 79

ADD AL, 0B1H

上述指令执行后, CF和OF的值是 ( )。

A.CF=0 OF=1 B.CF=1 OF=1 C.CF=0 OF=0 D.CF=1 OF=0

10.下列语句中能实现留空8个字节单元的语句是( )。

A. DA1 DT ?B. DA2 DW?,?

C. DA3 DD ?D. DA4 DQ ?

ch7


7

1.指令JMP FAR PTR DONE属于( )。 

A.段内转移直接寻址B.段内转移间接寻址

C.段间转移直接寻址  D.段间转移间接寻址  

2.执行下面指令序列后,结果是( )。

MOV AL,82H

CBW

A. AX=0FF82H B. AX=8082H C. AX=0082H D. AX=0F82H

3.8088/8086存储器分段,每个段不超过( ).

A.64K个字B.32K个字节

C.1兆个字节D.64K个字节

4.CPU发出的访问存储器的地址是( )。

A.物理地址B.偏移地址

C.逻辑地址D.段地址

5.BUF DW 10H DUP(3 DUP(2,10H),3,5)

上述语句汇编后,为变量BUF分配的存储单元字节数是( )。

A.80H B.100H C.124 D.192

ch7


7

6.若AX= - 15要得到AX=15应执行的指令是( )。

A.NEG AX B.NOT AX

C.INC AX D.DEC AX

7.8086/8088系统执行传送指令MOV时( )。

A.不影响标志位B.影响DF方向标志

C.影响SF符号标志D.影响CF进位标志

8. MOV AL,79

ADD AL,0B1H

上面指令执行后,设置的标志位 CF和OF的值是( )。

A.CF=0,OF=1 B.CF=1,OF=1

C.CF=0,OF=1 D.CF=1,OF=0

ch7


7

9.检查BUF的内容是否为正偶数,如是正偶数,则AL=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:……

10.下列指令中操作数在代码段中的是( )。

A.MOV AL,42H B.ADD AL,BL

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

ch7


7

作业

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

ch7


  • Login