微机原理及接口技术第三章

上传人:桔**** 文档编号:589747826 上传时间:2024-09-11 格式:PPT 页数:48 大小:346.50KB
返回 下载 相关 举报
微机原理及接口技术第三章_第1页
第1页 / 共48页
微机原理及接口技术第三章_第2页
第2页 / 共48页
微机原理及接口技术第三章_第3页
第3页 / 共48页
微机原理及接口技术第三章_第4页
第4页 / 共48页
微机原理及接口技术第三章_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《微机原理及接口技术第三章》由会员分享,可在线阅读,更多相关《微机原理及接口技术第三章(48页珍藏版)》请在金锄头文库上搜索。

1、二、二、8086/80888086/8088的指令系统的指令系统( (续)续)二、二、 8086/8088的指令系统的指令系统(续续)内容内容: 3、逻辑运算和移位指令、逻辑运算和移位指令 (一)逻辑运算指令(一)逻辑运算指令 (二)移位指令(二)移位指令 (三)循环移位指令(三)循环移位指令 4、串操作指令、串操作指令 (一)(一) 与与与与REPREP相配合工作的相配合工作的相配合工作的相配合工作的MOVSMOVS、STOSSTOS、LODSLODS指令指令指令指令 (二)(二)与与与与REPE/REPZREPE/REPZ和和和和REPNE/REPNZREPNE/REPNZ联合工作的联合工

