1、第三章 8086指令系统,3.1 指令格式/寻址方式 3.2 8086 指令系统概述 3.3 8086指令系统数据传送指令算术运算指令逻辑运算、移位、循环指令串操作指令控制转移指令处理器控制指令 第三章小结 第三章思考题,重 点,汇编语言指令格式与寻址方式 8086的寻址方式 8086指令系统,3-1 汇编语言指令格式与 寻址方式,3-1-1 汇编语言指令格式 1.标号、标示符2.指令助记符 3.操作数 4.注释,指令助记符,操作数,注释,3-1 -2 8086的寻址方式,对操作数寻址 寻址方式 对调用或转移指令寻址一、立即数寻址:操作数由指令提供.例: MOV AL,80 HMOV AX,1
2、090 HMOV CX,100,数据,指令,二、直接寻址操作数在存储器中,其地址由指令 提供。例:MOV AX, 1070 H 若 DS = 2000 H,物理地址为:21070 H21071 HAX = 3020 H,MOV BX,CS: 3000 H MOV AH, 1000 H 21000 H 三、寄存器寻址操作数在寄存器中。MOV AH,BLMOV AX,BXMOV CX,AX,56 H,四、寄存器间接寻址操作数在存储器中,存储器的有效地址由寄存器指出。,1、以BX寄存器进行间接寻址数据段基址寻址例: 若 DS = 2000 H,ES = 3000 H,BX = 1000 H1)MOV
3、 AX,BXAX 21000 H 21001 HAX = 5B40 H MOV CX,ES:BXAX 31000 H 31001 H,2、以BP寄存器进行间接寻址堆栈段基址寻址MOV AX,BP若 SS = 5000 H,BP = 3000 H,将 53020 H、53021 H 单元的内容送 AX。执行结果: AX = 4A56 H3、以SI、DI寄存器进行间接寻址变址寻址1) MOV AX,SI若 CS = 3000 H,SI = 4000 H,EA=4000H,物理地址=34000H,执行结果: AX=201A H,2)MOV BX,DI若 DS = 5000 H,DI = 0200 H
4、 执行结果:BX 50201 H50200 HBX = 3220 H4、以BX、BP和SI、DI寄存器组合起来进行间接寻址基址加变址的寻址,例:若 BX = 5000 H,SI =2000 H,DS =4000 H, SS = 1000 H,BP = 3100 H。MOV AX,BX+SI; EA=5000+2000=7000H,AX 47001 H 47000 HAX = 2A32 H 相对的基址加变址的寻址:MOV AX,BP + SI + 0020 H;EA=3100+2000+0020=5120H,例:设 BX = 0158 H,DI = 10A5 H,DS = 2100 H,位移量
5、= 1B57 H,DS 作为操作数的段寄存器。 1)直接寻址: MOV AX,1B57 H有效地址 = 1B57 H物理地址 = 21000 H+1B57 H = 22B57 H 2)寄存器间接寻址: MOV AX,BX有效地址 = 0158 H物理地址 = 21000 H + 0158 H = 21158 H 3)BX寄存器相对间接寻址: MOV AX,BX+1B57H有效地址 = 0158 H + 1B57 H = 1CAF H物理地址 = 21000 H + 1CAF H = 22CAF H 4)变址寻址: MOV AX,DI,有效地址 = 105A H物理地址 = 21000 H+10
6、5A H = 220A5 H 5)DI寄存器相对变址寻址: MOV AX,DI+1B57H有效地址 = 105A H + 1B57 H = 2BFC H物理地址 = 21000 H + 2BFC H = 23BFC H 6)基址加变址的寻址 : MOV AX,BX + DI有效地址 = 0158 H+105A H = 11FD H物理地址 = 21000 H + 11FD H = 221FD H 7)相对的基址加变址的寻址:MOV AX,BX + DI+1B57 H有效地址 = 0158 H+105A H + 1B57 H = 2D54 H物理地址 = 21000 H + 2D54 H = 2
7、3D54 H,寄存器相对寻址,寄存器寻址,寄存器间接寻址,指令 内存,EA,数 据,直接寻址,基址寄存器 变址寄存器,变址值,基址值,+,数据,内存,指令,基址加变址寻址,相对的基址加变址,3 - 2 8086 指令系统的概述,指令格式 指令执行时间 3. 2.1 指令格式 8086 的指令为 1 6字节 1、操作码域: 一般用指令的第一个字节或者头两个字节 表示指令的操作码和寻址方式操作码域。,单字节指令(隐含的操作数)单字节指令(寄存器模式)寄存器到寄存器不带位移量的寄存器和内存之间的传送带位移量的寄存器和内存之间的传送(设位移量为 16 位)立即数送寄存器(设立即数为 16 位)立即数送
8、内存(设带 16 位位移量)图 3 - 3 8086 指令格式举例,操作码,操作码 REG,操作码,操作码,操作码,操作码,操作码,11 REG R/M,MOD REG R/M,MOD REG R/M,11 REG R/M,MOD 操作码 R/M,位移量低位,位移量高位,位移量高位,位移量低位,数据低位,数据高位,数据高位,数据低位,REG寄存器 MOD模式 R/M寄存器或内存,操作码:指出执行这条指令时,CPU 要做什么操作。(OP)一般用指令的一个字节表示,有时由于用 8 位还不够,常在指令的第二个字节中还可占有 3 位操作码。 指令的第一字节:wd立即方式寻址时,操作码中用 S 位表示符
9、号扩展s=1,将 8 位立即数扩展成 16 位数时,OP d/s w,w=1,对字进行操作 w=0,对字节进行操作,d=1,目的操作数 d=1,源操作数,2、操作数域:操作码域后面所跟的字节一般统 称为操作数域。 2 字节的有效地址(直接寻址); 1 字节或者 2 字节的位移量; 1 字节或者 2 字节的立即数; 1 字节或者 2 字节的位移量,后面再跟 1 字节或者 2 字节的立即数; 2 字节的位移量和 2 字节的段地址(只对段间接转移而言)。 指令:,单操作数指令 双操作数指令,3.2.2 指令执行时间指令执行时间:由时钟周期长短和执行指令所需要 的时钟周期数决定。访问内存操作执行一条指
10、令的时间为基本执行时间 加上计算有效地址所需要的时间。(计算有效地址所需 要时间由寻址方式决定。,表 3 - 4 计算有效地址的时间寻 址 方 式 计算有效地址所需时钟数直接寻址 6寄存器间接寻址 5相对的寄存器间接寻址 9基址变址寻址 7 基址变址寻址 8相对基址变址寻址 11 相对基址变址寻址 12, BP + DI BX + SI , BP + SI BX + DI ,BP+DI+位移量 BX+SI+位移量,BP+DI+位移量 BX+SI+位移量,表 3 - 5 指令执行时间计算举例指 令 所需的时钟数 访问内存次数寄存器到寄存器 3 0内存到寄存器 9+EA 1 ADD或SUB 寄存器
11、到内存 16+EA 2立即数到寄存器 4 0立即数到内存 17+EA 2 累加器到内存 10 1内村到累加器 10 1 MOV 寄存器到寄存器 2 0内存到寄存器 8+EA 1寄存器到内存 9+EA 1立即数到寄存器 4 0立即数到内存 10+EA 1MOV 寄存器到段寄存器 2 0内存到段寄存器 8+EA 1,段寄存器到寄存器 2 0段寄存器到内存 9+EA 1累加器和 8 位寄存器乘 7077 0累加器和 16 位寄存器乘 118133 0MUL 累加器和内存字节乘 (7683)+EA 1累加器和内存字乘 (124139)+EA 1累加器和 8 位寄存器乘 8098 0累加器和 16 位寄
12、存器乘 128154 0IMUL 累加器和内存字节乘 (86104)+EA 1累加器和内存字乘 (134160)+EA 1除数在 8 位寄存器中 8090 0除数在 16 位寄存器中 144162 0DIV 除数为 8 位内存字节 (8696)+EA 1除数为 16 位内存字 (150168)+EA 1除数在 8 位寄存器中 101112 0IDIV 除数在 16 位寄存器中 165184 0,IDIV 除数为 8 位内存字节 (107118)+EA 1除数为 16 位内存字 (171190)+EA 1 在寄存器中移 1 位 2 0在寄存器中移若干位 8+4*位数 0循环和移位 内存数据移 1
13、 位 15+EA 2内存数据移若干位 20+4*位数+EA 2段内直接转移 15 0段间直接转移 15 0JMP 段内间接转移 24+EA 2段间间接转移 18+EA 1寄存器模式段间间接转移 11 0JCXZ 6(不转移) 0 条件转移 18(转移) 0其他条件转移指令 4(不转移) 016(转移) 0,思考题,1、若SS=1000H,BP=2000H,DS=5000H,BX=4000H,说明下列指令的执行结果。MOV AX,2C10HMOV AX,2C10HMOV AX,BX+1C00HMOV BX,BP+0120HMOV AX,BP+ SIMOV AH,BX+SI,3-3 8086指令系
14、统,数据传送指令 算术运算指令 逻辑运算、移位、循环指令 串操作指令 控制转移指令 处理器控制指令,3-3-1、数据传送指令,MOV LEA PUSH LDS POP LES XCHG LAHF PUSHF XLAT SAHF POPF IN OUT,1.通用型(1).MOV传送指令格式:MOV dst,src ; dst src例:MOV DS, AX ;DS AXMOV CH, 20 ;CH 20MOV BL, AH ;BLAHMOV AX, BX ;AXBXMOV DX, AX ;DXAXMOV AX, BX+0060H(2)堆栈操作指令PUSH src ;把src推入堆栈POP src
15、 ;把src弹出堆栈,例:设SS=0100 H, SP=0009H,AX=12C3H, BX = 5070 HPUSH AX ;1 SP SP-22 4100841007H AX,POP AX ;将栈顶两单元内容送AX;SP SP+2,例 PUSH AXPUSH BX.POP BXPOP AX 注: 1)8086 的堆栈操作是按字进行的。2)每执行一条推入堆栈指令,SP 减 2。执行弹出指令时,刚好相反,每弹出 1 个字,SP的值加 2。3)CS 的值可以推入堆栈,但不能从堆栈中弹出 1个字到CS 寄存器。4)堆栈中的内容是按后进先出的原则进行传的。,例,(3) 、交换指令格式: XCHG d
16、st,srcXCHG AX,BXXCHG AL,BHXCHG BX,1000HXCHG 2100H,DHXCHG SI,AX注意:1、dst与 src不能同时为内存单元;2、不能使用CS、IP作为操作数。,(4)、换码指令格式: XLAT (无参数) ;ALBX+AL使累加器中的一个值变换为内存表格中的某一个值。用来实现编码制的转换。要求:BX 寄存器指向表的首地址,AL中为位移量。,十进制数 g f e d c b a 0 0 1 0 0 0 0 0 0 40H1 0 1 1 1 1 0 0 1 79H2 0 0 1 0 0 1 0 0 24H3 0 0 1 1 0 0 0 0 30H,十进
17、制数字09转换成七段显示码的译码表, 现在要取 3的对应的七段译码。MOV AL,3MOV BX,2000HXLAT执行XLAT指令后:AL=30H,2000h,40 79 24 30 19 12 02 78 00 10,2、目标地址传送指令 (1)取有效地址 LEA reg16,men16LEA AX,1000H ;AX=1000HLEA SP,0500H ;SP=0500HLEA,BX,BP+SI (2)将地址指针送DS和另一寄存器:LDS reg16,men32后2个字节送DS,前2个字节送寄存器。LES reg16,mem32后2个字节送ES ,前2个字节送寄存器。,LDS DI,21
18、00H,2100H 2101H 2102H 2103H 3104H,1C H 20 H 21 H B5 H,DI=201CH,DS=B521H,D7 D6 D5 D4 D3 D2 D1 D0,3、标志传送 1)、读标志:LAHF ;将标志送AH置标志:SAHF ;将AH送标志寄存器,(2). PUSHF:把标志推入堆栈。SP SP-2,FLAGH入栈 (3). POPF :把标志弹出堆栈。FLAG SP+1,SP SP SP+2,例,4、输入输出指令 1)、直接寻址IN AL,n OUT n,ALIN AX,N OUT N,AX寻址空间为:0 255 字节IN AL, 20HIN AX, 30
19、HOUT 46H,ALOUT 80H,AX,例,2)、间接寻址IN AL,DX OUT DX,ALIN AX,DX OUT DX,AX寻址空间为:0000H FFFFHMOV DX,1000HIN AL,DX IN AX,DXOUT DX,AL,注:,1、只能用累加器作为执行输入/输出过程的机构。2、用直接输入/输出指令时,寻址范围为 1 255。 表 3-6 IBM PC 系列机的端口地址 P63,3-3 数据操作指令 3-3-2算术运算指令,加法:ADD、ADC、INC 减法:SUB、SBB、DEC、DAS 乘法:MUL、IMUL、AAM 除法:DIV、IDIV、AAM AAA、DAA、D
20、AS、AAM、AAM,一、加法指令,1)不带进位位的加法 格式: ADD DST,SRCDST DST+SRC 例:(1) . ADD AL,50H ; AL AL+50H(2). ADD CX,1000H ;CX CX+1000H(3). ADD DI, SI ;DI DI+SI(4). ADD BX+DI,AXBX=1000H, DI=2000H, AX=1234HEA=BX+DI=3000H1234+ 4025H =5259H 3000H 5259H,2).带进位位的加法格式:ADC DST,SRCDST DST+SRC+CF 例: ADC AX,SI ; AX AX+SI+CFADC
21、DX,SIDX DX+SI+CF ADC BX,3000HBX BX+3000H+CFADC AL,5 AL AL+5+CF,例:有两个4字节无符号数放在2000H和3000H单元中,低位在前,高位在后,将两个数相加,结果放2000H开始的单元中。10008432H+20007F00H = ? 1).算法分析: 1).可以将两个4字节无符号数相加看成2个字相加; 2).两个数的低位字相加后,将可能产生进位CF; 3).高位字相加,应再加上进位位;,2).程序:CLC ;清进位MOV SI , 2000H ;取第一个数的首地址MOV AX, SI ;第一个数的低16位送到AXMOV DI , 3
22、000H ;取第二个字的首地址ADD AX , DI ;第一个数和第二个数相加MOV SI, AX ;送低16位结果倒2000H单元MOV AX, SI+2 ; 第二个数的高16位送AXADC AX , DI+2 ;高16位数据相加 MOV SI+2,AX,3).加一指令格式:INC src ; src src+1将操作数内容加一,再回送操作数。INC AX ;AX AX+1INC BL ;BL BL+1INC BYTE PTRBX+DI+500注意:INC指令影响标志AF、OF、PF、SF、ZF,但不影响进位标志CF。,二、减法指令,(1)不带借位的减法格式:SUB DST,SRCDST D
23、ST-SRC 例: SUB BX,CX ;BXBX-CXSUB BP+2,CL ;BP+2 BP+2-CLSUB AL,20 ;AL AL-20SUB SI,5010H ;SI SI-5010HSUB WORD PTR DI,1000H;DI+1DI DI+1DI-1000H,(2)带借位的减法格式: SBB DST,SRCDST DST SRCCF 例: SBB AX,2030H;执行:AX AX 2030H CFSBB WORD PTR DI+2,1000H; SBB DX, BX+20H (3)减量指令 将操作数内容减一,再回送操作数。 格式: DEC DST;DST DST 1 例:
24、DEC AX ;AX-1,结果送AX DEC BL ;BL BL-1DEC BYTE PTR DI+2;将DI+2所指向的一个字节的内存单元加一,4)、求补指令格式: NEG DST 对DST求补,0 -DST 例:NEG AL ;对AL中的数求补,结果送ALNEG CX ;对CX中的数求补,结果送CX5)、比较指令格式: CMP DST,SRC; DST-SRC注意:CMP指令执行相减,但不回送结果,结果只影响标志位CF、OF、SF、ZF。,四、乘法指令, 二进制乘法特点:两个8位数相乘,结果未为16位数。两个16位数相乘,结果未为32位数。 8086乘法指令特点: 一个乘数总是放在AL(8
25、位)或AX(16位)中; 将DX看成是AX的扩展,乘法指令分:无符号数MUL 有符号数IMUL,例:3 (-2)= 63 14 = 42(2AH)3的补码:0011,-2的补码 :111014的补码:1110 1)直接相乘:对无符号数,结果正确。 0011(3) 1110(-2或14)0010 1010(2A),2)有符号相乘:负数复原为原码,并去掉符号位,相乘后,结果添上符号位,再取补码。0011(3) 0010(2)0000 0110(6) 结果添上负号,1 000 0110,再取补码:1111 1001+1=1111 1010=FAH= -63 (-2)= - 6,结果正确对于3 14,
26、结果错误。,(1)、无符号数乘法格式: MUL src ;AX ALsrc,字节;DX,AX AX src,字8位乘法 16位乘法,MUL BL ;AX ALCL MUL CX ;DX、AX AX CX MUL BYTE PTR DI;AL与DI所指单元的8位数相乘,结果送AX MUL WORD PTR SI;AX与SI所指单元的16位数相乘,结果低位送AX,高位送DX,例1,4902H403AH,结果送0510H0513H单元。MOV AX,4902HMOV BX,403AHMUL BXMOV 0510H,AXMOV 0512H,DX,例2,(2)、带符号数的乘法格式 :IMUL src 字
27、节乘: AX AL*src,字乘 : DX,AX AX*src,字乘 例:IMUL BL;AL的内容乘以BL的内容,结果送AX IMUL DI ;AX的内容乘以DI的内容,结果送DX.AX IMUL BYTE PTR DI;AL的内容乘以DI所指单元的内容,结果送AX,五、除法,(1)、无符号数除法格式: DIV src:字节除: AXsrc, AL 商, AH 余数字 除: (DX. AX) src,AX 商, DX 余数 注意:被除数在累加器中,且必须是除数的两倍字长。,8位除法:被除数(16位) 除数(8位) 余数(8位) 商(8位),AH AL,操作数,AH AL,DX AX,操作数,
28、DX AX,16位除法:,被除数(32) 除数(16) 余数(16) 商(16),DIV CL ;AL AX/CLDIV WORD PTR DI若 DI=1000H,DX=2000H,AX=3500H1000H单元的值为 1020H。20003500H1020 H=?商送AX,余数送DX。,1000H 1001H,20 10,例,(2)、有符号数除法格式: IDIV src 字节除:AL AX src(商),AH 余数,字除: AX (DX AX) src(商)DX 余数 例: IDIV BL ;AL(商) AX BLIDIV WORD PTR DI,注意:,除法运算时,标志AF、CF、OF、
29、PF、SF、ZF、无意义用IDIV指令时,对双字除以一个字,商的范围为-32768+32767;对一个字除以一个字节,商的范围为-128+127。超出上述范围,产生0号中断。对有符号除法,8086指令系统规定余数的符号与被除 数的符号相同。除法运算时,要求被除数的字长是除数的二倍。如果除数的字长与除数的字长相同,应对被除数进行扩展。无符号数扩展:对AH或DX清零。有符号数扩展:将低位字或字节的符号向高位扩展。,(3)、扩展字节为字 CBW将AL寄存器的符号位扩展到AH中。AL=80H,执行CBW后,AH=FFH。 例:AL=88H,执行CBW,AH=FFH1000 1000 11111111
30、1000 1000AL AH AL,带符号数除法,被除数的高位扩展?(4)、扩展字为双字 CWD将AX寄存器的符号位扩展到DX中。AX=8000H,执行CWD后,DX=FFFFH。,例,1、AX=-30, CL=+8DIV CL执行的结果:AL(商) = -3 , AH(余数)= - 62、4903H除以86H,商存CL中。MOV AX, 4903HMOV BL, 86H DIV BLMOV CL, ALHLT,思考题: 1、37+48=?MOV AL, 37HMOV BL, 48HADD AL, BLDAAHLT 2、 9 6=?MOV AL, 09HMOV BL, 06HMUL BLAAM
31、HLT,3-3-3、逻辑运算指令、移位指令,逻辑指令 非循环移位指令 循环移位指令,逻辑运算,逻辑指令: TESTsrc dst NOT AND OR XOR 0 0 1 0 0 00 1 0 0 1 11 0 1 0 1 11 1 0 1 1 0,一、逻辑指令,AND dst,srcOR dst,srcXOR dst,srcNOT dstTEST dst,src,例1、AND AX,BXAND AH,0FHOR AL,0F0H ;TEST AL , 01 ;测试AL的D1=1?XOR AX , AX ;将AX清零,例2、设AH=10011101,对AH的高四位置零,低四位保持不变。AND A
32、H,0FH1001 1101 AND 0000 11110000 1101,例3、 OR AH,50HOR AX,0FF00H,例4、使AL中的数,第0、1位取反。MOV AL,71H;送操作数XOR AL,03H ;送特征数0000 0011HLT ;暂停,0101 0001 (AL)XOR 0000 001 1 0101 0010,例5、测试AL中的第0、1、2位是否为零。MOV AL,40HTEST AL, 07H;测AL的0、1、2位 HLT,0100 1000AND 0000 01110000 0000,逻辑指令小结,AND指令用于对一个数据的指定位清零 OR指令用于对一个数据的指定
33、位置1 NOT指令用于取反码,再加一,得补码 XOR指令用于对寄存器清零 TEST指令用于测试一个数据的指定位是1还是0,二、非循环移位指令 SHL dst,count;逻辑左移SHR dst,count;逻辑右移SAL dst,count;算数左移SAR dst ,count;算数右移,注意:,移位指令影响标志位CF、OF、PF、SF和ZF。 如果只移一位,指令中用1指出移位的位数,如果超过1位,必须用CL预先指明移位的位数。 例1:SAL DX,1 ;DX中的数左移1位MOV CL,4 SAL AX,CL ;AX中的数左移4位SHL AL,CL ;SHR AL, CL ;AL中的数右移4位
34、,例2、将两个非组合BCD数(高阶存BL,低阶存于AL中),转换成一个组合的BCD数,存于AL中。,程序段:MOV CL,4SHL BL,CLOR AL,BLHLT,例2、将AX中的内容乘以10。10 =(2+8)左移一位,乘以2;右移一位,除以2。 程序段:MOV BX,AXMOV CL,2 SHL AX,CL ;左移2位,乘以4ADD AX,BX ;AX为原来5倍SHL AX,1 ;AX为原来的10倍HLT,三、循环移位指令,ROL dst,count;左小循环 ROR dst,count;右小循环 RCL dst,count;左大循环 RCR dst,count ;右大循环,例1、 RO
35、L AL,1AL: 1001 0001 0010 0011 例2、 MOV CL, 2ROL BH,CLBH: 1010 11111011 1110,思考题:,1、 2、,3-3-4、串操作指令,字串传送:MOVSB/MOVSW 字串比较:CMPSB/CMPSW 字串扫描:SCASB/SCASW 字串装入:LODSB/LODSW 字串存储:STOSB/STOSB,一、串操作的特点,1)、SI寻址源操作数,段地址在DS,DI寻址目的操作数,段地址在ES; 2)、每次操作后,SI、DI自动修改:DF=0,SI和DI加1或(+2),DF=1,SI、DI减一或减二。 3)、若源字串和目的字串在同一段中
36、,则把DS和ES设成相同数字。 4)、通过重复前缀实现串操作,二、重复前缀:,1、 REP MOVSB/MOVSW (1). 若CX=0,退出重复操作; (2). CX 0,执行串操作一次,CX CX-1, 修改SI、 DI,转(1)。 2、相等重复前缀REPZ(REPE)(1). 若CX=0,或ZF=0,退出重复操作;(2). CX 0,执行串操作一次,CX CX-1,修改SI、 DI,转(1)。,用途:用于比较两个字串,找出不同的字。 3、不相等重复前缀REPNZ(REPNE)(1). 若CX=0,或ZF=1,退出重复操作;(2). CX 0,执行串操作一次,CX CX-1, 修改SI、
37、DI。用途:1)在一个字串中,找到需要的字。2)用于比较两个字串,找出相同的字串 。,三、字串传送指令:MOVS,字节操作: MOVSB字 操 作: MOVSW 1). SI指向源串( 数据段DS),DI指向目的(附加段ES); 2). CX置入传送的字节数; 3). 用CLD 清DF=0:SI+1(或2),DI+1(或 2);用STD置DF=1:SI-1(或2),DI-1(或 2); 4). 用带REP重复前缀的串传送指令,每传送一次,CX中的值减一。,例1. 将100个数据,从地址为1000H单元传送到地址为2000H单元区.LEA SI, 1000H ;SI指向源串地址LEA DI, 2
38、000H;DI指向源串地址MOV CX,100 ;置计数器CLD ;清方向标志 REP MOVSB ;将源地址的100个字节传送到目的地址单元HLT,四、字串比较指令:,CMPSB / CMPSW ;SRC - DST字 操 作指令: CMPSW字节操作指令: CMPSB功 能: SI DIDI DI 1( 2)SI SI 1( 2)操作结果影响标志位。,在CMPSW / CMPSB前使用重复前缀: 用REPNZ / REPNE,表示两个字串比较不相等时继续下次比较,若相等则退出比较。 用REPZ / REPE,表示两个字串比较相等时继续下次比较,若不相等则退出比较。 用途:用于比较两个字串,
39、找出第一个相等的字符或不相等的字符,五、字串检索指令: SCASB / SCASW,操作: AL (AX) DIDI DI 1( 2) 用AL或AX中的一个字串和位于ES段由DI指出的内存单元的字节或字比较。 功能:从一个字串中查找一个与AL或 AX中不同的字符,或寻找一个相同的字符.,例2. 从地址为1000单元开始,存放256个字 节的字符串,找出第一个字符 $ (ASCII码24H),将$的第一个地址存入BX中,否则将BX清零.1)分析: 要求找指定字符$,可以用指令SCASB; 重复前缀用REPNZ,表示 表示两个字串比较不相等时 继续,否则退出循环 $的地址应为多少?,2).程序段:
40、MOV DI, 1000H ;送目标串首地址MOV CX, 256 CLD ;清方向标志MOV AL, $REPNZ SCANBJZ ZER ;没找到$,转DEC DI ;退回到$所在地址 MOV BX,DI ;$所在地址送BXJMP ST0 ZER: MOV BX,0 ST0: HLT,使用SCASB / SCASW 注意:,目的字串默认在ES段中,字串首址由DI指出。 寻找与AL中字节相同的第一个字节,用 REPNZ SCASB,若找到,退出循环;若字串中没有任何字节与AL的内容相同,退出循环。,六、取字串指令: LODSB / LODSW,执行的操作:AL(AX) SI SI SI 1(
41、 2)将位于DS段由SI指出的内存单元的字 节或字的内容取到AL或AX中。 注意:因为取来的字或字节放在AX或AL中,LODSB / LODSW前面不能加前缀。 七、存储指令: STOSB / STOSW,例3:将0404H单元开始的256单元清零。 CLD ;清方向标志LEA DI,0404H ;DI指向字串地址MOV CX,256 ; 共256个字节XOR AX,AX ;AX清零REP STOSBHLT,执行的操作:DI AL(AX) DI DI 1( 2)把AL或AX中的一个字串存到位ES段由DI指出的内存单元,并自动修改地址。,例4:检验一段被送过的数据是否与原串完全相同.CLDMOV
42、 CX,100 ;共100字节 MOV SI,2400H ;源串首地址MOV DI,1200H ;目的串首地址REPE CMPSB ; 串比较,直到ZF=0,或CX=0AND CX,0FFH ;100个字串比较完否JZ EQQ ;都作了比较,DEC SI ;否则,有不相同字串MOV BX,SI ;将不同字串地址送出MOV AL,SI ;将不同字串送出JMP STOP EQQ: MOV BX,0 ;两字串完全相同 STOP:HLT,3-3-5 控制转移指令,转移和调用指令的寻址 子程序调用和返回指令 无条件转移和条件转移指令 循环控制指令 中断指令 处理器控制指令,一、转移和调用指令的寻址,段内
43、直接转移有效地址:IP+位移量 段内间接转移 段间直接转移CS、IP 段间间接转移CS、IP,二、无条件转移指令和条件转移指令,1、无条件转移指令 段内转移:JMP 1000H ;IP IP+1000HJMP SHORT LOP1;LOP1是标号段间转移JMP FAR PTR LOP2I P LOP2的段内偏移地址CS LOP2的段地址 JMP DWORD PTR BX I P BXCS BX+2,2、条件转移指令,形式: JX 短目标地址X :13个英文字母跳转范围: -128+127字节 1)、 JE/JZ ;等于,A=BJNZ/JNE;不等于,AB 2)、无符号数比较JB/JNAE: A
44、 =BJA/JNBE:A B ; JNA/JBE:A =B,3)、带符号数比较指令 JL:A=B JG:A B JNG:A=B,4)其它转移指令 JS 、JNS;JO 、JNO;JP、JPE:P=1 JPO、JNP; JCXZ:CX=0转移,例1、比较1000H、1001单元的两个数,将大数存2000H单元中。解: MOV BX,1000H ;第一数送ALMOV AL, BX INC BX ;指向第二数CMP AL,BX ;两数比较JA LOP1 ;大于转MOV AL,BX ;大数AL送 LOP1:MOV 2000H,ALHLT,三、循环指令,LOOP、 LOOPZ、 LOOPNZ 1)、LOOP 短目标地址操作:CX CX-1,CX不为零,循环;若CX=0,退出循环。相当于下面的指令: DEC CXJNZ 短目标地址,例2:延迟子程序:MOV CX,0100H ;设循环次数KKK: LOOP KKK ;CX-1,CX ;不为零,循环或: MOV CX,0100HKKK: DEC CXJNZ KKKHLT,