《汇编语言第3章指令系统和寻址方式.ppt》由会员分享,可在线阅读,更多相关《汇编语言第3章指令系统和寻址方式.ppt(80页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、IBM-PC汇编语言程序设计第3章 指令系统和寻址方式(Instruction system and Addressing modeInstruction system and Addressing mode)指令简介:操作码 操作数 1.操作码 2.操作数:无操作数,单操作数,双操作数,三操作数3.1 寻址方式(Addressing modeAddressing mode)有效地址(EA):即上章的偏移地址 段超越 寻址方式(一)与数据有关的寻址方式1.立即数寻址(Immediate addressing)例:mov AL,5 (AL)=5用途:初始化 2.寄存器寻址(Register ad
2、dressing)例:mov AL,DH (AL)=(DH)mov BX,SI (BX)=(SI)寄存器有:AX,BX,CX,DX,SP,BP,SI,DI AH,AL,BH,BL,CH,CL,DH,DL 用途:单个数据传送以下五种寻址方式均对内存进行的物理地址=段首地址x16+EAEA=基址(base)+变址(index)+偏移量(displacement)3.直接寻址方式(Direct addressing)EA=displacement注:默认段是数据段物理地址=(DS)*16+EA 例:mov AL,1200H (DS)=1000H EA=1200H物理地址=DS*16+1200=112
3、00H 若:(11200)=3AH则,(AL)=3AH允许段超越。例:mov AL,ES:1200H用途:处理单个数据4.寄存器间接寻址方式(register indirect addressing)EA=基址(base)或变址(index)基址寄存器有:BX,BP变址寄存器有:SI,DI注:默认段是数据段和堆栈段 (SI)物理地址=(DS)*16+(BX)(DI)=(SS)*16+(BP)例:mov AX,BX (DS)=1000H (BX)=1200H物理地址=DS*16+(BX)=DS*16+1200=11200H 若:(11200)=34H,(11201)=12H则,(AX)=1234
4、H允许段超越。例:mov AL,ES:BX用途:处理成组数据(举例说明)5.寄存器相对寻址方式(register relative addressing)EA=基址(base)或变址(index)+偏移量(displacement)基址寄存器有:BX,BP变址寄存器有:SI,DI注:默认段是数据段和堆栈段 (SI)物理地址=(DS)*16+(BX)+displacement (DI)=(SS)*16+(BP)+displacement例:mov AX,VARBX (DS)=1000H,(BX)=1200H,VAR=1000H物理地址=DS*16+(BX)+VAR =DS*16+1200+100
5、0=12200H 若:(12200)=34H,(12201)=12H则,(AX)=1234H允许段超越。例:mov AL,ES:VARBX用途:处理成组数据(举例说明)6.基址变址寻址方式(based indexed addressing)EA=基址(base)+变址(index)基址寄存器有:BX,BP变址寄存器有:SI,DI注:默认段是数据段和堆栈段 物理地址=(DS)*16+(BX)+(SI)(DI)=(SS)*16+(BP)+(SI)(DI)例:mov AX,BXDI (DS)=1000H,(BX)=1200H,(DI)=1000H物理地址=DS*16+(BX)+(DI)=DS*16+
6、1200+1000=12200H 若:(12200)=34H,(12201)=12H则,(AX)=1234H允许段超越。例:mov AL,ES:BXDI用途:处理成组数据(举例说明)7.相对基址变址寻址方式(relative based indexed addressing)EA=基址(base)+变址(index)+偏移量(displacement)基址寄存器有:BX,BP变址寄存器有:SI,DI注:默认段是数据段和堆栈段 物理地址=(DS)*16+(BX)+(SI)+displacement (DI)=(SS)*16+(BP)+(SI)+displacement (DI)例:mov AX,
7、ARRAYBXDI (DS)=1000H,(BX)=1200H,(DI)=1000H,ARRAY=1000H物理地址=DS*16+(BX)+(DI)+ARRAY =DS*16+1200+1000+1000=13200H 若:(13200)=34H,(13201)=12H则,(AX)=1234H允许段超越。例:mov AL,ES:ARRAYBXDI用途:处理成组数据(举例说明)(二)与转移地址有关的寻址方式-寻找指令位置物理地址=CS*16+IP段内寻址:修改IP段间寻址:修改CS,IP1.段内直接寻址(intrasegment direct addressing)(IP)新=EA=(IP)旧+
8、D8或16 分类:短跳转 D8 例:JMP SHORT next近跳转 D16 例:JMP NEAR PTR AGAIN2.段内间接寻址(intrasegment indirect addressing)(IP)新=EA=寄存器或存储单元的内容寄存器:所有寄存器寻址方式可用的寄存器存储单元:所有存储单元寻址方式均适用例:JMP SI (IP)=(SI)JMP WORD PTR VAR或简写JMP VAR (DS)=1000H,VAR=2000H 存储单元的物理地址=(DS)*16+VAR=12000H (12000H)=1234H 则,(IP)新=1234H3.段间直接寻址(intersegm
9、ent direct addressing)(IP)新和(CS)新来源当前指令例:JMP FAR PTR NEXT 4.段间间接寻址(intersegment indirect addressing)(IP)新和(CS)新 来源存储单元的内容存储单元:所有存储单元寻址方式均适用例:JMP DWORD PTR VAR (DS)=1000H,VAR=2000H 存储单元的物理地址=(DS)*16+VAR=12000H (12000H)=1234H,(12002H)=2000H 则,(IP)新=1234H (CS)新=2000H 3.2 程序占用的空间和执行时间3.3 80X86的指令系统一、数据传
10、送指令1.通用数据传送指令MOV 传送(move)格式:MOV DST,SRC ;B/W/DW操作:(DST)(SRC)MOV mem/reg1,mem/reg2 MOV reg/mem,data MOV segreg,mem/reg MOV mem/reg,segreg*双操作数要求:除源操作数是立即数以外,两个操作数中必须有一个是寄存器。不允许向CS传送数据立即数不能向段寄存器传送数据不允许在两个段寄存器之间传送数据立即数不能作目的操作数双操作数,类型要匹配1.指出下列指令源操作数的寻址方式:(1)MOV SI,10 (2)MOV SI,DI+2(3)MOV SI,DI (4)MOV SI
11、,10(5)MOV SI,BX (6)MOV SI,5BX+DI(7)MOV SI,BP+DI (8)2.判断下列指令对错:(9)(1)MOV SS,1000H (2)MOV DS,ES(10)(3)MOV CS,AX (4)MOV 5,AL(11)(5)MOV AX,BL (6)MOV BX,SIPUSH 入栈指令(push onto the stack)格式:PUSH SRC ;W*单操作数:除立即数以外的其他寻址方式 push axPOP 出栈(pop from the stack)格式:POP DST ;W *CS 不能作操作数 POP word ptr BXXCHG 交换指令 格式:
12、XCHG OPR1,OPR2 *不能用于段寄存器,立即数或存储单元之间1.下列寄存器组中在段内寻址时可以提供偏移地址的是()A.AX,BX,CX,DX C.SP,IP,BP,DX B.BX,BP,SI,DI D.CS,DS,ES,SS2.8086/8088确定下一条执行指令物理地址的计算表达式是()A.(DS)16+EA B.(ES)16+EA C.(SS)16+EA D.(CS)16+EA 3.下列pop指令中错误的是()A.POP CS B.POP BETABX C.POP AX D.POP CX第3章 指令2.累加器专用传送指令IN 输入(input)长格式:(00HFFH)IN AL,
13、PORT ;B IN AX,PORT ;W 短格式:(0000HFFFFH)IN AL,DX ;B IN AX,DX ;WOUT 输出(output)长格式:(00HFFH)OUT PORT,AL ;B OUT PORT,AX ;W 短格式:(0000HFFFFH)OUT DX,AL ;B OUT DX,AX ;W例:某接口的命令寄存器(例:某接口的命令寄存器(port=126)的)的D7位控制成组位控制成组数据传送。发送成组传送命令。数据传送。发送成组传送命令。MOV DX,126H IN AL,DX OR AL,80H OUT DX,ALXLAT 换码指令(translate)*专用AL,
14、BX 表长不超过256例:例:LEA BX,TABLE ;(BX)=0040H MOV AL,3 XLAT 指令执行后指令执行后(AL)=33H(BX)30 H F004031 H F0041(AL)=3 32 H F0042 33 H F0043TABLE(DS)=F000H3.地址传送指令LEA 有效地址送寄存器(load effective address)格是:LEA REG,SRC *REG 不能用段寄存器(以下两个指令均是)例:LEA BX,LIST MOV BX,LIST LEA AX,BX AHFLAGSLDS REG,SRC 指针送寄存器和DS(load DS with po
15、inter)LES REG,SRC 指针送寄存器和ES(load ES with pointer)例:LDS BX,VAR以上指令均不影响标志位4.标志寄存器传送指令SAHF AH送标志寄存器(store AH into flags)LAHF 标志送AH(load AH with flags)AHFLAGSPUSHF push the flags POPF pop the flags 例:令flags中的TF=1 PUSHF POP AX OR AX,0100H PUSH AX POPF 5.类型转换 CBW 字节字(convert byte to word)AL AXCWD 字双字(conv
16、ert word to doubleword)(AX)(DX,AX)*以上指令除SAHF和POPF其他指令均不影响标志位m1010100mmmmmmmmm1010100第4章 伪指令一、程序开始和结束 开始:NAME 模块名或 title 结束:END 标号二、段的定义1.格式:段名 segment2.3.段名 ends2.ASSUME 段名与段寄存器的关系3.格式:4.ASSUME 段寄存器:段名,段寄存器:段名.3.取消段与段寄存器的关系4.ASSUME NOTHING5.或ASSUME 段寄存器:nothing,段寄存器:nothing.6.4.给段寄存器赋值三、数据定义与存储单元分配格
17、式:变量名 操作码 操作数,操作数,操作码:DB,DW,DD,DQ,DT操作数:1.可以是常数,表达式或地址2.例:VAR1 DW 1234H,5678H3.VAR2 DB 12*4+54.VAR3 DW VAR15.VAR4 DD VAR12.是字符串 例:STR1 DB A,B STR2 DW AB STR3 DB ABCDEF3.是空单元?例:array dw?,?4.复制操作符 DUP 格式:重复次数 dup (内容 )例:DW 100 DUP(?)DW 10 DUP(1,2,3 DUP(4,5),6)允许嵌套5.操作数类型匹配 例:VAR1 DB 12H,34H VAR2 DW 56
18、78H MOV AX,VAR1+1(错)MOV AL,VAR2+1 (错)MOV AX,WORD PTR VAR1+1 (AX)=7834H MOV AL,BYTE PTR VAR2+1 (AL)=56H1.将数据37H定义为字节变量X1的是();将其定义为字变量X2的是()。2.A.X1 DB 37 B.X2 DB 37 C.X1 DW 37H3.D.X2 DW 37H E.X1 DB 37H F.X2 DB 37H4.2.若要求不产生汇编错误,则字符串“ABC”只能出现在伪指令()中。A.DB B.DW C.DD D.DQ3.用一条指令实现(AX)(BX)+(SI)的方法是()A.XCHG
19、 BX,BXSI B.MOV AX,BXSI C.MOV AX,BX+SI D.LEA AX,BXSI二、算术指令1.加法指令ADD 加法(add)格式:ADD DST,SRC ;B/W (DST)(SRC)+(DST)ADC 带进位加法(add with carry)格式:ADC DST,SRC ;B/W (DST)(SRC)+(DST)+CF*ADD,ADC影响所有条件标志位CF,OF的表示含义 0255 -128127 二进制二进制 看作无符号看作无符号 看作有符号看作有符号(1)0000 0100 4 +4 +0000 1011 +11 +(+11)0000 1111 15 15 CF
20、=0 OF=0(2)0000 0111 7 +7 +1111 1011 +251 +(-5)10000 0010 258 +2 CF=1 OF=0(3)0000 1001 9 +9 +0111 1100 +124 +(+124)1000 0101 133 +133 CF=0 OF=1(-123)(4)1000 0111 135 (-121)+1111 0101 +245 +(-11)10111 1100 380 -132 CF=1(124)OF=1(124)结论:结论:CF用来表示无符号溢出;用来表示无符号溢出;OF用来表示有符号溢出用来表示有符号溢出例:双字加(DX,AX)+(BX,CX)(
21、DX,AX)=0001804FH (BX,CX)=0002D123H ADD AX,CX ADC DX,BX 1000 0000 0100 1111 0001H +1101 0001 0010 0011 0002H 10101 0001 0111 0010 +CF SF=0,OF=1,CF=1,ZF=0 4H SF=0,OF=0,CF=0,ZF=0 INC 加1指令 (increment)格式:INC OPR ;B/W (OPR)(OPR)+1*该指令除CF标志位外,影响其他所有标志位 2.减法指令SUB 减法(subtract)格式:SUB DST,SRC ;B/W (DST)(DST)-(
22、SRC)SBB 带借位减法(subtract with borrow)格式:SBB DST,SRC ;B/W (DST)(DST)-(SRC)-CFSub,sbb影响所有条件标志位DEC 减1指令 (decrement)格式:DEC OPR ;B/W (OPR)(OPR)-1*该指令除CF标志位外,影响其他所有标志位NEG 求补指令 格式:NEG OPR ;B/W (OPR)0-(OPR)CMP 比较(compare)格式:CMP OPR1,OPR2 ;B/W (OPR1)-(OPR2)neg,cmp影响所有条件标志位例:双字减(DX,AX)-(BX,CX)(DX,AX)=0005404FH
23、(BX,CX)=00029123H SUB AX,CX SBB DX,BX 1 0100 0000 0100 1111 0005H -1001 0001 0010 0011 0002H 1010 1111 0010 1100 -CF SF=1,OF=1,CF=1,ZF=0 2H SF=0,OF=0,CF=0,ZF=0例:编程 X-Y+Z-80W,其中X,Y,Z,W 均为双字存于数据段 DATA SEGMENT X DW 34H,12H Y DW 78H,56H Z DW 11H,77H W DW 2 DUP(?)(?)DATA ENDS CODE SEGMENT ASSUME CS:CODE,
24、DS:DATA MOV AX,DATA MOV DS,AX MOV AX,X SUB AX,Y MOV DX,X+2 SBB DX,Y+2 ;(DX,AX)X-Y ADD AX,Z ADC DX,Z+2 ;(DX,AX)X-Y+Z SUB AX,80 SBB DX,0 ;(DX,AX)X-Y+Z-80 MOV W,AX MOV W+2,DX MOV AH,4CH INT 21H CODE ENDS END3.乘法指令MUL 无符号乘(unsigned multiple)格式:MUL SRC ;B/W (AX)(AL)*(SRC)B (DX,AX)(AX)*(SRC)W IMUL 带符号乘(si
25、gned multiple)格式:IMUL SRC ;B/W (AX)(AL)*(SRC)B (DX,AX)(AX)*(SRC)W*只影响of和cf,其他标志位无定义4.除法指令DIV 无符号除(unsigned divide)格式:DIV SRC ;B/W (AL)(AX)/(SRC)B的商 (AH)(AX)/(SRC)B的余数 (AX)(DX,AX)/(SRC)W的商 (DX)(DX,AX)/(SRC)W的余数 IDIV 带符号除(signed divide)格式:IDIV SRC ;B/W (AL)(AX)/(SRC)B的商 (AH)(AX)/(SRC)B的余数 (AX)(DX,AX)/
26、(SRC)W的商 (DX)(DX,AX)/(SRC)W的余数*对所有标志位无定义,余数符号与被除数相同例:编程(W-(X*Y-Z+40)/X,其中W,X,Y,Z为带符号字数据 MOV AX,X IMUL Y ;(DX,AX)X*Y MOV CX,DX MOV BX,AX ;(CX,BX)X*Y MOV AX,Z CWD ;(DX,AX)Z(32位)SUB BX,AX SBB CX,DX ;(CX,BX)X*Y-Z ADD BX,40 ADC CX,0 ;(CX,BX)X*Y-Z+40 MOV AX,W CWD ;(DX,AX)W(32位)SUB AX,BX SBB DX,CX ;(DX,AX)
27、W-(X*Y-Z+40)IDIV X5.十进制调整指令 概念:压缩BCD码(packed BCD format)非压缩BCD码(unpacked BCD format)调整原理:AF之间的数据 最高位有进位 原值+(-)6进行调整(1)压缩BCD码调整指令DAA 加法调整指令(decimal adjust after addition)操作:先做加法,和放在AL;对AL调整后把结果放 回AL。例:(BCD1)+(BCD2)=(BCD3)MOV AL,BCD1 ADD AL,BCD2 DAA MOV BCD3,ALDAS 减法调整指令(decimal adjust after substract
28、ion)操作:先做减法,差放在AL;对AL调整后把结果放 回AL。*以上两个指令除对OF无定义以外,影响所有其他标志位(2)非压缩BCD码调整指令AAA 加法调整指令(ASCII adjust after addition)操作:先做加法,和放在AL;对AL调整后把结果放 回AL。AAS 减法调整指令(ASCII adjust after substraction)操作:先做减法,差放在AL;对AL调整后把结果放 回AL。*以上两个指令只对AF和CF有影响例:MOV AH,0 MOV AL,8 ADD AL,2 AAA ;(AX)=0100HAAM 乘法调整指令(ASCII adjust af
29、ter multiplication)操作:先做乘法,积放在AL;对AL调整后把结果放回AX。调整过程:AL/10,商放在AH中,余数放在AL中。要求:乘之前,BCD码高四位清零例:VAR DB 05,06 MOV BL,VAR MOV AL,VAR+1 MUL BL AAMAAD 除法调整指令(ASCII adjust after division)操作:先调整,后做除法。调整过程:(AL)10*(AH)+(AL),AH0。例:MOV AX,0307H AAD ;(AX)=0025H MOV BL,5 DIV BL*以上两个指令,对CF、OF和AF均无定义1.执行下面指令序列后,结果是()M
30、ov al,82h cbw A.(AX)=0FF82H B.(AX)=8082H C.(AX)=0082H C.(AX)=0F82H2.下列指令中错误的是()A.ADD BX,A B.MUL 24 C.IN AL,DX D.SUB AX,05H3.下列4条指令MUL BX DIV BLIN AX,20H OUT 21H,AL中,有()条指令需要使用DX寄存器。A.1 B.2 C.3 D.4 三、逻辑指令1.逻辑运算指令(Boolean and Comparison Instructions)AND 逻辑与(and)格式:AND DST,SRC ;B/W操作:(DST)(DST)(SRC)用于:
31、屏蔽某些位OR 逻辑或(or)格式:OR DST,SRC ;B/W操作:(DST)(DST)(SRC)用于:某些位置1或数据组合XOR 逻辑异或(xor)格式:XOR DST,SRC ;B/W操作:(DST)(DST)(SRC)用于:某些位取反;初始化寄存器TEST 测试(test)格式:TEST OPR1,OPR2 ;B/W操作:(OPR1)(OPR2)用于:用于条件转移的判定条件*以上所有指令,除对AF无定义外,影响所有标志位,且CF=OF=0NOT OPR 非 操作:(OPR)(OPR)*该指令不影响标志位例:屏蔽例:屏蔽AL的的0、1两位两位 AND AL,0FCH例:置例:置AL的的
32、D5位为位为1 OR AL,20H 例:使例:使AL的的0、1位变反位变反 XOR AL,3例:测试某些位是例:测试某些位是0是是1 TEST AL,1 JZ EVEN *AND 1 1 1 1 1 1 0 0 *0 0 *OR 0 0 1 0 0 0 0 0 *1*XOR 0 0 0 0 0 0 1 1 *2.移位指令(shift and rotate Instructions)SHL 逻辑左移(shift logical left)格式:SHL OPR,CNT ;B/W 0SHR 逻辑右移(shift logical right)格式:SHR OPR,CNT ;B/W 0SAL 算术左移(
33、shift arithmetic left)格式:SAL OPR,CNT ;B/W(同SHL)SAR 算术右移(shift arithmetic right)格式:SAR OPR,CNT ;B/WCFCFCF*以上四个指令,除AF无定义,影响所有标志位例:编程实现Z=X*10分析:X *10=X*23+X*2 DATA SEGMENT X DW 30 Z DW?DATA ENDS CODE SEGMENT ASSUME CS:CODE ,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AX,X SHL AX,1 MOV BX,AX ;BX=AX=X*2 MOV
34、CL,2 SHL BX,CL ;BX=X*8 ADD AX,BX MOV Z,AX MOV AH,4CH INT 21H CODE ENDS END START ROL OPR,CNT 循环左移(rotate left)ROR OPR,CNT 循环右移(rotate right)RCL OPR,CNT 带进位循环左移(rotate left through carry)RCR OPR,CNT(带进位循环右移 rotate right through carry)*以上四个指令,除CF和OF外,不影响其他标志位 CF CF CF CF指出下列指令中哪些是非法的,并说明原因1.MOV SS,200
35、0H 2.PUSH CS3.XCHG AL,100 4.SHL AH,45.IN AL,21H 6.OUT 300H,AX7.OR AX,CS 8.SUB SI,BP9.CMP 20BX,VARSI10.MUL 10011.IDV BX12.LEA VAR,AX四、串操作指令1.与REP配合工作的 MOVS/STOS/LODS REP 重复(repeat)格式:REP MOVS/STOS/LODS 操作:(1)如(CX)=0则退出REP,否则转(2)(2)(CX)(CX)-1 (3)执行MOVS/STOS/LODS (4)重复(1)(3)MOVS 串传送指令(move string)格式:格式
36、:MOVS DST,SRC MOVSB(字节)(字节)MOVSW(字)(字)操作:操作:(1)(DI)(SI)(2)字节操作:字节操作:(SI)(SI)1,(DI)(DI)1 字操作:字操作:(SI)(SI)2,(DI)(DI)2 方向标志方向标志DF=0时用时用+,DF=1时用时用-。DF=0 DF=1(SI)低地址低地址高地址高地址数据段数据段附加段附加段(SI)(DI)(DI)执行执行REP MOVS之前,应先做好:之前,应先做好:(1)源串首地址(末地址)源串首地址(末地址)SI(2)目的串首地址(末地址)目的串首地址(末地址)DI(3)串长度)串长度 CX(4)建立方向标志()建立方
37、向标志(CLD使使DF=0,STD使使DF=1)例:例:datarea segment mess1 db personal_computerdatarea endsextra segment mess2 db 17 dup(?)extra endscode segment lea di,mess2 lea si,mess1 mov cx,17 cld rep movsb code endslea si,mess1+16 lea di,mess2+16 mov cx,17 std rep movsbSTOS 存入串指令(store into string)格式:STOS DST STOSB(字节
38、)STOSW(字)操作:字节操作:(DI)(AL),(DI)(DI)1 字操作:(DI)(AX),(DI)(DI)2例:把附加段中的5个字节缓冲区置为20Hlea di,mess2mov al,20Hmov cx,5cldrep stosbLODS 从串取指令(load from string)格式:LODS SRC LODSB(字节)LODSW(字)操作:字节操作:(AL)(SI),(SI)(SI)1 字操作:(AX)(SI),(SI)(SI)2注意:*LODS指令一般不与REP联用 *源串必须在数据段中,目的串必须在附加段中,但源串允许使用段跨越前缀来修改。*串长度送到CX中 *不影响条件
39、标志位 2.与REPE/REPZ和REPNE/REPNZ配合工作的CMPS和SCASREPE/REPZ(REPNE/REPNZ)格式:REPE/REPZ(REPNE/REPNZ)CMPS/SCAS 操作:(1)如(CX)=0或ZF=0(ZF=1)则退 出,否则转(2)(2)(CX)(CX)-1 (3)执行CMPS/SCAS (4)重复(1)(3)CMPS 串比较指令 (compare string)格式:CMPS SRC,DST CMPSB(字节)CMPSW(字)操作:(1)(SI)-(DI)根据比较结果设置条件标志位:相等 ZF=1,不等 ZF=0 (2)字节操作:(SI)(SI)1,(DI
40、)(DI)1 字操作:(SI)(SI)2,(DI)(DI)2例:比较两个字符串,找出它们不相匹配的位置 lea si,mess1 lea di,mess2 mov cx,8 cld repe cmpsbSCAS 串扫描指令(scan string)格式:SCAS DST SCASB(字节)SCASW(字)操作:字节操作:(AL)-(DI),(DI)(DI)1 字操作:(AX)-(DI),(DI)(DI)2例:从一个字符串中查找一个指定的字符,找出它的位置 mess db COMPUTERlea di,messmov al,Tmov cx,8cldrepne scasb(DI):相匹配字符的下一
41、个地址(CX):剩下还未比较的字符个数*这两条指令影响所有标志位COMPUTER(di)COMPUTER(di)1.串操作指令中,目的串操作数一定放在()段中。2.在串操作指令前使用REPE,终止串的重复操作条件是()3.A.CX=0且ZF=0 B.CX=0且ZF=14.C.CX=0或ZF=0 D.CX=0或ZF=15.3.说明下列程序段的功能:6.SHL DX,17.SHL AX,18.ADC DX,09.SHL BX,110.ADC AX,0五、控制转移指令(都不影响标志位)1.无条件转移指令(unconditional jump instruction)JMP(与转移地址有关的寻址方式相
42、同)2.条件转移指令(conditional jump instructions)(1)根据单个条件标志的设置情况转移:格式 测试条件 JZ(JE)OPR ZF=1 JNZ(JNE)OPR ZF=0 JS OPR SF=1 JNS OPR SF=0 JO OPR OF=1 JNO OPR OF=0 JP OPR PF=1 JNP OPR PF=0 JC OPR CF=1 JNC OPR CF=0*只能使用段内直接寻址的只能使用段内直接寻址的8位位移量(位位移量(-128127)(2)两个无符号数比较,并根据比较结果转移:A-B 格式 测试条件 JB(JNAE,JC)OPR CF=1 JNB(J
43、AE,JNC)OPR CF=0 JBE(JNA)OPR CFZF=1 JNBE(JA)OPR CFZF=0(3)两个带符号数比较,并根据比较结果转移:*A-B 格式 测试条件 JL(JNGE)OPR SFOF=1 JNL(JGE)OPR SFOF=0 JLE(JNG)OPR (SFOF)ZF=1 JNLE(JG)OPR (SFOF)ZF=0测试CX的值为0则转移:格式:JCXZ OPR 测试条件:(CX)=0例:X50,转到TOO_HIGH;计算X-Y,溢出转到OVERFLOW,否则|X-Y|RESULT,X、Y为字。MOV AX,XCMP AX,50JG TOO_HIGHSUB AX,YJO
44、 OVERFLOWJNS NONNEGNEG AX NONNEG:MOV RESULT,AXTOO_HIGH:OVERFLOW:例:、是双精度数,分别存于(DX,AX)及(BX,CX)中,时转X,否则转Y。CMP DX,BXJG XJL YCMP AX,CXJA XY:.X:.4.循环指令LOOP 指令 格式:LOOP OPR 操作:在进行循环次数的计数,即CX=(CX)-1 后,若(CX)0,则转移到OPR,否则顺 序执行。该指令相当于:DEC CX JNE 短标号LOOPELOOPZ指令 格式:LOOPE OPR 或者 LOOPZ OPR 操作:在进行循环次数的计数,即CX=(CX)-1后
45、,若(CX)0且 ZF1,则转移到目标单元,否则顺序执行。LOOPNELOOPNZ指令 格式:LOOPNE OPR 或者 LOOPNZ OPR 操作:在进行循环次数的计数,即CX=(CX)-1后,如(CX)0且ZF0,则转移到目标单元,否则顺序执行。例:在L个字符的字符串(ASCII_STR)中,查找“空格”,没找到转到NOT_FOUND。MOV CX,L MOV SI,0 MOV AL,20H NEXT:CMP AL,ASCII_STRSI INC SI LOOPNE NEXT JNZ NOT_FOUND .NOT_FOUND:例:在L个字符的字符串(ASCII_STR)中,查找“空格”,没找到转到NOT_FOUND。MOV CX,L MOV SI,-1 MOV AL,20H NEXT:INC SI CMP AL,ASCII_STRSI LOOPNE NEXT JNZ NOT_FOUND .NOT_FOUND:六、处理机控制指令CLC CF0CMC CFCFSTC CF1CLD DF0STD DF1CLI IF0 STI IF1本章小结:主要掌握六大类指令以及它们对标志位影响的实际意义
限制150内