2、作的联合工作的联合工作的CMPSCMPS和和和和 SCAS SCAS指令指令指令指令(一)逻辑运算指令(一)逻辑运算指令(一)逻辑运算指令(一)逻辑运算指令1、AND(Logical and ) 逻辑逻辑“与与”指令指令2、 TEST(Test or non-destructive logical and ) 测试指令测试指令3、OR(Lgical inclusive or ) 逻辑逻辑“或或”指令指令4、XOR(Logical exclusive or) 逻辑逻辑“异或异或”指令指令5、NOT(Logical not ) 逻辑逻辑“非非”指令指令1 1、ANDAND(Logical and

3、)Logical and )逻辑逻辑逻辑逻辑“ “与与与与” ”指令指令指令指令格式:格式:AND dest, src ;B/W,(dest)(dest (src)src: src: 立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。dest: dest: 寄存器、存储器。寄存器、存储器。寄存器、存储器。寄存器、存储器。执行操作:进行执行操作:进行“与与”运算,运算,两位中有一位为两位中有一位为0(或二位都为(或二位都为0),则结),则结 果果 为为0,否则为,否则为1。操作类型举例操作类型举例: AND AL, 0FH ;寄存器;寄存器 立即数立

4、即数AND CX, DI ; 寄存器寄存器 寄存器寄存器AND SI, MEM_NAME ; 寄存器寄存器 存储器存储器AND ALPHA DI, AX ; 存储器存储器 寄存器寄存器 AND WORD PTR BXSI, 0FFFEH ; 存储器存储器 立即数立即数注意:注意: “ “与与与与” ”指令中操作数不能同时为存储器;指令中操作数不能同时为存储器;指令中操作数不能同时为存储器;指令中操作数不能同时为存储器; 影响条件码:影响条件码: CF0F=0, A未定义未定义 , SF ZF PF “与与”指令的用途指令的用途:(1)清清清清CF , CF , 自己自己自己自己“ “与与与与”

5、 ”自己自己自己自己. . 操作数不变操作数不变操作数不变操作数不变 ,CF=0CF=0 例:例:AND AL ; 结果:结果:操作数不变操作数不变操作数不变操作数不变 ,CF=0CF=0。 (2) 使使操作数中若干位保持不变,若干位与操作数中若干位保持不变,若干位与操作数中若干位保持不变,若干位与操作数中若干位保持不变,若干位与“ “1”1”相与相与相与相与;而而若干位置为若干位置为若干位置为若干位置为“ “0 “0 “的场合,若干位与的场合,若干位与的场合,若干位与的场合,若干位与“ “0” 0” 相与相与相与相与。例:例: 若(若(AL)=43 3H AND AL, 0F FH ; (A

6、L)=03H, (AL)(AL)0303不变不变不变不变; ;(AL)(AL)4747=00H,=00H,屏蔽高屏蔽高屏蔽高屏蔽高4 4位位位位。2 2、 TEST TEST(Test or non_destructive logical and )测试指令测试指令测试指令测试指令 格式:格式: TEST dest , src;(;(dest)(src)src: src: 立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。dest: dest: 寄存器、存储器。寄存器、存储器。寄存器、存储器。寄存器、存储器。执行操作:执行操作: 二个操作数相与的结

7、果不存,置条件码。二个操作数相与的结果不存,置条件码。操作类型举例:操作类型举例:TEST BH, 7 ; 寄存器寄存器 立即数立即数TEST SI , BP ;寄存器;寄存器 寄存器寄存器TEST DI ,TABLEBX ; 寄存器寄存器 存储器存储器TEST SI,CH ;存储器;存储器 寄存器寄存器TEST word ptr BXDI, 6ACEH ;存储器;存储器 立即数立即数用途:用途:常常常常用来检测一些条件是否满足用来检测一些条件是否满足用来检测一些条件是否满足用来检测一些条件是否满足,但又不希望改变原有,但又不希望改变原有的操作数的情况下,常在此指令后边加一条的操作数的情况下,

8、常在此指令后边加一条 条件转移指令。条件转移指令。例:判断例:判断A单元中数据的奇偶性单元中数据的奇偶性设:设: (A )= 0AEH程序:程序:MOV AL,A;(AL)=0AEH TEST AL,01H JZ EVEN ; 结果结果=0为偶数转为偶数转EVEN 奇数处理奇数处理 EVEN:偶数处理偶数处理检测(检测(AL)的最低位是否为)的最低位是否为0,若为,若为0转转EVEN3 3、OROR(Lgical inclusive or )Lgical inclusive or )逻辑逻辑逻辑逻辑“ “或或或或” ”指令指令指令指令格式:格式:OR dset, src;(;(dset)(ds

9、et) (src)dest: dest: 寄存器、存储器。寄存器、存储器。寄存器、存储器。寄存器、存储器。src: src: 立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。执行操作:执行操作: 进行按位进行按位“或或”运算运算 两位操作数中任一位为两位操作数中任一位为1(或都为(或都为1),), 则该位(结果)则该位(结果)=1,否则为否则为0。操作类型举例:操作类型举例:OR BL,0F6H; 寄存器寄存器 立即数立即数OR AH, BL;寄存器;寄存器 寄存器寄存器OR CL ,BETABXDI; 寄存器寄存器 存储器存储器OR GAMMA

10、SI ,DX;存储器;存储器 寄存器寄存器OR BYTE PTR MEM_BYTE , 80H;存储器;存储器 立即数立即数注意:注意: “或或或或” ”指令中操作数不能同时为存储器;指令中操作数不能同时为存储器;指令中操作数不能同时为存储器;指令中操作数不能同时为存储器; 影响条件码:影响条件码: CF0F=0, A未定义未定义 , SF ZF PF 用途:用途:(1)清)清CF , 自己与自己自己与自己自己与自己自己与自己“ “或或或或” ”, ,操作数不变,操作数不变,操作数不变,操作数不变,CF=0CF=0 例:例: OR AL ;(;(AL)不变,不变,CF=0(2)使某个操作数使某

11、个操作数若干位保持不变,若干位与若干位保持不变,若干位与若干位保持不变,若干位与若干位保持不变,若干位与“ “0”0”或或或或 ;而若干位置而若干位置而若干位置而若干位置1 1。若干位与。若干位与。若干位与。若干位与“ “1”1”或或或或 。 (3) 将两个操作数信息组合。将两个操作数信息组合。 若(若(AL)=03H 用用OR指令组合使指令组合使(AL)=33H=3 。 OR AL,30H ;(;(AL)=33H 4 4、XORXOR(Logical exclusive or)Logical exclusive or)逻辑逻辑逻辑逻辑“ “异或异或异或异或” ”指令指令指令指令格式:格式:X

12、OR dset , src ;B/W(dset) (dset) (src)dest: dest: 寄存器、存储器。寄存器、存储器。寄存器、存储器。寄存器、存储器。src: src: 立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。执行的操作:对指令的两个操作数进行按位执行的操作:对指令的两个操作数进行按位“异或异或”运算。运算。二位不相同时为二位不相同时为二位不相同时为二位不相同时为1, 1, 相同时为相同时为相同时为相同时为0 0。操作类型举例:操作类型举例:XOR DI, 23F6HH ; 寄存器寄存器 立即数立即数XOR SI , DX ;

13、寄存器;寄存器 寄存器寄存器XOR CL , BUFFER ; 寄存器寄存器 存储器存储器XOR MEMBX,AX ;存储器;存储器 寄存器寄存器XOR byte ptrTABLEBPSI, 3DH ; 存储器存储器 立即数立即数注意:注意: “ “或或或或” ”指令中操作数不能同时为存储器;指令中操作数不能同时为存储器;指令中操作数不能同时为存储器;指令中操作数不能同时为存储器; 影响条件码:影响条件码: CF0F=0, A未定义未定义 , SF ZF PF 用途:用途:对某些特定位求反,某些特定位与对某些特定位求反,某些特定位与对某些特定位求反,某些特定位与对某些特定位求反,某些特定位与“

14、 “1” 1” 其余位保持不变,保持不变与其余位保持不变,保持不变与其余位保持不变,保持不变与其余位保持不变,保持不变与“ “0” 0” 。应用举例:应用举例:例例1: 将(将(AL)中的第中的第1、3、5、7位求反位求反 0、2、4、6位保持不变。位保持不变。MOV AL, 0FHXOR AL,0AAH例例2:比较三条(比较三条(AX)清清“0”指令:指令: XOR AX , AX ; 清清AX , 清清CF,2个字节,个字节,3个个T。 SUB AX, AX ;清清AX , 清清CF,2个字节,个字节,3个个T。 MOV AX , 0 ;清清AX ,不影响标志位,不影响标志位, 3个字节,

15、个字节,4个个T。 5 5、NOTNOT(Logical not )Logical not )逻辑逻辑逻辑逻辑“ “非非非非” ”指令指令指令指令格式:格式: NOT dest ;B/W 指令操作数只有一个指令操作数只有一个,指令指令对操作数按位求反对操作数按位求反对操作数按位求反对操作数按位求反。执行操作:执行操作: 字节求反:(字节求反:(dest)0FFH-(dest) 字求反:字求反: (dest 0FFFFH-(dest) 源操作数:寄存器、存储器。不能是立即数。源操作数:寄存器、存储器。不能是立即数。源操作数:寄存器、存储器。不能是立即数。源操作数:寄存器、存储器。不能是立即数。

16、影响标志位:对标志位无影响。影响标志位:对标志位无影响。操作类型举例:操作类型举例: NOT AH; 8位寄存器求反位寄存器求反 NOT CX;16位寄存器求反位寄存器求反 NOT BYTE PTR BP;8位存储器求反位存储器求反 NOT WORD PTR COUNT ;16位存储器求反位存储器求反综合举例:综合举例:1使某些位置使某些位置“0”。 IN AL,61H;(;(AL)= B 设备控制寄存器设备控制寄存器 想使此位为想使此位为0执行指令:执行指令: AND ALAND AL,0FDH0FDH 即可。即可。2. 使某些位置使某些位置“1”。 IN AL,61H;(;(AL)= 执行

17、指令:执行指令: OR ALOR AL,0202 想使此位为想使此位为“1”3. 使某些位求反:使某些位求反:IN AL,61H ;(;(AL)= 0 XOR ALXOR AL,02H02H 0 0 0 0 0 0 1 0 1 4. 测试某些位(测奇偶性):测试某些位(测奇偶性):测试测试 “奇奇”“偶偶”性。性。 见见TEST指令的用途例子。指令的用途例子。(二)移位指令(二)移位指令(二)移位指令(二)移位指令 (8086 (8086有有有有8 8条移位指令条移位指令条移位指令条移位指令) ) : : 1 1、 算逻移位指令算逻移位指令算逻移位指令算逻移位指令( 4条条 ): SHL ,

18、SHR,SHL , SHR, SAL , SAR SAL , SAR 。(1)、)、 SHL/SAL(Shift logical left/shift arithmetic left) 逻辑左移逻辑左移/算术左移指令算术左移指令(2)、)、SHR (Shift logical right ) 逻辑右移指令逻辑右移指令(3)、)、SAR (Shift arithmetic right )算术右移指令算术右移指令2 2、循环移位、循环移位、循环移位、循环移位( 4条)条): ROL, ROR , RCL, RCRROL, ROR , RCL, RCR。(1)、)、ROL (Rotate left

19、) 不含不含CF循环左移指令循环左移指令(2)、)、ROR (Rotate right ) 不含不含CF循环右移指令循环右移指令(3)、)、RCL (Rotate left through carry )含含CF循环左移指令循环左移指令(4)、)、RCR (Rotate right through carry )含含CF循环右移指令循环右移指令共同点:共同点: 所有移位指令都可以作所有移位指令都可以作B/W操作。操作。 指令中的指令中的 destdest : : 寄存器、存储器寻址方式。寄存器、存储器寻址方式。寄存器、存储器寻址方式。寄存器、存储器寻址方式。 cnt : 表示移位次数表示移位次

20、数 cnt=1,1可写在指令中,不能是可写在指令中,不能是1以外的常数。以外的常数。 cnt1,用,用CL存放移位次数存放移位次数 ,不能是其他寄存器。不能是其他寄存器。 如:如:SAL AX,1 MOV CL,4 SAL AX,CL 利用移位指令编制利用移位指令编制 *, / 程序,程序, 执行时间比直接用执行时间比直接用 * , / 指令快,指令快, 速度可提高速度可提高5-6倍。倍。1 1、 算逻移位指令算逻移位指令算逻移位指令算逻移位指令( 4条条 ) : SHL , SHR,SHL , SHR, SAL , SAR SAL , SAR (1)、)、 SHL/SAL(Shift log

21、ical left/shift arithmetic left)逻辑左移逻辑左移/算术左移指令算术左移指令格式:格式: SHL dest ,cnt ;逻辑左移指令;逻辑左移指令, B/W SAL dest ,cnt ;算术左移指令;算术左移指令, B/W dest : 寄存器、存储器寻址方式。寄存器、存储器寻址方式。 cnt : 表示移位次数表示移位次数 cnt=1,1可写在指令中。可写在指令中。 cnt1,用,用CL存放移位次数存放移位次数 。 执行操作:执行操作:相当于无符号数的相当于无符号数的2功能。功能。 SHL/SAL指令操作示意图如下图所示:指令操作示意图如下图所示:指令格式举例:

22、指令格式举例: SHL AH,1 SAL SI, CL SAL WORD PTR BX+5 ,1 SHL BYTE PTR , CL0CFdest(2)、)、SHR (Shift logical right )逻辑右移指令逻辑右移指令格式:格式: SHR dest ,cnt ;逻辑右移指令;逻辑右移指令, B/W执行操作:执行操作:相当于无符号数的相当于无符号数的2功能。功能。 SHR指令操作示意图如下图所示:指令操作示意图如下图所示:dest : 寄存器、存储器寻址方式。寄存器、存储器寻址方式。指令格式举例:指令格式举例:SHR BL , 1SHR AX , CLSHR BYTE PTR D

