580 likes | 811 Views
第 7 章 高级汇编语言技术. 第 7 章. 7.1 宏汇编. 什么是宏? 宏(或宏指令)是源程序中一段有独立功能的程序代码, 只需定义一次,可以多次调用。. 为什么使用宏汇编? 在编制汇编语言程序过程中,有些功能程序段需要多次重复使用,所不同的只是参与操作的操作数。 为了减少编程的工作量,通常采用两种方法 : ①将程序段编写为独立的子程序 ② 将 程序段定义成宏 大家想一下 子程序有什么优缺点?. 7.1.1 宏定义、宏调用和宏展开. 1. 宏定义 用伪指令 MACRO/ENDM 实现,其语句格式是:
E N D
第7章 高级汇编语言技术 ch7
第7章 7.1 宏汇编 • 什么是宏? • 宏(或宏指令)是源程序中一段有独立功能的程序代码,只需定义一次,可以多次调用。 为什么使用宏汇编? 在编制汇编语言程序过程中,有些功能程序段需要多次重复使用,所不同的只是参与操作的操作数。 为了减少编程的工作量,通常采用两种方法: ①将程序段编写为独立的子程序 ②将程序段定义成宏 大家想一下 子程序有什么优缺点? ch7
7.1.1 宏定义、宏调用和宏展开 1.宏定义 用伪指令MACRO/ENDM实现,其语句格式是: 宏指令名MACRO [形参1,形参2,…,形参n] ┇ 宏定义体 ENDM ch7
安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第7章 说明 • 宏指令名是该宏定义的名称。调用时使用宏指令名对该宏定义进行调用。 • 宏指令符合标识符规定。宏指令名不能重复,并且指令的第一个字符必须是字母。但可以和源程序中的其他变量、标号、指令、伪指令名相同,在这种情况下宏指令的优先级最高。 • MACRO必须与ENDM成对出现。MACRO标识宏定义的开始 。 • 形式参数(即形参,也称哑元、虚参)是可选项,宏可以不带参数;带参数时,多个形参间用逗号分隔。
安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第7章 2.宏调用 宏调用的格式为: 宏指令名[实参1,实参2,…,实参n] 说明:实参可以是常数、寄存器、存储单元、地址表达式、指令的操作码或者是操作码的一部分。 • 宏展开 • 宏展开就是宏定义体取代源程序中的宏指令名,而且用实元取代哑元。汇编源程序时,宏汇编程序将对每条宏指令语句进行宏展开,用实参替代相应的形参,对宏体目标代码作相应改变。
安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第7章 子程序调用和宏调用的工作方式 主程序 主程序 展开 主程序 子程序Q
安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第7章 用一个例子来说明宏定义、宏调用和宏展开的情况 例:将两个16位数相加,结果存入16位 RESULT 单元中 。 ;对两数相加功能进行宏定义
安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第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章 • 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.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
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
如果这样: 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
4 伪操作%不能出现在形参的前面,通常用在宏调用中,将跟在它后面的表达式的值转换成以当前基数下的数,在宏展开时,用转换后的值代替形参。 例 宏定义: MAKER MACRO COUNT,STR MAKER&COUNT DB STR ENDM ERRMA MACRO TEXT CNTR=CNTR+1 MAKER %CNTR,TEXT ENDM 经宏调用: ch7
CNTR=0 ERRMA ‘SYNTAX ERROR’ ┇ ERRMA ‘INVALID OPERAND’ ┇ 宏展开: ┇ 2 MAKER1 DB ‘SYNTAX ERROR’ ┇ 2 MAKER2 DB ‘INVALID OPERAND’ ┇ ch7
7.1.3 伪指令 LOCAL • 宏定义体内可以使用标号。对于使用了标号的宏定义,若多次调用,势必产生标号的多重定义,汇编时出错。解决这一问题可使用伪指令LOCAL,其一般格式为: • LOCAL 局部标号1,局部标号2,… • 宏汇编程序将为标号分别生成格式为“??XXXX”的唯一的符号以代替各局部标号。XXXX代表四位十六进制数0000~FFFF。这样,在汇编源程序中,避免了多次宏调用时生成的标号重复。 • 注意:LOCAL伪操作只能用在宏定义体内,而且必须是MACRO伪操作后的第一个语句,在MACRO与LOCAL不能出现注释和分号标志。 ch7
例 定义取绝对值的宏指令如下: 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.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.1.5 列表伪操作 Masm提供了.xall , .lall, sall来控制汇编清单中宏展开的列出情况 .xall为默认情况,它指示清单中只列出产生目标 代码的宏展开; .lall列出包括注释在内的所有宏展开; .sall 则不列出任何信息;
安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第7章 7.1.6 宏库的建立与调用 如果程序中定义了很多宏,可以把这些宏组合起来建立一个独立的文件,这个只包含若干个宏定义的文件称为宏库。扩展名是mac 或inc来表示。当需要使用宏库中的某些宏定义时,只需要在该程序的开始用INCLUDE语句说明 INCLUDE C:\MACRO.MAC
安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第7章 7.1.7 伪指令PURGE 宏汇编程序提供了伪操作PURGE,用来在适当的时候取消宏定义。 PURGE伪指令的一般格式是: PURGE 宏定义名[,…] 方括号表示PURGE可以取消多个宏定义,宏名之间用逗号隔开。如宏定义: SUBMACRO VARX,VARY,RESULT ┇ ENDM 宏调用:SUB X,Y,Z PURGE SUB
安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第7章 7.2 重复汇编 有时汇编语言程序要连续地重复完成相同或者几乎完全相同的一组代码,这时可用重复汇编。 7.2.1 定重复伪指令REPT 其一般格式为: REPT 表达式 ┇ (重复块 ) ENDM 其中,REPT和ENDM必须成对出现,两者间的重复块是要重复汇编的部分。表达式的值用来表示重复块的重复汇编次数。重复伪操作不一定要用在宏定义体内。
安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第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.2.2 不定重复伪指令IRP 其一般格式为: IRP 形参,〈参数1,参数2,…〉 ┇ (重复块) ENDM 此伪指令重复执行重复块中所包含的语句,重复的次数由参数表中的参数个数决定。重复汇编时,依次用参数表中的参数取代形参,直到表中的参数用完为止。参数表中的参数必须用两个三角号括起来,参数可以是常数、符号、字符串等,各参数间用逗号隔开。
例 多次将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.2.3 不定重复字符伪指令IRPC 其语句格式为: IRPC 形参,字符串(或〈字符串〉) ┇ (重复块) ENDM 此伪指令重复执行重复块中的语句,重复汇编的次数等于字符串中字符的个数。每次重复执行时,依次用字符串中的一个字符取代形参,直到字符串结束。可见IRPC伪指令与IRP伪指令类似,只是IRPC用字符串(其三角括号可以有也可以无)代替了IRP伪指令中的参数表。 ch7
例: • 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.3 条件汇编 汇编程序能根据条件把一段源程序包括在汇编语言程序内的或排除在外,这里就用到条件伪操作。条件伪操作的一般格式是: Ifxx argument ┇ ;自变量满足条件汇编此块 [ELSE] ┇ ;自变量不满足条件汇编此块 ENDIF 说明:汇编程序在对源程序汇编时,要对源程序扫描二遍 。第一遍建立符号表 ,第二遍才把汇编语言指令翻译成机器语言指令。那么自变量必须在汇编程序第一遍扫视后就成为确定的数值。 ch7
7.3.1 IF expression ; 汇编程序求出表达式的值,如此值不为0, 则 满足条件. IFE expression ;汇编程序求出表达式的值,如此值为0,则 满足条件. 例:宏指令MAX把三个变元中的最大值放在AX中,而且使变元数不同时产生不同的程序段。 ch7
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
该宏要完成什么功能。 宏定义允许递归调用 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.3.2 IF1 ;在汇编程序的第一遍扫视期间满足条件 IF2 ;在汇编程序的第二遍扫视期间满足条件 说明:汇编程序在对包括宏库的源程序汇编时也分两次扫描,第一次将宏库及程序中的宏定义登入宏定义表,第二次 扫描时进行宏扩展,形成列表文件。 大家看书上268页的例7.24,然后和259页的例7.12比较看有什么不同? IFB<argument> ;如自变量为空,则满足条件 IFNB<argument> ;如自变量不为空,则满足条件 注意:自变量用“< >”括起来 7.3.3 ch7
例:宏指令 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
下面程序要完成什么样的功能? DISP MACRO CHAR IFB <CHAR> MOV DL,’ ‘ ELSE MOV DL,CHAR ENDIF MOV AH,02H INT 21H ENDM 宏调用: DISP ‘A’ DISP ch7
7.3.4 IFDEF symbol ;如符号已在程序中定义,或者用extrn说明 该符号是在外部定义的,则满足条件。 IFNDEF symbol ;如符号未定义或未通过EXTRN说明为外 部符号则满足条件。 ch7
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.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
例 编写一个可用功能调用输入字符的宏定义。 READCH MACROchar MOV AH, 1H INT 21H ;接受一个字符,并存入AL中 IFNB <char> ;若参数char有实参与之对应 IFDIF<char>, <AL> ;若参数char≠AL,则把所输入字符保存到实参中 MOVchar, AL ENDIF ENDIF ENDM ch7
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
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
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
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
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
6、设DH=10H,执行NEGDH指令后,正确的结果是()。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
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
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
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
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
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
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
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