版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章第三章 8086指令系统指令系统指令格式指令格式8086 寻址方式寻址方式1.8086 指令系统指令系统汇编语言指令格式与寻址方式汇编语言指令格式与寻址方式 汇编语言指令格式汇编语言指令格式标号、标示符标号、标示符指令助记符指令助记符操作数操作数注释注释指令助记符指令助记符操作数操作数 8086的寻址方式的寻址方式(重点重点!)对操作数寻址对操作数寻址 对调用或转移指令寻址对调用或转移指令寻址一、立即数寻址:一、立即数寻址:操作数由指令提供操作数由指令提供. 例:例: MOV AL,80 H MOV AX,1090 H MOV CX,100 二、直接寻址二、直接寻址 操作数在存储器中,其
2、地址由指操作数在存储器中,其地址由指令提供。令提供。例:例:MOV AX, 1070 H MOV BX,CS: 3000 H MOV AH, 1000 H 三、寄存器寻址三、寄存器寻址 操作数在寄存器中。操作数在寄存器中。 MOV AH,BL MOV AX,BX MOV CX,AX四、寄存器间接寻址四、寄存器间接寻址 操作数在存储器中,存储器操作数在存储器中,存储器的有效地址由寄存器指出。的有效地址由寄存器指出。EA=+8 或或 16 位移量位移量BX ;段为;段为DS BP ;段为;段为SSSI ;段为;段为DSDI ;段为;段为DS或或ES1、以、以BX寄存器进行间接寻址寄存器进行间接寻址
3、 例:例: 若若 DS = 2000 H,ES = 3000 H,BX = 1000 H 1)MOV AX,BX AX 21000 H 21001 H MOV CX,ES:BX AX 31000 H 31001 H2、以、以BP寄存器进行间接寻址寄存器进行间接寻址MOV AX,BP若若 SS = 5000 H,BP = 3000 H,将将 53020 H、53021 H 单元的内容单元的内容送送 AX。执行结果:执行结果: AX = 4A56 H53000H53001H56H4AH3、以、以SI、DI寄存器进行间接寻址寄存器进行间接寻址变址寻址变址寻址1) MOV AX,SI若若 DS = 3
4、000 H,SI = 4000H,EA=4000H,物理地址物理地址=34000H,执行结果:执行结果: AX=201A H2)MOV BX,DI若若 DS = 5000 H,DI = 0200 H执行结果:执行结果:BX 50201H50200 HBX = 3220 H34000 H34001 H1A H20 H50200 H50201 H20 H32 H4、以、以BX、BP和和SI、DI寄存器组合起来进行寄存器组合起来进行间接寻址间接寻址基址加变址的寻址基址加变址的寻址 例:若例:若 BX = 5000 H,SI =2000 H,DS =4000 H, SS = 1000 H,BP = 3
5、100 H。MOV AX,BX+SI; EA=5000+2000=7000H,AX 47001 H 47000 HAX = 2A32 HEA = + BXSIBPDI相对的基址加变址的寻址:相对的基址加变址的寻址:MOV AX,BP + SI + 0020 H; EA=3100+2000+0020=5120H例:设例:设 BX = 0158 H,DI = 10A5 H,DS = 2100 H,位移量位移量 = 1B57 H,DS 作为操作数的段寄存器。作为操作数的段寄存器。1)直接寻址)直接寻址: MOV AX,1B57 H 有效地址有效地址 = 1B57 H 物理地址物理地址 = 21000
6、 H+1B57 H = 22B57 H2)寄存器间接寻址)寄存器间接寻址: MOV AX,BX 有效地址有效地址 = 0158 H 物理地址物理地址 = 21000 H + 0158 H = 21158 H3)BX寄存器相对间接寻址寄存器相对间接寻址: MOV AX,BX+1B57H 有效地址有效地址 = 0158 H + 1B57 H = 1CAF H 物理地址物理地址 = 21000 H + 1CAF H = 22CAF H4)变址寻址)变址寻址: MOV AX,DI有效地址有效地址 = 105A H 物理地址物理地址 = 21000 H+105A H = 220A5 H5)DI寄存器相对
7、变址寻址寄存器相对变址寻址: MOV AX,DI+1B57H 有效地址有效地址 = 105A H + 1B57 H = 2BFC H 物理地址物理地址 = 21000 H + 2BFC H = 23BFC H6)基址加变址的寻址)基址加变址的寻址 : MOV AX,BX + DI 有效地址有效地址 = 0158 H+105A H = 11FD H 物理地址物理地址 = 21000 H + 11FD H = 221FD H7)相对的基址加变址的寻址:)相对的基址加变址的寻址: MOV AX,BX + DI+1B57 H 有效地址有效地址 = 0158 H+105A H + 1B57 H = 2D
8、54 H 物理地址物理地址 = 21000 H + 2D54 H = 23D54 H1、若、若SS=1000H,BP=2000H,DS=5000H,BX=4000H,说明下,说明下列指令的执行结果。列指令的执行结果。 MOV AX,2C10H MOV AX,2C10H MOV AX,BX+1C00H MOV BX,BP+0120H MOV AX,BP+ SI MOV AH,BX+SI数据传送指令数据传送指令MOV LEAPUSH LDSPOP LES XCHG LAHF PUSHFXLAT SAHF POPF IN OUT 1.通用型通用型 (1).MOV传送指令传送指令 格式:格式:MOV
9、dst,src ; dst src 例例:MOV DS, AX ;DS AX MOV CH, 20 ;CH 20 MOV BL, AH ;BLAH MOV AX, BX ;AXBX MOV DX, AX ;DXAX MOV AX, BX+0060H (2)堆栈操作指令)堆栈操作指令 PUSH src ;把;把src推入堆栈推入堆栈 POP src ;把;把src弹出堆栈弹出堆栈C312 01006H 01007H 01008H 01009HSP(原栈顶原栈顶)SP - 2(新栈顶新栈顶)SP例例:设:设SS=0100 H, SP=0009H,AX=12C3H, BX = 5070 H PUSH
10、 AX ;1 SP SP-2 2 4100841007H AX 01000009SSSP 16-2 POP AX ;将栈顶两单元内容送;将栈顶两单元内容送AX ;SP SP+2 01000007SSSP 16+2C312 01006H 01007H 01008H 01009HSP+2 (新栈顶新栈顶)SP12C3AXSP(原栈顶原栈顶)例例: PUSH AX PUSH BX . POP BX POP AX注注:1)8086 的堆栈操作是按字进行的。的堆栈操作是按字进行的。 2)每执行一条推入堆栈指令,)每执行一条推入堆栈指令,SP 减减 2。执。执行弹出指令时,刚好相反,每弹出行弹出指令时,刚
11、好相反,每弹出 1 个字,个字,SP的值加的值加 2。 3)CS 的值可以推入堆栈,但不能从堆栈中的值可以推入堆栈,但不能从堆栈中弹出弹出 1个字到个字到CS 寄存器。寄存器。 4)堆栈中的内容是按后进先出的原则进行传)堆栈中的内容是按后进先出的原则进行传的。的。例例(3) 、交换指令、交换指令 格式:格式: XCHG dst,src XCHG AX,BX XCHG AL,BH XCHG BX,1000H XCHG 2100H,DH XCHG SI,AX 注意:注意:1、dst与与 src不能同时为内存单元;不能同时为内存单元; 2、不能使用、不能使用CS、IP作为操作数。作为操作数。(4)、
12、换码指令)、换码指令 格式:格式: XLAT (无参数无参数) ;ALBX+AL 使累加器中的一个值变换为内存表格中的某一使累加器中的一个值变换为内存表格中的某一个值。用来实现编码制的转换。要求:个值。用来实现编码制的转换。要求:BX 寄存器指寄存器指向表的首地址,向表的首地址,AL中为位移量。中为位移量。BX+0BX+1BX+2BX+AL+BX AL 十进制数十进制数 g f e d c b a 0 0 1 0 0 0 0 0 0 40H 1 0 1 1 1 1 0 0 1 79H 2 0 0 1 0 0 1 0 0 24H 3 0 0 1 1 0 0 0 0 30Haf g be cd十进
13、制数字十进制数字09转换成七段显示码的译码表,转换成七段显示码的译码表,现在要取现在要取 3的对应的七段译码。的对应的七段译码。 MOV AL,3 MOV BX,2000H XLAT 执行执行XLAT指令后指令后: AL=30H例例2000h407924301912027800102、目标地址传送指令、目标地址传送指令(1)取有效地址取有效地址 LEA reg16,men16 LEA AX,1000H ;AX=1000H LEA SP,0500H ;SP=0500H LEA,BX,BP+SI(2)将地址指针送将地址指针送DS和另一寄存器和另一寄存器: LDS reg16,men32 后后2个字
14、节送个字节送DS,前,前2个字节送寄存器。个字节送寄存器。 LES reg16,mem32 后后2个字节送个字节送ES ,前,前2个字节送寄存器个字节送寄存器。 LDS DI,2100H2100H2101H2102H2103H3104H1C H20 H21 HB5 HDI=201CHDS=B521HD7 D6 D5 D4 D3 D2 D1 D0 SF ZF AF PF CFFLAG3、标志传送、标志传送1)、读标志:)、读标志:LAHF ;将标志送将标志送AH 置标志:置标志:SAHF ;将将AH送标志寄存器送标志寄存器(2)、PUSHF:把标志推入堆栈。:把标志推入堆栈。 SP SP-2,F
15、LAGH入栈入栈 (3)、POPF :把标志弹出堆栈。:把标志弹出堆栈。 FLAG SP+1,SP SP SP+2例例4、输入输出指令、输入输出指令1)、直接寻址)、直接寻址 IN AL,n OUT n,AL IN AX,N OUT N,AX 寻址空间为:寻址空间为:0 255 字节字节 IN AL, 20H IN AX, 30H OUT 46H,AL OUT 80H,AX例例2)、间接寻址)、间接寻址 IN AL,DX OUT DX,AL IN AX,DX OUT DX,AX 寻址空间为:寻址空间为:0000H FFFFH MOV DX,1000H IN AL,DX IN AX,DX OUT
16、 DX,AL数据操作指令数据操作指令算术运算指令算术运算指令 加法:加法:ADDADD、ADCADC、INCINC 减法:减法:SUBSUB、SBBSBB、DECDEC、DASDAS 乘法:乘法:MULMUL、IMULIMUL、AAMAAM 除法:除法:DIVDIV、IDIVIDIV、AAMAAM AAAAAA、DAADAA、DASDAS、AAMAAM、AAMAAM加法指令加法指令1 1)不带进位不带进位位的加法位的加法格式:格式: ADD DST,SRC DST DST+SRC例:例:(1). ADD AL,50H ; AL AL+50H (2). ADD CX,1000H ;CX CX+1
17、000H (3). ADD DI, SI ;DI DI+SI (4). ADD BX+DI,AX BX=1000H, DI=2000H, AX=1234H EA=BX+DI=3000H 1234+ 4025H =5259H 3000H 5259H 2).带进位位的加法带进位位的加法 格式:格式:ADC DST,SRC DST DST+SRC+CF 例:例: ADC AX,SI ; AX AX+SI+CF ADC DX,SI; DX DX+SI+CF ADC BX,3000H BX BX+3000H+CF ADC AL,5 AL AL+5+CF例例:有两个:有两个4 4字节无符号数放在字节无符号
18、数放在2000H2000H和和3000H3000H单单元中,低位在前,高位在后,将两个数相加,元中,低位在前,高位在后,将两个数相加,结果放结果放2000H2000H开始的单元中。开始的单元中。 1000100084328432H+2000H+20007F007F00H = H = ?1).1).算法分析算法分析: :1).1).可以将两个可以将两个4 4字节无符号数相加字节无符号数相加 看成看成2 2个字相加个字相加; ;2).2).两个数的低位字相加后两个数的低位字相加后, ,将可能将可能 产生进位产生进位CF;CF;3).3).高位字相加高位字相加, ,应再加上进位位应再加上进位位; ;
19、2000H3000H32840010007F0020SIDI2)2)程序程序: : CLC ;清进位清进位 MOV SI ,2000H ;取第一个数的首地址取第一个数的首地址 MOV AX,SI ;第一个数的低第一个数的低16位送到位送到AX MOV DI,3000H ;取第二个字的首地址取第二个字的首地址 ADD AX ,DI ;第一个数和第二个数相加第一个数和第二个数相加 MOV SI,AX ;送低送低16位结果位结果2000H单元单元 MOV AX,SI+2; 第二个数的高第二个数的高16位送位送AX ADC AX,DI+2;高高16位数据相加位数据相加 MOV SI+2,AX3 3).
20、 .加一指令加一指令 格式:格式:INC src src src+1 将操作数内容加一,再回送操作数将操作数内容加一,再回送操作数。 INC AX ;AX AX+1 INC BL ;BL BL+1 INC BYTE PTRBX+DI+500注意:注意:INCINC指令影响标志指令影响标志AFAF、OFOF、PFPF、SFSF、ZFZF, 但不影响进位标志但不影响进位标志CFCF。减法指令减法指令(1)不带借位的减法不带借位的减法 格式:格式:SUB DST,SRC DST DST-SRC例:例: SUB BX,CX SUB BP+2,CL SUB AL,20 SUB SI,5010H SUB
21、WORD PTR DI,1000H (2)带借位的减法带借位的减法 格式:格式: SBB DST,SRC DST DST SRC CF 例:例: SBB AX,2030H ;执行:;执行:AX AX 2030H CF SBB WORD PTR DI+2,1000H; SBB DX, BX+20H (3)减量指令减量指令 将操作数内容减一,再回送操作数。将操作数内容减一,再回送操作数。 格式:格式: DEC DST;DST DST 1 例:例: DEC AX DEC BL DEC BYTE PTR DI+2 4)求补指令求补指令 格式:格式: NEG DST 对对DST求补,求补,0 -DST例
22、:例:NEG AL ;对对AL中的数求补,结果送中的数求补,结果送AL NEG CX ;对对CX中的数求补,结果送中的数求补,结果送CX 5)比较指令比较指令 格式格式: CMP DST,SRC; DST-SRC 注意:注意: CMP指令执行相减,但不回送结果,指令执行相减,但不回送结果, 结果结果只影响标志位只影响标志位CF、OF、SF、ZF。二进制乘法特点二进制乘法特点: 两个两个8 8位数相乘,结果为位数相乘,结果为1616位数。位数。 两个两个1616位数相乘,结果为位数相乘,结果为3232位数。位数。 80868086乘法指令特点:乘法指令特点: 一个乘数总是放在一个乘数总是放在AL
23、AL(8 8位)或位)或AXAX (1616位)中;位)中; 将将DXDX看成是看成是AXAX的扩展的扩展乘法指令:无符号数乘法指令:无符号数MULMUL 有符号数有符号数IMULIMUL例例:3 3 (-2-2)= 6= 6 3 3 14 = 4214 = 42(2AH2AH) 3 3的补码:的补码:00110011,-2-2的补码的补码 :11101110 14 14的补码:的补码:111011101 1)直接相乘:对无符号数,结果正确。直接相乘:对无符号数,结果正确。 00110011(3 3) 1110 1110(-2-2或或1414) 0010 10100010 1010(2A2A)
24、 2 2)有符号相乘:负数复原为原码,并去掉符)有符号相乘:负数复原为原码,并去掉符号位,相乘后,结果添上符号位,再取补号位,相乘后,结果添上符号位,再取补码。码。 00110011(3 3) 0010 0010(2 2) 0000 01100000 0110(6 6) 结果添上负号,结果添上负号,1 000 01101 000 0110, 再取补码:再取补码:1111 1001+1=111110101111 1001+1=11111010 =0FAH = -6 =0FAH = -6 3 3 (-2-2)= - 6= - 6,结果正确,结果正确 对于对于3 3 1414,结果错误。,结果错误。
25、(1)、)、无符号数乘法无符号数乘法 格式:格式: MUL src ;AX ALsrc,字节,字节 ;DX,AX AX src,字,字 8 8位乘法位乘法 1616位乘法位乘法AX操作数操作数DX AX(16位)位)(16位)位)(32位)位)AL操作数操作数AH AL(8位)位)(8位)位)(16位)位) MUL BL ;AX AL CLMUL CX ;DX、AX AX CXMUL BYTE PTR DI;AL与与DI所指单元的所指单元的8位位 数相乘,结果送数相乘,结果送AXMUL WORD PTR SI;AX与与SI所指单元的所指单元的16位位 数相乘,低位送数相乘,低位送AX, 高位送
26、高位送DX4902H403AH,结果送,结果送0510H0513H单元。单元。 MOV AX,4902H MOV BX,403AH MUL BX MOV 0510H,AX MOV 0512H,DX (2 2)、)、带符号数的乘法带符号数的乘法 格式格式 :IMULIMUL src src 字节乘字节乘: AX : AX AL AL* *srcsrc, 字乘字乘 : DX: DX,AX AX AX AX* *srcsrc,字乘,字乘 IMUL BLIMUL BL;ALAL的内容乘以的内容乘以BLBL,结果送,结果送AXAX IMUL DIIMUL DI;AXAX的内容乘的内容乘DIDI,结果送,
27、结果送DX.AXDX.AX IMUL BYTE PTR DI IMUL BYTE PTR DI; ALAL的内容乘以的内容乘以DIDI所指单元的内容,结果送所指单元的内容,结果送AXAX除法除法(1)、无符号数除法)、无符号数除法 格式:格式: DIV src: 字节除字节除: AX src, AL 商商, AH 余数余数 字字 除除: (DX. AX) src, AX 商商, DX 余数余数 注意:被除数在累加器中,且必须是除数的两注意:被除数在累加器中,且必须是除数的两 倍字长。倍字长。 8 8位除法:位除法: 被除数被除数(16(16位位) ) 除数除数(8(8位位) ) 余数余数(8(
28、8位位) ) 商商(8(8位位) )AH AL操作数操作数AH AL1616位除法:位除法: 被除数被除数(32) 除数除数(16) 余数余数(16) 商商(16)DX AX操作数操作数DX AX(2 2)、有符号数除法)、有符号数除法 格式:格式: IDIV src 字节除:字节除:AL AX src(商),(商),AH 余数余数, 字除:字除: AX (DX AX) src(商)(商) DX 余数余数 例:例: IDIV BL ;AL(商商) AX BL IDIV WORD PTR DI注意注意: : 除法运算时除法运算时, ,标志标志AFAF、CFCF、OFOF、PFPF、SFSF、ZF
29、ZF、无意义、无意义 用用IDIVIDIV指令时,对双字除以一个字,商的范围为指令时,对双字除以一个字,商的范围为 -32768+32767-32768+32767;对一个字除以一个字节,商的范围为;对一个字除以一个字节,商的范围为-128+127-128+127。超出上述范围,产生。超出上述范围,产生0 0号中断。号中断。 对有符号除法,对有符号除法,80868086指令系统规定余数的符号与被除指令系统规定余数的符号与被除 数的符号相同。数的符号相同。 除法运算时,要求被除数的字长是除数的二倍。如果除法运算时,要求被除数的字长是除数的二倍。如果 除数的字长与除数的字长相同,应对被除数进行扩展
30、。除数的字长与除数的字长相同,应对被除数进行扩展。 无符号数扩展:对无符号数扩展:对AHAH或或DXDX清零。清零。 有符号数扩展:将低位字或字节的符号向高位扩展。有符号数扩展:将低位字或字节的符号向高位扩展。 3)、)、扩展字节为字扩展字节为字 CBW 将将AL寄存器的符号位扩展到寄存器的符号位扩展到AH中。中。 AL=80H,执行执行CBW后后,AH=FFH。 例:例:AL=88H,执行,执行CBW,AH=FFH 1000 1000 11111111 1000 1000 AL AH AL(4)、)、扩展字为双字扩展字为双字 CWD 将将AX寄存器的符号位扩展到寄存器的符号位扩展到DX中。中
31、。 AX=8000H,执行执行CWD后后,DX=FFFFH。逻辑运算指令、移位指令逻辑运算指令、移位指令 逻辑指令逻辑指令 非循环移位指令非循环移位指令循环移位指令循环移位指令逻辑运算:逻辑运算: src dst NOT AND OR XOR 0 0 1 0 0 0 0 1 0 0 1 1 1 0 1 0 1 1 1 1 0 1 1 0逻辑指令逻辑指令 AND dst,src OR dst,src XOR dst,src NOT dst TEST dst,src 例例、 AND AX,BX AND AH,0FH OR AL,0F0H ; TEST AL , 01 ;测试测试AL的的D1=1?
32、XOR AX , AX ;将将AX清零清零例例、设设AH=10011101,对,对AH的高的高四位置零,低四位保持不变。四位置零,低四位保持不变。 AND AH,0FH 1001 1101 AND 0000 1111 0000 1101 例:例: 使使ALAL中的数,第中的数,第0 0、1 1位取反。位取反。 MOV ALMOV AL,71H71H;送操作数;送操作数 XOR ALXOR AL,03H03H;送特征数;送特征数0000 00110000 0011 0101 0001 (AL) XOR 0000 0011 0101 0010 例例、 测试测试ALAL中的第中的第0 0、1 1、2
33、 2位是否为零位是否为零。 MOV ALMOV AL,40H40H TEST AL TEST AL, 07H07H;测;测ALAL的的0 0、1 1、2 2位位 0100 1000AND 0000 0111 0000 0000逻辑指令小结逻辑指令小结ANDAND指令用于对一个数据的指定位清零指令用于对一个数据的指定位清零OROR指令用于对一个数据的指定位置指令用于对一个数据的指定位置1 1NOTNOT指令用于取反码指令用于取反码XORXOR指令用于对寄存器清零指令用于对寄存器清零TESTTEST指令用于测试一个数据的指定位指令用于测试一个数据的指定位是是1 1还是还是0 0二、非循环移位指令二
34、、非循环移位指令SHL dst,count;逻辑左移;逻辑左移SHR dst,count;逻辑右移;逻辑右移SAL dst,count;算数左移;算数左移SAR dst ,count;算数右移;算数右移CM L00M LCCM L0M LC 移位指令影响标志位移位指令影响标志位CFCF、OFOF、PFPF、SFSF和和ZFZF。 如果只移一位,指令中用如果只移一位,指令中用1 1指出移位的位数,如指出移位的位数,如果超过果超过1 1位,必须用位,必须用CLCL预先指明移位的位数。预先指明移位的位数。例例 : : SAL DX,1 ;DXSAL DX,1 ;DX中的数左移中的数左移1 1位位 M
35、OV CL,4 MOV CL,4 SAL AX,CL ;AX SAL AX,CL ;AX中的数左移中的数左移4 4位位 SHL AL,CL ;SHL AL,CL ; SHR AL,CL ;AL SHR AL,CL ;AL中的数右移中的数右移4 4位位例例、将两个非组合、将两个非组合BCD数(高阶存数(高阶存BL,低阶,低阶存于存于AL中),转换成一个组合的中),转换成一个组合的BCD数,数,存于存于AL中。中。0000 *BL0000 *ALOR* 0000BL SHL程序段:程序段: MOV CL,4 SHL BL,CL OR AL,BL例例、将、将AXAX中的内容乘以中的内容乘以1010。
36、 10 =10 =(2+82+8) 左移一位,乘以左移一位,乘以2 2;右移一位,除以;右移一位,除以2 2。程序:程序: MOV BX,AX MOV CL,2 SHL AX,CL ;左移;左移2位,乘以位,乘以4 ADD AX,BX ;AX为原来为原来5倍倍 SHL AX,1 ;AX为原来的为原来的10倍倍 三、循环移位指令三、循环移位指令 ROL dst,count;左小循环;左小循环 ROR dst,count;右小循环;右小循环 RCL dst,count;左大循环;左大循环 RCR dst,count ;右大循环;右大循环例例1、 ROL AL,1 AL: 1001 0001 001
37、0 0011例例2、 MOV CL, 2 ROL BH,CL BH: 1010 1111 1011 1110串操作指令串操作指令 字串传送:字串传送:MOVSB/MOVSW 字串比较:字串比较:CMPSB/CMPSW 字串扫描:字串扫描:SCASB/SCASW 字串装入:字串装入:LODSB/LODSW 字串存储:字串存储:STOSB/STOSB串操作的特点(重点!)串操作的特点(重点!)1 1)、)、SISI寻址源操作数,段地址在寻址源操作数,段地址在DSDS,DIDI寻址目的操作数,段地址在寻址目的操作数,段地址在ESES;2 2)、每次操作后,)、每次操作后,SISI、DIDI自动修改:
38、自动修改: DF=0DF=0,SISI和和DIDI加加1 1或(或(+2+2),), DF=1DF=1,SISI和和DIDI减减1 1或(或(2 2)。)。3 3)、若源字串和目的字串在同一段中,)、若源字串和目的字串在同一段中,则把则把DSDS和和ESES设成相同数字。设成相同数字。4)4)、通过重复前缀实现串操作、通过重复前缀实现串操作重复前缀(循环)重复前缀(循环)1 1、 REPREP MOVSB/MOVSW MOVSB/MOVSW(1). (1). 若若CX=0,CX=0,退出重复操作退出重复操作; ;(2). CX 0,(2). CX 0,执行串操作一次执行串操作一次,CX ,CX
39、 CX-1, CX-1, 修改修改SISI、 DIDI,转(,转(1 1)。)。2 2、相等重复前缀、相等重复前缀REPZREPZ(REPEREPE) (1). (1). 若若CX=0,CX=0,或或ZF=0ZF=0,退出重复操作,退出重复操作; ; (2). CX 0, (2). CX 0,执行串操作一次执行串操作一次,CX ,CX CX-1, CX-1, 修改修改SISI、 DIDI,转(,转(1 1)。)。用途:用于比较两个字串,找出不同的字。用途:用于比较两个字串,找出不同的字。3、不相等重复前缀不相等重复前缀REPNZREPNZ(REPNEREPNE) (1). (1). 若若CX=
40、0,CX=0,或或ZF=1ZF=1,退出重复操作,退出重复操作; ; (2). CX 0, (2). CX 0,执行串操作一次执行串操作一次, , CX CX CX-1, CX-1, 修改修改SISI、 DIDI。 用途:用于比较两个字串,找出相同用途:用于比较两个字串,找出相同 的字串的字串 。更正:更正: REP/REPE/REPNE REP/REPE/REPNE 在在CX-1CX-1的过程中的过程中不影响不影响ZFZF,而后面的指令要影响,而后面的指令要影响ZFZF(分情况)!(分情况)! 程序循环的条件程序循环的条件ZFZF是看指令执行的是看指令执行的结果对结果对ZFZF的影响,与的影
41、响,与ZFZF的初值无关。的初值无关。 字串传送指令:字串传送指令:MOVSB/MOVSWMOVSB/MOVSW字节操作字节操作: MOVSB: MOVSB字字 操作操作: MOVSW: MOVSW1). SI1). SI指向源串指向源串( ( 数据段数据段DS),DIDS),DI指向目的指向目的C C串串( (附加段附加段ES);ES);2). CX2). CX置入传送的字节数(操作的次数);置入传送的字节数(操作的次数);3). 3). 用用CLDCLD清清DF=0DF=0:SI+1SI+1(+2+2),),DI+1(+2)DI+1(+2); 用用STDSTD置置DF=1DF=1:SI-1
42、SI-1(-2-2),),DI-1(-2DI-1(-2)4). 4). 用带用带REPREP重复前缀的串传送指令,每传送重复前缀的串传送指令,每传送 一次,一次,CXCX中的值减一。中的值减一。例例. 将将100个字节数据个字节数据,从段地址为从段地址为AX,偏移地址为偏移地址为1000H单元传送到偏移地址为单元传送到偏移地址为2000H单元区单元区. MOV DS,AX MOV ES,AX LEA SI, 1000H ;SI指向源串地址指向源串地址 LEA DI, 2000H;DI指向源串地址指向源串地址 MOV CX,100 ;置计数器;置计数器 CLD ;清方向标志;清方向标志 REP
43、MOVSB ;将源地址的;将源地址的100个字个字 节传送到目的地址单元节传送到目的地址单元 字串比较指令字串比较指令CMPSB / CMPSW 字字 操操 作指令作指令: CMPSW 字节操作指令字节操作指令: CMPSB 功功 能:能: SI DI DI DI +/-1(+/-2) SI SI +/- 1(+/-2) 操作结果影响标志位操作结果影响标志位。 在在CMPSW / CMPSBCMPSW / CMPSB前使用重复前缀:前使用重复前缀: 用于比较两个字串,找出第一个相等的用于比较两个字串,找出第一个相等的字符或不相等的字符字符或不相等的字符 用用REPNZ / REPNEREPNZ
44、 / REPNE,表示两个字串比较,表示两个字串比较不相等时继续不相等时继续下次比较,若相等则退出下次比较,若相等则退出比较比较 用用REPZ / REPEREPZ / REPE,表示两个字串比较,表示两个字串比较相相等时继续等时继续下次比较,若不相等则退出比下次比较,若不相等则退出比较。较。 字串检索指令:字串检索指令:SCASB / SCASWSCASB / SCASW操作操作:AL (AXAL (AX) DI DI DI DI DI +/-1 DI +/-1(+/-2+/-2) 用用ALAL或或AXAX中的一个字串和位于中的一个字串和位于ESES段由段由DIDI指出的内存单元的字节或字指
45、出的内存单元的字节或字比较比较 功能功能: :从一个字串中查找一个与从一个字串中查找一个与ALAL或或 AXAX中不同的字符,或寻找一个相同中不同的字符,或寻找一个相同的字符的字符. .例例. 从地址为从地址为1000单元开始单元开始,存放存放256个字节的字符串个字节的字符串,找出第一个字符找出第一个字符 $ (ASCII码码24H),将将$的第一个地的第一个地址存入址存入BX中中,否则将否则将BX清零清零. 1)分析分析: 要求找指定字符要求找指定字符$, 可以用指令可以用指令SCASB; 重复前缀用重复前缀用REPNZ,表示表示表示两个字串比较不相等时表示两个字串比较不相等时继续继续,否
46、则退出循环否则退出循环 $的地址应为多少的地址应为多少? 1031332445DIDI1000H1001H1002H1003H.程序段:程序段: MOV DI, 1000H ;送目标串首地址送目标串首地址 MOV CX, 256 CLD ;清方向标志清方向标志 MOV AL, $ REPNZ SCASB TEST CX, 0FFHJZ ZER ;没找到没找到$,转转 DEC DI ;退回到退回到$所在地址所在地址 MOV BX,DI ;$所在地址送所在地址送BX JMP ST0ZER: MOV BX,0使用使用SCASB / SCASW SCASB / SCASW 注意:注意: 目的字串默认在
47、目的字串默认在ESES段中,字串首址由段中,字串首址由DIDI指指出。出。 寻找与寻找与ALAL中字节相同的第一个字节,用中字节相同的第一个字节,用 REPNZ SCASBREPNZ SCASB,若找到,退出循环;若字,若找到,退出循环;若字串中没有任何字节与串中没有任何字节与ALAL的内容相同,退出的内容相同,退出循环。循环。取字串指令:取字串指令:LODSB / LODSW执行的操作执行的操作:AL(AX) SI SI SI 1( 2) 将位于将位于DS段由段由SI指出的内存单元的字指出的内存单元的字节或字的内容取到节或字的内容取到AL或或AX中。中。注意:注意: 因为取来的字或字节放在因
48、为取来的字或字节放在AX或或AL中,中, LODSB / LODSW前面不能加前缀。前面不能加前缀。存储指令:存储指令: STOSB / STOSW 执行的操作:执行的操作: DI AL(AX) DI DI 1( 2) 把把AL或或AX中的一个字串存到位中的一个字串存到位ES 段由段由DI指出的内存单元,并自动修改地指出的内存单元,并自动修改地 址。址。例例:将将0404H单元开始的单元开始的256单元清零。单元清零。 CLD ;清方向标志;清方向标志 LEA DI,0404H ;取地址;取地址 MOV CX,256 ; 共共256个字节个字节 XOR AX,AX ;AX清零清零 REP ST
49、OSB例例:检验一段被送过的数据是否与原串完全相同检验一段被送过的数据是否与原串完全相同. CLD MOV CX,100 ;共共100字节字节 MOV SI,2400H ;源串首地址源串首地址 MOV DI,1200H ;目的串首地址目的串首地址 REPE CMPSB ; 串比较串比较,直到直到ZF=0,或或CX=0 AND CX,0FFH ;100个字串比较完否个字串比较完否 JZ EQQ ;都作了比较都作了比较, DEC SI ;否则否则,有不相同字串有不相同字串 MOV BX,SI ;将不同字串地址送出将不同字串地址送出 MOV AL,SI ;将不同字串送出将不同字串送出 JMP STOPEQQ: MOV BX,0 ;两字串完全相同两字串完全相同STOP:控制转移指令控制转移指令 转移和调用指令的寻址转移和调用指令的寻址 子程序调用和返回指令子程序调用和返回指令 无条件转移和条件转移指令无条件转移和条件转移指令 循环控制指令循环控制指令 处理器控制指令处理器控制指令转移和调用指令的寻址转移和调用指令的寻址 段内转移段内转移 近转移近转移: 相对相对偏移量偏移量为一个字;为一个字; 短转移:相对短转移:相对偏移量偏移量为一个字节;为一个字节; 段间转移段
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年欧派橱柜销售协议范本
- 二十世纪以来陶诗接受研究述评
- 二手房出租协议样式2024年
- 2024年监理服务招标协议模
- 城市供水管道系统安装工程承包协议
- 2024年协议担保方式全面解析
- 2023-2024学年浙江省浙东北联盟高三下学期月考(四)数学试题
- 2024年度水产养殖业务协作协议样本
- 2024年乳胶漆交易协议规范
- 2024年度定制机器购买协议模板
- DB21-T 3651-2022 规模肉牛场生物安全防控技术规范
- 《尿道狭窄切开术》
- 2022版高中信息科技课程标准试题和答案
- 2023年江苏省无锡锡山区市场监督管理局招聘11人笔试参考题库(共500题)答案详解版
- 《危机概述》课件
- 浙江省宁波市镇海区蛟川书院2023-2024学年九年级上学期期中科学试卷
- Activity课件1第三章 Activity(3.1Activity基础)
- 新建停车场安全施工方案
- 区块链应用操作员三级(高级)试题
- 2023年新改版教科版四年级上册科学期中测试卷 (超全)
- 施检表灌砂法测定压实度试验记录表
评论
0/150
提交评论