23、I+BP,1SHR WORD PTR BLOCK ,CLdestCF0(3 3)、)、)、)、SARSAR (Shift arithmetic right )算术右移指令算术右移指令算术右移指令算术右移指令格式:格式: SAR dest ,cnt ;算术右移指令;算术右移指令, B/W执行操作:执行操作:相当于带符号数的相当于带符号数的2功能功能 SAR指令操作示意图如下图所示指令操作示意图如下图所示dsetdest : dest : 寄存器、存储器寻址方式。寄存器、存储器寻址方式。寄存器、存储器寻址方式。寄存器、存储器寻址方式。指令格式举例:指令格式举例:SAR AL , 1SHR DL ,

24、 CLSHR WORD PTR TABLESI,1SHR BYTE PTR STATUS ,CLCF2 2、循环移位、循环移位、循环移位、循环移位( 4条)条): ROL, ROR , RCL, RCRROL, ROR , RCL, RCR。共同点:共同点: ROLROL、RORROR 不含不含CF循环移位指令,循环移位指令,操作数移动操作数移动操作数移动操作数移动8 8次后还原次后还原次后还原次后还原。 RCLRCL、 RCRRCR 含含CF循环移位指令,循环移位指令,操作数移动操作数移动操作数移动操作数移动9 9次后还原次后还原次后还原次后还原。 影响标志影响标志OF、CF ROL、 RC

