《第7章高级汇编语言技术.ppt》由会员分享,可在线阅读,更多相关《第7章高级汇编语言技术.ppt(58页珍藏版)》请在三一办公上搜索。
1、第7章 高级汇编语言技术,7.1 宏汇编,为什么使用宏汇编?在编制汇编语言程序过程中,有些功能程序段需要多次重复使用,所不同的只是参与操作的操作数。为了减少编程的工作量,通常采用两种方法:将程序段编写为独立的子程序 将程序段定义成宏 大家想一下 子程序有什么优缺点?,什么是宏?宏(或宏指令)是源程序中一段有独立功能的程序代码,只需定义一次,可以多次调用。,1.宏定义 用伪指令MACRO/ENDM实现,其语句格式是:宏指令名 MACRO 形参1,形参2,形参n 宏定义体 ENDM,7.1.1 宏定义、宏调用和宏展开,说明,宏指令名是该宏定义的名称。调用时使用宏指令名对该宏定义进行调用。宏指令符合
2、标识符规定。宏指令名不能重复,并且指令的第一个字符必须是字母。但可以和源程序中的其他变量、标号、指令、伪指令名相同,在这种情况下宏指令的优先级最高。MACRO必须与ENDM成对出现。MACRO标识宏定义的开始。形式参数(即形参,也称哑元、虚参)是可选项,宏可以不带参数;带参数时,多个形参间用逗号分隔。,2.宏调用宏调用的格式为:宏指令名 实参1,实参2,实参n,宏展开 宏展开就是宏定义体取代源程序中的宏指令名,而且用实元取代哑元。汇编源程序时,宏汇编程序将对每条宏指令语句进行宏展开,用实参替代相应的形参,对宏体目标代码作相应改变。,说明:实参可以是常数、寄存器、存储单元、地址表达式、指令的操作
3、码或者是操作码的一部分。,子程序Q,主程序,主程序,主程序,展开,子程序调用和宏调用的工作方式,用一个例子来说明宏定义、宏调用和宏展开的情况例:将两个16位数相加,结果存入16位 RESULT 单元中。;对两数相加功能进行宏定义,BCDADD MACRO VARX,VARY,RESULT MOV AL,VARX ADD AL,VARY MOV RESULT,AL MOV AL,VARX1 ADC AL,VARY1 MOV RESULT1,AL ENDMDATA SEGMENT A1 DW 1234H A2 DW 5678H A3 DW?B1 DW 1357H B2 DW 2468H B3 DW
4、?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:PUSH DS MOV AX,0 PUSH AX,MOV AX,DATA MOV DS,AX BCDADD A1,A2,A3;宏调用 BCDADD B1,B2,B3;再次宏调用 RETCODE ENDS END START经宏展开后:PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX,MOV AL,A1 1 ADD AL,A21 MOV A3,AL1 MOV AL,A111 ADC AL,A21 MOV A31,AL1 MOV AL,B1 1 ADD
5、AL,B2 1 MOV B3,AL1 MOV AL,B11 ADC AL,B21MOV B31,AL 宏汇编程序在所展开的指令前标识以1号以示区别。较早的版本用+,7.1.2 宏定义中的参数:,1 宏定义可以无参数,savereg macro push ax push bx push cx push si endm,2 参数可以是操作码,a macro p1,p2,p3 mov ax,p1 p2 p3 endm调用:a word_ var,inc,ax 展开:mov ax,word_var1 inc ax,3 参数可以是操作码或操作数的一部分,但在宏定义体中必须使用分隔符&,即&是操作符,在宏
6、定义中可作为形参的前缀,展开时把&前后的两个符号连接起来,形成操作码、操作数或字符串。&只能出现在宏定义中。,例 宏定义: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,例 fo macro p1 jmp ta&p1 endm 宏调用:fo word_var宏展开:1 J
7、mp taword_var,如果这样:fo macro p1 jmp tap1 endm 宏调用:fo word_var宏展开:1 Jmp?,4 伪操作%不能出现在形参的前面,通常用在宏调用中,将跟在它后面的表达式的值转换成以当前基数下的数,在宏展开时,用转换后的值代替形参。,例 宏定义:MAKER MACRO COUNT,STR MAKER&COUNT DB STR ENDMERRMA MACRO TEXT CNTR=CNTR1 MAKER%CNTR,TEXT ENDM经宏调用:,CNTR=0 ERRMA SYNTAX ERROR ERRMA INVALID OPERAND 宏展开:2 MA
8、KER1 DB SYNTAX ERROR 2 MAKER2 DB INVALID OPERAND,7.1.3 伪指令 LOCAL,宏定义体内可以使用标号。对于使用了标号的宏定义,若多次调用,势必产生标号的多重定义,汇编时出错。解决这一问题可使用伪指令LOCAL,其一般格式为:LOCAL 局部标号1,局部标号2,宏汇编程序将为标号分别生成格式为“?XXXX”的唯一的符号以代替各局部标号。XXXX代表四位十六进制数0000FFFF。这样,在汇编源程序中,避免了多次宏调用时生成的标号重复。注意:LOCAL伪操作只能用在宏定义体内,而且必须是MACRO伪操作后的第一个语句,在MACRO与LOCAL不能
9、出现注释和分号标志。,例 定义取绝对值的宏指令如下:ABS MACRO OPS LOCAL PLUS CMP OPS,0 JGE PLUS NEG OPS PLUS:MOV AX,OPS ENDM宏调用:ABS CX MOV BX,AX ABS DX,宏展开后的指令为:1 CMP CX,01 JGE?00001 NEG CX1?0000:MOV AX,CX MOV BX,AX1 CMP DX,01 JGE?00011 NEG DX1?0001:MOV AX,DX,7.1.4 在宏定义内使用宏,宏定义中允许使用宏调用,限制条件是:必须先定义,dif macro x,y mov ax,x sub
10、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 dx1 push ax2 mov ax,var12 sub ax,var21 mov var3,ax1 pop ax1 pop dx,7.1.5 列表伪操作,Masm提供了.xall,.lall,sall来控制汇编清单中宏展开的列出情况.xall 为默认情况,它指示清单中只列出产生目标 代码的宏展开;.lall 列出包括注
11、释在内的所有宏展开;.sall 则不列出任何信息;,如果程序中定义了很多宏,可以把这些宏组合起来建立一个独立的文件,这个只包含若干个宏定义的文件称为宏库。扩展名是mac 或inc来表示。当需要使用宏库中的某些宏定义时,只需要在该程序的开始用INCLUDE语句说明 INCLUDE C:MACRO.MAC,7.1.6 宏库的建立与调用,宏汇编程序提供了伪操作PURGE,用来在适当的时候取消宏定义。PURGE伪指令的一般格式是:PURGE 宏定义名,方括号表示PURGE可以取消多个宏定义,宏名之间用逗号隔开。如宏定义:SUB MACRO VARX,VARY,RESULT ENDM宏调用:SUB X,
12、Y,Z PURGE SUB,7.1.7 伪指令PURGE,7.2 重复汇编,其一般格式为:REPT 表达式(重复块)ENDM 其中,REPT和ENDM必须成对出现,两者间的重复块是要重复汇编的部分。表达式的值用来表示重复块的重复汇编次数。重复伪操作不一定要用在宏定义体内。,7.2.1 定重复伪指令REPT,有时汇编语言程序要连续地重复完成相同或者几乎完全相同的一组代码,这时可用重复汇编。,例 有下列语句:NUM=0 REPT 10 NUM=NUM1 DB NUM ENDM 汇编后,将数据1,2,3,10分配给十个连续的字节单元:1 DB 11 DB 21 DB 3 1 DB 10,7.2.2
13、不定重复伪指令IRP,其一般格式为:IRP 形参,参数1,参数2,(重复块)ENDM 此伪指令重复执行重复块中所包含的语句,重复的次数由参数表中的参数个数决定。重复汇编时,依次用参数表中的参数取代形参,直到表中的参数用完为止。参数表中的参数必须用两个三角号括起来,参数可以是常数、符号、字符串等,各参数间用逗号隔开。,例 多次将AX、BX、CX、DX寄存器内容压栈,宏定义如下:PUSHR MACRO IRP REG,AX,BX,CX,DX PUSH REG ENDM ENDM汇编后:1 PUSH AX1 PUSH BX1 PUSH CX1 PUSH DX,7.2.3 不定重复字符伪指令IRPC,
14、其语句格式为:IRPC 形参,字符串(或字符串)(重复块)ENDM 此伪指令重复执行重复块中的语句,重复汇编的次数等于字符串中字符的个数。每次重复执行时,依次用字符串中的一个字符取代形参,直到字符串结束。可见IRPC伪指令与IRP伪指令类似,只是IRPC用字符串(其三角括号可以有也可以无)代替了IRP伪指令中的参数表。,例:Irpc x,01234567Db x+1Endm汇编后:Db 11 Db 2 1 Db 8,再如:可用IRPC实现:PUSHR MACRO IRPC REG,ABCD PUSH REG&X ENDM ENDM同样,汇编后也可得到:1 PUSH AX1 PUSH BX1 P
15、USH CX1 PUSH DX,7.3 条件汇编,汇编程序能根据条件把一段源程序包括在汇编语言程序内的或排除在外,这里就用到条件伪操作。条件伪操作的一般格式是:,Ifxx argument;自变量满足条件汇编此块ELSE;自变量不满足条件汇编此块 ENDIF,说明:汇编程序在对源程序汇编时,要对源程序扫描二遍。第一遍建立符号表,第二遍才把汇编语言指令翻译成机器语言指令。那么自变量必须在汇编程序第一遍扫视后就成为确定的数值。,IF expression;汇编程序求出表达式的值,如此值不为0,则 满足条件.IFE expression;汇编程序求出表达式的值,如此值为0,则 满足条件.,例:宏指令
16、MAX把三个变元中的最大值放在AX中,而且使变元数不同时产生不同的程序段。,7.3.1,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 ENDIFNEXT:CMP B,AX JLE OUT MOV AX,B ENDIFOUT:ENDM,宏调用:MOV 1,PMOV 2,P,QMOV 3,P,Q,宏展开:MOV 1,PMOV AX,P1?0002:MAX 2,P,QJLE?00001 MOV AX,Q1?0003:,MAX 3,P,Q,R1 MOV AX,P 1 CMP R,AX
17、 1 JLE?0004 MOV AX,R1?0004:CMP Q,AX1 JLE?0005 MOV AX,Q1?0005,BRANCH MACRO X IF($-X)LT 128 JMP SHORT X ELSE JMP NEAR PTR X ENDIF ENDMLAB:MOV AX,BX BRANCH LAB JMP SHORT LAB,该宏要完成什么功能。,宏定义允许递归调用,power macro x,n sal x,1 count=count+1 if count-n power x,n endifEndm宏调用:count=0 power ax,3宏展开:Sal ax,1Sal ax
18、,1Sal ax,1,IF1;在汇编程序的第一遍扫视期间满足条件IF2;在汇编程序的第二遍扫视期间满足条件 说明:汇编程序在对包括宏库的源程序汇编时也分两次扫描,第一次将宏库及程序中的宏定义登入宏定义表,第二次 扫描时进行宏扩展,形成列表文件。大家看书上268页的例.24,然后和259页的例7.12比较看有什么不同?IFB;如自变量为空,则满足条件 IFNB;如自变量不为空,则满足条件注意:自变量用“”括起来,7.3.2,7.3.3,例:宏指令 GOTO L,X,REL,Y 可以根据不同情况产生无条件转移指令或比较和条件转移指令。宏定义:,GOTO MACRO L,X,REL,Y IFB JM
19、P L ELSE MOV AX,X CMP AX,Y J&REL L ENDIF ENDM宏调用:GOTO LOOP1,SUM,NZ,15 GOTO EXIT,宏展开:MOV AX,SUM CMP AX,15 JNZ LOOP1 JMP EXIT,DISP MACRO CHAR IFB MOV DL,ELSE MOV DL,CHAR ENDIF MOV AH,02H INT 21H ENDM宏调用:DISP A DISP,下面程序要完成什么样的功能?,IFDEF symbol;如符号已在程序中定义,或者用extrn说明该符号是在外部定义的,则满足条件。IFNDEF symbol;如符号未定义或
20、未通过EXTRN说明为外部符号则满足条件。,7.3.4,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
21、,cx endm,MOVDIF MACRO X IFIDN,REP MOVSB ELSE REP MOVSW ENDIF ENDM,宏调用:MOVDIF B宏展开:1 REP MOVSB,IFIDN,;如果字符串和字符串相同,则满足条件。IFDIF,;如果字符串和字符串不相同,则满足条件。在格式中,两个参数必须用尖括号括起,7.3.5,例 编写一个可用功能调用输入字符的宏定义。READCH MACROchar MOV AH,1H INT 21H;接受一个字符,并存入AL中IFNB;若参数char有实参与之对应 IFDIF,;若参数charAL,则把所输入字符保存到实参中 MOVchar,AL
22、ENDIFENDIFENDM,1.在DEBUG上机调试程序时,存储器地址表示为12FA:015F,它的物理地址是()。a.12FAH b.1305FH c.130FFH d.015FH2.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,15.使进位位置1的指令是()。a.CLC
23、b.CMC c.STC d.NOP,6.设AL=-15,要使AL=15应执行的指令是()。a.NEG AL b.NOT AL c.INC AL d.DEC AL7.在条件转移指令中,结果为负数则转移的指令是()。a.JNS b.JX c.JS d.JP8.下面的XCHG指令中,语法正确的是()。a.XCHG AL,DS b.XCHG BL,BX c.XCHG AL,0FH d.XCHG BUF1,BUF29.一条指令中目的操作数不允许使用的寻址方式是()。a.寄存器寻址 b.立即数寻址 c.变址寻址 d.寄存器间接寻址10.设SP=1FFEH,执行下列指令后,SP寄存器的值是()。POPF P
24、USH AX a.2000H b.2002H c.1FFCH d.1FFEH,1 下列标号不合法的是:AMOV B.WANG C.F8 D.AB32 语句DADA DW AB,CD,E,F汇编后占用的存储空间是:A4个字节 B.8个字节 C.6个字节 D.5个字节3 PSW中使用的标志位以及其中的状态标志位、控制标志位的位数分别是:A9,6,3 B.9,8,1 C.9,7,2 D.16,9,74 指令ADD AX,BXDI中源操作数的寻址方式是:A段内寄存器间接寻址 B.段间寄存器间接寻址 C基址加变址寻址 C.寄存器寻址5 在伪指令语句NUMBER DW 1234H中的NUMBER项称为:A
25、标号 B.变量 C.伪操作符 D.数据,6 在存储器中保留待定的10个字节单元的伪指令语句是:ANUMB 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.CLD9 下列叙述不正确的是:A.立即数不能直接送段寄存器。B.目的操作数不能是立即数和段寄存器。C.不能在两个存储单元间直接传送数据。D.两个段寄存器之间不能直接传送数据。10 汇编语言在程
26、序设计语言家族中属于:A.第一代语言 B.第二代语言 C.第三代语言 D.第四代语言,1、设DS=8225H,DI=3942H,指令NEGBYTEPTR DI操作数的物理地址是()A、85B92H B、86192H C、BB690H D、12169H2、下列寄存器组中在段内寻址时可以提供偏移地址的寄存器组是()A、AX,BX,CX,DX B、BX,BP,SI,DI C、SP,IP,BP,DX D、CS,DS,ES,SS3、循环指令LOOPNZ终止循环的条件是()。A、CX=0,且Z=0 B、CX=0,或Z=1 C、CX0,且Z=0 D、CX0,或Z=14、对寄存器AX的内容乘以4的正确指令序列
27、是()。A、SHRAX,1SHRAX,1 B、SHLAX,1SHL,AX,1 C、ROLAX,1 ROLAX,1 D、RCRAX,1 RCRAX,15、保存字除法商的寄存器是()。A、AX B、AH C、AL D、通用寄存器,6、设DH=10H,执行NEGDH指令后,正确的结果是()。A、DH=10HC=1 B、DH=0F0H C=0 C、DH=10HC=0 D、DH=0F0H C=17、下列传送指令中有语法错误的是()。A、MOVCS,AX B、MOVDS,AX C、MOVSS,AX D、MOVES,AX8、下面指令执行后,改变AL寄存器内容的指令是()。A、TESTAL,02H B、ORA
28、L,AL C、CMPAL,BL D、ANDAL,BL9、一条指令中目的操作数不允许使用的寻址方式是()A.寄存器寻址 B.立即数寻址 C.变址寻址 D.寄存器间接寻址10、执行下面指令序列后,结果是()。MOVAL,82H CBWA、AX=0FF82H B、AX=8082H C、AX=0082H D、AX=0F82H,1指令JMP FAR PTR DONE属于()。参考答案为:CA段内转移直接寻址B段内转移间接寻址C段间转移直接寻址D段间转移间接寻址2下列叙述正确的是()。参考答案为:CA对两个无符号数进行比较采用CMP指令,对两个有符号数比较用CMPS指令B对两个无符号数进行比较采用CMPS
29、指令,对两个有符号数比较用CMP指令C对无符号数条件转移采用JAE/JNB指令,对有符号数条件转移用JGE/JNL指令D对无符号数条件转移采用JGE/JNL指令,对有符号数条件转移用JAE/JNB指令3一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区最末一个字单元的物理地址是()。参考答案为:CA12CSBHB12B6BHC12C59HD12BFEH4在下列指令的表示中,不正确的是()。参考答案为:CAMOV AL,BX+SIBJMP SHORT DONICDEC BX DMUL CL5在进行二重循环程序设计时,下列描述正确的是()。参考答案为:AA外循环初值应
30、置外循环之外;内循环初值应置内循环之外,外循环之内B外循环初值应置外循环之内;内循环初值应置内循环之内C内、外循环初值都应置外循环之外D内、外循环初值都应置内循环之外,外循环之内,6条件转移指令JNE的测试条件为()。参考答案为:AAZF=0BCF0CZF=1DCF=178086CPU在基址加变址的寻址方式中,变址寄存器可以为()。参考答案为:DABX或CXBCX或SICDX或SIDSI或DI8已知BX=2000H,SI=1234H,则指令MOV AX,BX+SI+2的源操作在()中。参考答案为:AA数据段中偏移量为3236H的字节B附加段中偏移量为3234H的字节C数据段中偏移量为3234H
31、的字节D附加段中偏移量为3236H的字节9执行如下程序:MOV AX,0 MOV BX,1 MOV CX,100A:ADD AX,BX INC BX LOOP A HLT执行后(BX)=()。参考答案为:CA99 B100 C101 D10210上题的程序执行后(AX)=()。参考答案为:BA5000 B5050 C5100 D5150,1.在堆栈段中,存放栈顶地址的寄存器是()。A.IP B.SP C.BX D.BP 2.汇编语言程序中,反映指令操作结果的标志是()。A.状态标志 B.控制标志 C.ZF D.DF 3.书写汇编语言程序时规定,对字母开头的十六进制数,其前面必须加()。A.0
32、B.D C.B D.H 4.计算机中用来存储程序、数据等信息的记忆装置是()。A.控制器 B.运算器 C.CPU D.存储器 5.MOV SIBX,AL,该指令中自操作数采用的寻址方式是()。A.基址加变址 B.寄存器 C.寄存器间接 D.寄存器相对,6.MUL WORD PTRSI指令中的乘积是存放在()、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指令的功能与()指令功
33、能相类似。A.AND B.CMP C.SUB D.OR 10.在存储器中留60个字的空单元的伪指令是()。A.ARRAY EQU 60 B.ARRAY DW 60C.ARRAY DB 60 DUP(?)D.ARRAY DW 60 DUP(?),1.用DEBUG调试汇编语言程序时,显示某指令的地址是2F80:F400,此时段寄存器CS的值是()。A.F400H B.2F80H C.F4000H D.2F800H2.设DS=1100H,(12000H)=80H,(12001H)=20H,(12002H)=30H,执行MOV AX,1000H则AX=()。A.8000H B.0080H C.2080
34、H D.8020H3.下列四条指令中错误的是()。A.MOV AX,SI B.MOV AX,DIC.MOV AX,SI+DI D.MOV AX,SI-DI4.下列四条指令执行后不影响标志位的是()。A.JNC NEXT B.CMP AX,BX C.SHL AX,1 D.OR AL,AL5.已知AX=0001H,下列四条指令执行后,不能使ZF=1的语句是()。A.DEC AX B.SUB AX,1 C.AND AX,1 D.CMP AX,1,6.在8086/8088系统中,约定用于形成堆栈段数据物理地址的寄存器有()。A.SS,SP,BP B.SS,SP,BX C.DS,BX,BP D.DS,S
35、P,BP7.有指令MOV AX,1234H,指令中的立即数1234H是存储在()。A.数据段 B.代码段 C.附加段 D.堆栈段8.要在程序中定义缓冲区BUF,保留9个字节存储空间的语句是()。A.BUF DW 9 B.BUF DB 9C.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 DAA10.在执行子程序段内调用CALL SUBR指令后,SP的值()。A.加1 B.减
36、1 C.加2 D.减2,1Intel 8086 CPU的段寄存器有_。2Intel 8086 CPU的SP寄存器的主要作用是_。3(CS)=1000H,(DS)=2000H,(ES)=3000H,(SS)=4000H,(DI)=a100,操作数 DI+1000H 的寻址方式是_,物理地址是_。4 志寄存器中OF标志位的主要作用是_。5TEST指令的功能是_。6指令LEA_AX,SI+100H的具体操作是_。7有符号二进制字节数可表示的数的范围是_。8执行一条POP_AX指令后,SP的内容发生的变化是_。9AL寄存器的内容为28H,执行指令OR_AL,33H后,AL的值为_。10测试寄存器AL和
37、BL的值是否相等而不改变其值应使用指令_。,1.用户为了解决自己的问题,用汇编语言所编写的程序,称为()。目标程序源程序可执行程序汇编程序2.某系列微机对存储器的分段,如果每一个段最多的字存储单元(16位二进制)是32K,那么表示段内字节单元偏移地址的二进制位数应是()。20位16位15位12位3.可用作寄存器间接寻址或基址、变址寻址的地址寄存器,正确的是()。AX,BX,CX,DXDS,ES,CS,SSSP,BP,IP,BX SI,DI,BP,BX4.用一条指令仅实现将BX+SI=AX的方法是()。XCHGAX,BXSIMOVAX,BX+SILEAAX,BXSI LEAAX,BXSI5.设S
38、P初值为2000H,执行指令“PUSH AX”后,SP的值是()。1FFFH1998H2002H1FFEH,6.条件转移指令JB产生程序转移的条件是()。CF=1CF=0CF=1和ZF=1CF=1和ZF=07.选用串操作指令时,错误的操作是()。置方向标志位 根据串操作指令设置重复次数并送入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
39、=0CF=09.设AX=1000HNEGAXNOTAX执行上述指令后,正确的结果是()。AX=1001HAX=0FFFHAX=1000HAX=0111H10.CBW指令的功能是()。把源操作数的符号位扩展到目的操作数中把AL中的符号位扩展到AH中把AH中的符号位扩展到AL中 把AX中的符号位扩展到DX中,1.下列寄存器中,作为16位寄存器的是()。A.AL B.BL C.CH D.DX2.在程序运行过程中,确定下一条指令的物理地址的计算表达式是()。A.DS*16+SI B.ES*16+DI C.CS*16+IP D.SS*16+SP3.物理地址(10FF0H)=10H,(10FF1H)=20
40、H,(10FF2H)=30H,从地址10FF1H中取一个字的内容是()。A.1020H B.3020H C.2030H D.2010H4.将AX 清零,下列指令错误的是()。A.SUB AX,AX B.XOR AX,AX C.OR AX,00H D.AND AX,00H5.下列指令中,影响或修改标志位的是()。A.LOOPZ B.JNLE C.PUSHF D.POPF,6.设DS=8225H,DI=3942H,指令NEG BYTE PTRDI操作数的物理地址是()。A.85B92H B.86192H C.BB690H D.12169H7.通用数据传送指令中,错误的是()。A.累加器到存储器 B
41、.立即数到存储器 C.寄存器到存储器 D.存储器到存储器8.移位指令中,应先将移位次数放在()。A.AX B.AL C.CX D.CL9.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=010.下列语句中能实现留空8个字节单元的语句是()。A.DA1 DT?B.DA2 DW?,?C.DA3 DD?D.DA4 DQ?,1指令JMP FAR PTR DONE属于()。A.段内转移直接寻址 B.段内转移间接寻址C.段间转移直接寻址 D.段间转移间接寻址2执行下面指令序列后,结果
42、是()。MOV AL,82H CBW A.AX=0FF82H B.AX=8082H C.AX=0082H D.AX=0F82H38088/8086存储器分段,每个段不超过().A.64K个字 B.32K个字节 C.1兆个字节 D.64K个字节 4CPU发出的访问存储器的地址是()。A.物理地址 B.偏移地址 C.逻辑地址 D.段地址5BUF DW 10H DUP(3 DUP(2,10H),3,5)上述语句汇编后,为变量BUF分配的存储单元字节数是()。A.80H B.100H C.124 D.192,6若AX=-15要得到AX=15应执行的指令是()。A.NEG AX B.NOT AX C.I
43、NC AX D.DEC AX 78086/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,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,作业7-1 7-4 7-8 7-15,