25、L影响标志影响标志OF、CF情况相同情况相同 ; ROR 、 RCR影响标志影响标志OF、CF情况相同情况相同 。 SF、ZF、PF、AF不影响。不影响。(1 1)、)、)、)、ROLROL (Rotate left )不含不含不含不含CFCF循环左移指令循环左移指令循环左移指令循环左移指令格式:格式: ROL dest ,cnt ;不含;不含CF循环左移指令循环左移指令, B/W执行操作:执行操作:ROL指令操作示意图如下图所示指令操作示意图如下图所示 移动移动移动移动8 8次后操作数还原。次后操作数还原。次后操作数还原。次后操作数还原。CFdest指令格式举例:指令格式举例:ROL BH

26、, 1ROL DX , CLROL WORD PTR TABLEDI,1ROL BYTE PTR ALPHA ,CL(2 2)、)、)、)、RORROR (Rotate right )不含不含不含不含CFCF循环右移指令循环右移指令循环右移指令循环右移指令格式:格式: ROR dest ,cnt ;不含;不含CF循环右移指令循环右移指令, B/W执行操作:执行操作:ROR指令操作示意图如下图所示指令操作示意图如下图所示 右移右移右移右移8 8次后操作数还原。次后操作数还原。次后操作数还原。次后操作数还原。CFdest指令格式举例:指令格式举例:ROR CX , 1ROL BH , CLROL

27、BYTE PTRBETA , 1ROL WORD PTR COUNT , CL(3 3)、)、)、)、RCLRCL (Rotate left through carry )含含含含CFCF循环左移指令循环左移指令循环左移指令循环左移指令格式:格式: RCR dest ,cnt ;含;含CF循环左移指令循环左移指令, B/W执行操作:执行操作:RCL指令操作示意图如下图所示指令操作示意图如下图所示 左移左移左移左移9 9次后操作数还原次后操作数还原次后操作数还原次后操作数还原。CFdest指令格式举例:指令格式举例:RCL BX , 1RCL DL , CLRCL BYTE PTR ARRAYD

28、I , 1RCL WORD PTR SI+BP , CL影响标志:影响标志:影响标志:影响标志:RCL RCL 与与与与ROL ROL 影响标志影响标志影响标志影响标志OFOF、CFCF情况相同情况相同情况相同情况相同(4 4)、)、)、)、RCRRCR (Rotate right through carry )含含含含CFCF循环右移指令循环右移指令循环右移指令循环右移指令格式:格式: RCR dest ,cnt ;含;含CF循环左移指令循环左移指令, B/W执行操作:执行操作:RCR指令操作示意图如下图所示指令操作示意图如下图所示 右移右移右移右移9 9次后操作数还原。次后操作数还原。次后

29、操作数还原。次后操作数还原。CFdest指令格式举例:指令格式举例:RCR DI, 1RCR SI , CLRCR WORD PTRSI+BX+3, 1RCL BYTE PTRPORT, CL影响标志:影响标志:影响标志:影响标志:RCR RCR 与与与与 ROR ROR 影响标志影响标志影响标志影响标志OFOF、CFCF情况相同情况相同情况相同情况相同循环移位指令循环移位指令循环移位指令循环移位指令(Rotate)与移位指令与移位指令与移位指令与移位指令(Shift)不同点不同点不同点不同点: 循环移位指令移位后,操作数中原来各数位的信息不会循环移位指令移位后,操作数中原来各数位的信息不会丢

30、失,这是移动了位置,必要时可以恢复。丢失,这是移动了位置,必要时可以恢复。 循环移位指令可以对操作数进行测试。循环移位指令可以对操作数进行测试。例:测试例:测试(AL)5 =? 0MOV CL , 3ROL AL , CLROL AL , CLJNC ZEROZERO:4、串操作指令、串操作指令(String manipulation ) “串串”就是内存中一段地址相连的字节或字。就是内存中一段地址相连的字节或字。 串操作串操作串操作串操作对串中各项进行操作,也叫数据块操作对串中各项进行操作,也叫数据块操作对串中各项进行操作,也叫数据块操作对串中各项进行操作,也叫数据块操作。 8086有有5种

31、基本操作:种基本操作: (1) MOVS(Move string) 串传送指令串传送指令 (2)CMPS(Compare string) 串比较指令串比较指令 (3) SCAS(Scan string) 串扫描指令串扫描指令 (4)LODS(Load from string) 从串取指令从串取指令 (5)STOS (Store in to string) 存入串指令存入串指令共同点:共同点:共同点:共同点: 可以只有源操作数,可以只有目标操作数,可能二者都有。可以只有源操作数,可以只有目标操作数,可能二者都有。 源操作数用源操作数用SI 寻址,隐含寻址,隐含DS值为段地址,可以用段跨越前缀指定

32、其它值为段地址,可以用段跨越前缀指定其它段。段。 目标操作数用目标操作数用DI寻址,隐含寻址,隐含ES为段地址。为段地址。 每次操作对每次操作对SI、DI 调整:调整:DF=1DF=1,DIDI、SISI自动自动自动自动-1 (-1 (字节)或字节)或字节)或字节)或-2-2(字);(字);(字);(字);DF=0DF=0,DIDI、SISI自动自动自动自动+1+1(字节)或(字节)或(字节)或(字节)或+2+2(字)。(字)。(字)。(字)。 与上述指令基本配合使用前缀有:与上述指令基本配合使用前缀有: REPREP(Repeat)重复。重复。重复。重复。 REPE/REPZREPE/REP

33、Z(Repeat while equal/zero) 相等相等相等相等/ /为零则重复。为零则重复。为零则重复。为零则重复。 REPNE/REPNZREPNE/REPNZ(Repeat while not equal/not zero)不相等不相等不相等不相等/ /不为零则重复不为零则重复不为零则重复不为零则重复。下面分二种情况来讨论:下面分二种情况来讨论:( (一一一一) ) 与与与与REPREP相配合工作的相配合工作的相配合工作的相配合工作的MOVSMOVS、STOSSTOS、LODSLODS指令指令指令指令 REP REP 重复串操作直到(重复串操作直到(重复串操作直到(重复串操作直到(

34、CXCX)=0=0为止为止为止为止( (二二二二) ) 与与与与REPE/REPZREPE/REPZ和和和和REPNE/REPNZREPNE/REPNZ联合工作的联合工作的联合工作的联合工作的CMPSCMPS和和和和SCASSCAS 指令指令指令指令 REPE/REPZ REPE/REPZ 当相等当相等当相等当相等/ /为零时重复串操作为零时重复串操作为零时重复串操作为零时重复串操作 REPNE/REPNZ REPNE/REPNZ 当不相等当不相等当不相等当不相等/ /不为零时重复串操作不为零时重复串操作不为零时重复串操作不为零时重复串操作( (一一一一) ) 与与与与REPREP相配合工作的

35、相配合工作的相配合工作的相配合工作的MOVSMOVS、STOSSTOS、LODSLODS指令指令指令指令 REP REP 重复串操作直到(重复串操作直到(重复串操作直到(重复串操作直到(CXCX)=0=0为止为止为止为止 格式:格式:REP String Primitive 串指令串指令 String Primitive 可为:可为:MOVS、STOS、LODS。1.MOVS(Move String) 串传送串传送2.LODS(Load from String) 从串取指令从串取指令3.STOS(Store into String) 存入串指令存入串指令 REP REP 重复串操作执行过程重复

36、串操作执行过程重复串操作执行过程重复串操作执行过程: : (1)当当(CX)= 0 ,结束结束REP, 执行执行REP后的下一条指令。后的下一条指令。 (2) 当当(CX)0, (CX) (CX) -1 , (3) 执行执行REP后的串指令,后的串指令, (4) 重复重复(1)(3)。)。REP 执行流程图执行流程图1. 1.MOVSMOVS(Move stringMove string)串传送串传送串传送串传送2. 2.串传送有串传送有串传送有串传送有3 3种格式:种格式:种格式:种格式:(1) MOVS dest,src;(;(ES):():(DI))(DS)()(SI)(2)MOVSB

37、(字节)字节);(SI)(SI)1,(,(DI)(DI) 1(3)MOVSW (字);(字);(SI)(SI)2,(,(DI)(DI)2 当方向标志当方向标志当方向标志当方向标志 CLD , DF=0CLD , DF=0时时时时 用用用用“ “+”+” STD , DF=1 STD , DF=1时时时时 用用用用“ “-”-” 该指令不影响条件码该指令不影响条件码 。 * MOVMOV单指令不能完成单指令不能完成 存储单元之间的数据传送存储单元之间的数据传送存储单元之间的数据传送存储单元之间的数据传送; MOVSMOVS指令就是为解决指令就是为解决指令就是为解决指令就是为解决 存储单元之间数据

38、传送而设置的。存储单元之间数据传送而设置的。存储单元之间数据传送而设置的。存储单元之间数据传送而设置的。例:将内存的数据段中以例:将内存的数据段中以AREA1为首地址的为首地址的100个数据,传个数据,传送到附加段中的送到附加段中的AREA2为首地址的区域。为首地址的区域。用用MOVS串操作指令编程:串操作指令编程: MOV AX,SEG AREA1MOV DS,AX MOV AX,SEG AREA2MOV ES,AX MOV SIMOV SI,OFFSET AREA1OFFSET AREA1 MOV DIMOV DI,OFFSET AREA2OFFSET AREA2 MOV CXMOV CX

39、,100100 CLDCLD; DF=0,增址传送,增址传送 REP MOVS AREA1, AREA2MOVS AREA1, AREA2应用应用应用应用MOVMOV指令编程指令编程指令编程指令编程: MOV AX,SEG AREA1 MOV DS,AX MOV AX,SEG AREA2 MOV ES,AX MOV SIMOV SI,OFFSET AREA1 OFFSET AREA1 ;将;将;将;将ARE1ARE1偏移地址偏移地址偏移地址偏移地址SISI MOV DI MOV DI,OFFSET AREA2OFFSET AREA2 MOV CX MOV CX,100100LOOP1:MOV

40、ALMOV AL,SISI ; (AL)(DS):():(SI) MOV ESMOV ES:DIDI,ALAL ;(;(ES):():(DI)(AL) INC SI INC DI DEC CX JNE LOOP1归纳在执行归纳在执行MOVS指令时,应该先做好以下准备工作:指令时,应该先做好以下准备工作:(1) (1) 数据段中数据段中源串首地址源串首地址源串首地址源串首地址(或反向传送末地址)(或反向传送末地址)存入存入存入存入SISISISI寄存中寄存中寄存中寄存中。(2) (2) 附加段中附加段中目的串首地址目的串首地址目的串首地址目的串首地址(或反向传送末地址)(或反向传送末地址)存入存

41、入存入存入DIDIDIDI寄存中寄存中寄存中寄存中。(3)(3) 数据串长度存入数据串长度存入数据串长度存入数据串长度存入CXCXCXCX寄存器寄存器寄存器寄存器。(4) (4) 建立方向标志建立方向标志建立方向标志建立方向标志 建立方向标志介绍两条指令:建立方向标志介绍两条指令:建立方向标志介绍两条指令:建立方向标志介绍两条指令: CLDCLD(clear direction flagclear direction flag) 功能:功能:DF=0DF=0DF=0DF=0,执行串处理指令时执行串处理指令时 可以使地址可以使地址自动自动自动自动+1+1+1+1或或或或+2+2+2+2。 STD

42、STD(set direction flagset direction flag)功能:功能:DF=1DF=1DF=1DF=1,执行串处理指令时可以使地址执行串处理指令时可以使地址自动自动自动自动-1-1-1-1或或或或 -2-2-2-2。2. 2.LODS(Load from string) LODS(Load from string) 从串取指令从串取指令从串取指令从串取指令从串取指令有从串取指令有从串取指令有从串取指令有3 3种格式:种格式:种格式:种格式:(1)LODS src;(字节)字节)(AL) (DS):(SI), (SI) (SI) 1(2) (字(字)(AX) (DS):(

43、SI),(SI) (SI)2(2)LODS B (字节)字节);(AL) (DS):(SI),(SI) (SI) 1(3)LODS W (字)字) ;(AX) (DS):(SI),(SI) (SI)2(4)功能:该指令把由功能:该指令把由(SISI)指定的数据段中某单元内容指定的数据段中某单元内容指定的数据段中某单元内容指定的数据段中某单元内容 (AL)(AL)(5)(5)或或或或 (AX)(AX)中中中中。DF=0,(,(SI) (SI)+1或或+2DF=1,(,(SI) (SI)-1或或-2LODSLODS应用注意:应用注意:应用注意:应用注意:(1) 指令允许用段跨越前缀来指定非数据段的

44、存储区。指令允许用段跨越前缀来指定非数据段的存储区。(2) 该指令不影响条件码。该指令不影响条件码。(3)一般说来,一般说来,(4)它不与它不与REP联用联用,每重复一次,累加器的内容就改变一次。每重复一次,累加器的内容就改变一次。 (AL)中只能保持最后一个元素。中只能保持最后一个元素。有时有时缓冲区中的一串字符需要多次取出测试时可用本指令缓冲区中的一串字符需要多次取出测试时可用本指令缓冲区中的一串字符需要多次取出测试时可用本指令缓冲区中的一串字符需要多次取出测试时可用本指令。 3 STOS3 STOS(Store into stringStore into string) 存入串指令存入串

45、指令存入串指令存入串指令将将将将(AL)(AL)或(或(或(或(AX)AX) ( (ES):(DI)(ES):(DI),(,(,(,(DI) 1DI) 1或或或或22(DI)(DI)存入串指令有存入串指令有存入串指令有存入串指令有3 3种格式:种格式:种格式:种格式:(1)STOS dest;(字节)字节) (ES):(DI) (AL) , (DI) (DI) 1(2) (字(字) (ES):(DI) (AX) , (DI) (DI) 2(3)(2) STOS B (字节)字节); (ES):(DI) (AL) , (DI) (DI) 1(4)(3) STOS W (字)字) ; (ES):(

46、DI) (AX) , (DI) (DI) 2用途:用途:与与REP联用时,(联用时,(CX)缓冲区长度。用来建立一串相同值。缓冲区长度。用来建立一串相同值。例:在附加段例:在附加段STORE开始存开始存5个空格个空格程序:程序: MOV AL,20H ;_ (AL) MOV CX,5 MOV DI,OFFSET STORE CLD REP STOSB ;(ES):(DI) (AL) (DI) (DI)+1( (二二二二) ) 与与与与REPE/REPZREPE/REPZ和和和和REPNE/REPNZREPNE/REPNZ联合工作的联合工作的联合工作的联合工作的CMPSCMPS和和和和SCASS

47、CAS指令指令指令指令 REPNE/REPNZ REPNE/REPNZ 当不相等当不相等当不相等当不相等/ /不为零时重复串操作不为零时重复串操作不为零时重复串操作不为零时重复串操作 REPE/REPZ REPE/REPZ 当相等当相等当相等当相等/ /为零时重复串操作为零时重复串操作为零时重复串操作为零时重复串操作执行过程:执行过程:(1)当当(CX)= 0 , 结束结束REPZ, (2)执行执行REPZ下一条指令;下一条指令;(2) 当当(CX)0,将,将CX 的内容减的内容减1,执行执行REPZ后的串指令;后的串指令;(3) 当当ZF = 1, 返回返回 (1) ;(4) 当当ZF1,

48、则结束则结束REPZ 执行执行REPZ下一条指令。下一条指令。注意:注意:注意:注意:(CX)(CX)减减减减1 1操作不影响标志操作不影响标志操作不影响标志操作不影响标志ZFZF标志由串操作决定标志由串操作决定标志由串操作决定标志由串操作决定当当当当 (CX) = 0(CX) = 0或或或或ZF=0ZF=0时退出循环时退出循环时退出循环时退出循环 REPE/REPZ REPE/REPZ 当相等当相等当相等当相等/ /为零时重复串操作为零时重复串操作为零时重复串操作为零时重复串操作执行过程:执行过程:(1)当当(CX )= 0 , 结束结束REPNZ,(2) 执行执行REPNZ下一条指令。下一

49、条指令。(2) 当当(CX)0,将,将CX 的内容减的内容减1, 执行执行REPNZ后的串指令。后的串指令。 当当ZF = 0, 返回返回(1); 当当ZF0, 则结束则结束REPNZ, (4) 执行执行REPNZ下一条指令。下一条指令。注意:注意: (CX)(CX)减减减减1 1操作不影响标志操作不影响标志操作不影响标志操作不影响标志 ZF ZF标志由串操作决定标志由串操作决定标志由串操作决定标志由串操作决定 当当当当 (CX) = 0(CX) = 0或或或或ZF=1ZF=1时退出循环时退出循环时退出循环时退出循环REPNZ执行流程执行流程 REPNE/REPNZ REPNE/REPNZ 当

50、不相等当不相等当不相等当不相等/ /不为零时重复串操作不为零时重复串操作不为零时重复串操作不为零时重复串操作1 1、CM PSCM PS(Compare string ) Compare string ) 串比较指令串比较指令串比较指令串比较指令 (SI)作为源串地址,(作为源串地址,(DI)目的串地址目的串地址串比较指令串比较指令串比较指令串比较指令有有有有3 3种格式:种格式:种格式:种格式:(1) CMPS dest,src;(ES) :(DI) -(DS):(SI),结果不存,置标志结果不存,置标志结果不存,置标志结果不存,置标志(2)CMPS B (字节)字节);(SI) (SI)1

51、,(DI)(DI) 1(3)CMPS W (字);字);(SI) (SI)2,(DI) (DI)2执行操作:执行操作:(ES) :(DI) -(DS):(SI),结果不存,置标志。结果不存,置标志。字节操作:字节操作:(SI) (SI)1,(DI)(DI) 1字操作:字操作:(SI) (SI)2,(DI) (DI)2注意:注意:注意:注意: 两数相减,只影响标志,不影响操作数。两数相减,只影响标志,不影响操作数。两数相减,只影响标志,不影响操作数。两数相减,只影响标志,不影响操作数。其它操作规定与其它操作规定与其它操作规定与其它操作规定与MOVSMOVS同。同。同。同。学习学习REPZ CMP

52、SB指令指令例:利用例:利用CMPS指令对指令对STRING1和和STRING2二个字符串进行二个字符串进行 比较,相同在比较,相同在RESULT 单元送单元送00H,不同送,不同送0FFH。MOV SI,OFFSET STRING1 MOV DI,OFFSET STRING2 MOV CX,COUNT CLD REPZ CMPSB JNZ UNMAT ;若串不同,在;若串不同,在RESUL单元中置单元中置0FFH MOV AL,0 ;若串相等,在;若串相等,在RESULT单元中置单元中置00H JMP OULPT UNMAT:MOV AL,0FFH OUTPTOUTPT: MOV RESUL

53、T MOV RESULT,ALAL HLTHLT2 2、SCASSCAS (Scan string ) 串扫描指令,搜索指令串扫描指令,搜索指令串扫描指令,搜索指令串扫描指令,搜索指令 (DIDI)字符串起始地址,(字符串起始地址,(字符串起始地址,(字符串起始地址,(AL)AL)或(或(或(或(AXAX) 关键字关键字关键字关键字 串串串串扫描扫描扫描扫描指令指令指令指令有有有有3 3种格式种格式种格式种格式:格式:格式:SCAS dest SCASB(字节);(字节);(AL)-(ES):():(DI),(),(DI)(DI)1 SCASW(字);(字);(AX)-(ES):():(DI)

54、,(),(DI) (DI)2注意:注意:注意:注意: (AL)或()或(AX) - 目的串目的串两数相减,只影响标志,不影响操作数。两数相减,只影响标志,不影响操作数。其它特性与其它特性与MOVS同。同。 REPNE SCASBREPNE SCASB指令应用指令应用指令应用指令应用例:要搜索的关键字例:要搜索的关键字 放在放在(AL)或或(AX)中,搜索某一数据块或字符串中有无中,搜索某一数据块或字符串中有无关关 键字,键字,若有,把搜索次数记下来,且记录关键字地址若有,把搜索次数记下来,且记录关键字地址若有,把搜索次数记下来,且记录关键字地址若有,把搜索次数记下来,且记录关键字地址;若次数为

55、若次数为若次数为若次数为0 0,表示,表示,表示,表示没有要搜索的关键字。没有要搜索的关键字。没有要搜索的关键字。没有要搜索的关键字。MOV DI,0FFSET BLOCK;设置数据块地址指针;设置数据块地址指针 MOV CX,COUNT ;设置数据块长度;设置数据块长度MOV AL,CHAR CHAR ; 关键字送入关键字送入AL或或AXREP NE SCASBREP NE SCASB ;(;(CX)0,Z=0 继续继续SCASB JZ FOUND MOV DI,0 JMP DONEFOUND:DEC DI MOV POINTRMOV POINTR,DIDI MOV BX MOV BX,OF

56、FSET BLOCKOFFSET BLOCK SUB BX SUB BX,DI DI MOV DIMOV DI,BX BX ;把搜索次数记下来,且记录关键字地址把搜索次数记下来,且记录关键字地址把搜索次数记下来,且记录关键字地址把搜索次数记下来,且记录关键字地址DONE: HLT小结:串操作指令重复前缀,操作数,地址指针小结:串操作指令重复前缀,操作数,地址指针小结:串操作指令重复前缀,操作数,地址指针小结:串操作指令重复前缀,操作数,地址指针指令指令重复重复前缀前缀操作数操作数地址指针寄存器地址指针寄存器MOVSMOVSREPREPREPREP源,目标源,目标(DS)(DS):(SI) :(SI) , ,(ES)(ES):(:(DI)DI)CMPSREPE/REPNEREPE/REPNEREPE/REPNEREPE/REPNE源,目标源,目标(DS)(DS):(SI) :(SI) , ,(ES)(ES):(:(DI)DI)SCASSCASREPE/REPNEREPE/REPNEREPE/REPNEREPE/REPNE目标目标(ES)(ES): (: (DI)DI)LODSLODS无无无无源源(DS)(DS): (SI): (SI)STOSSTOSREPREPREPREP目标目标(ES)(ES): (: (DI)DI)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号