专升本微机原理_清华版_第五章(二)

上传人:飞*** 文档编号:46160364 上传时间:2018-06-23 格式:PPT 页数:43 大小:245.50KB
返回 下载 相关 举报
专升本微机原理_清华版_第五章(二)_第1页
第1页 / 共43页
专升本微机原理_清华版_第五章(二)_第2页
第2页 / 共43页
专升本微机原理_清华版_第五章(二)_第3页
第3页 / 共43页
专升本微机原理_清华版_第五章(二)_第4页
第4页 / 共43页
专升本微机原理_清华版_第五章(二)_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《专升本微机原理_清华版_第五章(二)》由会员分享,可在线阅读,更多相关《专升本微机原理_清华版_第五章(二)(43页珍藏版)》请在金锄头文库上搜索。

1、5.3.2 逻辑运算和移位指令1 逻辑运算指令单操作数指令:NOT 双操作数指令:AND,OR,XOR,TEST不影响标志位指令:NOT 影响标志位指令:AND,OR,XOR,TESTNOT 目标 (只有一个寄存器/内存操作数,此指令 用于将操作数的所有二进制数求反)NOT BL 假如 BL=10100101B,则结果为BL=01011010B 不影响标志位 例如: NOT AL ; NOT AX; NOT WORD PTR1000H;AND BL, 0FHxxxxxxxx (BL)00001111 0F0000xxxx 结果ANDAND目标,源 (常用于将二进制数的某些位清0)AND AL,

2、0FH; AND AX,1000H AND AX,BX ; AND DX,BX+SIAND指令可以使操作数某些位被屏蔽。把AND指令 的源操作数设置成一个立即数,需要屏蔽的位设为0 ,其它位设为1,指令执行后对应目的操作数设为0的 相应位就可清0,其它各位则维持不变。OR BL, 0FH xxxxxxxx (BL)00001111 0Fxxxx1111 结果(BL)OROR 目标,源 (常用于将二进制数的某些位置1) OR AL,30H; OR AX,00F0H OR BYTE PTRBP,0FHXOR 目标,源 (用于将二进制数的某些位求反,将要求反的某些 位与1异或。或对于某寄存器清0)

3、XOR BL, 0FHxxxxxxxx (BL)00001111 0Fxxxxxxxx 结果(BL)XORXOR AL,OFH; XOR AX,AXXOR CX,1000H; XOR BYTE PTRDI,55H XOR AX,AX;AX清零F位测试 TESTTEST 用于测试二进制数的某1位 功能相当于AND指令,但只影响标志位,不影响 目标TEST AL, 1;测试AL中的最低位是否为0或1 JNZ RIGHT TEST AL, 80H;测试AL中的最高位是否为0或1 JNZ LEFT当被测试位为0时,ZF置位(ZF=1); 当被测试位为1时,ZF复位(ZF=0)逻辑运算指令影响标志位的情

4、况:NOT 指令不影响标志位;AND、OR、XOR、TEST指令使标志位OF=0、 CF=0,AF=任意值,SF、ZF、PF根据结果而定。2. 移位指令非循环移位指令: SHL,SAL,SHR,SAR 影响标志位循环移位指令: ROL,ROR,RCL,RCR 影响CF,OF标志位操作数8位或16位 双操作数1、 SHL 目标,计数值 ; SAL 目标,计数值 ;逻辑左移; 算术左移;CF0左移一位相当于乘以2,例如当AL=00000010B(02H) 时,执行 “SAL AL,1”后AL=00000100B(04H)1111 1111B(FFH)算术左移1位后为1111 1110B(FEH)-

5、1 -2 1000 0001B(81H)算术左移1位后为0000 0010B(FEH)-127 +2 (溢出)移位后最高位与进位CF不同,(移位前后符号位不 同了),OF置1一、非循环移位指令2、SHR 目标,计数值 ;逻辑右移0CFCF3、SAR 目标,计数值 ;算术右移相当于除以2 1000 0010B(82H)移1位 后为0100 0001B(41H) 130 65 相当于除以2 1000 0010B(82H)移1位 后为1100 0001B(C1H) -126 -63若需要带符号的数乘以(除以)2的整数次幂,使用算术移位 指令(SAL,SAR);若需要无符号的数乘以(或除以)2的 整数

6、次幂,使用逻辑移位指令(SHL,SHR)二、循环移位指令ROL 目标,计数值 ; 不带CF的循环左移指令ROL CFROR 目标,计数值 ; 不带CF的循环右移指令RORCFMOV CL,4 ROR AL,CL执行指令前: AL=01001000B 执行指令后:AL=10000100BMOV CL,2 ROL AL,CL 执行指令前: AL=01H 执行指令后:AL=40H循环移位指令RCL 目标,计数值 ; 带CF的循环左移指令RCL CF0RCR 目标,计数值 ; 带CF的循环右移指令RCR CFMOV CL,2 RCL AL,CL执行指令前: CF=1,AL=01010000B 执行指令

7、后:AL=01000010B,CF=1移位指令的特点: 指令码 目标,计数值 ; 目标只能是寄存器、存储器,计数值只能是1或CL中的值; 例如: SHL DX,1; SHR WORD PTRBX,CL SAL BX,1; SAR AX,CL; ROR AL,CL ROL BYTE PTRBX,1; RCR BYTE PTRBX,CL RCL WORD PTRBX,1;移位指令可以对字节操作,也可以对字操作,操作数可以是寄存 器也可以是存储单元,如果只移动一位,则在指令中直接指出, 如果要移动若干位,则必须在CL中指定移动位数; 对存储单元进行操作时必须用前缀指定是字操作还是字节操作。移位指令的

8、特点: 指令码 目标,计数值 ; 目标只能是寄存器、存储器,计数值只能是1或CL中 的值; 影响标志位的情况: 移位指令:除AF=任意值外,其余的根据结果而定 循环移位指令:只影响OF和CF(与逻辑运算指令刚好 相反)P128 将AL中的值乘以10 的例子:SAL AL,1 ; AL=AL*2MOV BL,AL ;将2X存于BL中MOV CL,2 ;移位次数存入CLSAL AL,CL ;在乘以2的基础上再移两位相当于乘以8ADD AL,BL ;加上2X则=乘以10例如,原AL=00000011B (3) 移一位得 00000110B (6), 00000110B BL 再移两位得 000110

9、00B (24) 00011000B + 00000110B = 00011110B (30) 结果 3*10=30 5.4 串操作指令MOVS 串传送指令CMPS 串比较指令SCAS 串扫描指令LODS 取串指令STOS 存入串指令与上述指令配合使用的前缀: REP 重复 REPE/REPZ 相等/为零则重复 REPNE/REPNZ 不相等/不为零则重复5.4 串操作指令 1. 串传送: MOVSB/MOVSW从数据段内SI所指的源操作数中取一字节/字,传送到 附加段所指的目的操作数中,并根据方向标志(DF) 对SI/DI进行增量或是减量修改,以指向下一个字节/字 单元。执行指令前要先将源串

10、首地址 DS:SI目标串首地址 ES:DI串操作方向由CLD和STD指令设置CLD 地址递增方向(DF=0)STD 地址递减方向(DF=1)完成操作后自动修改SI、DI,指向串的下一个元素。不影响标志位置方向标志F串传送加重复前缀每传送完一个元素后: CX CX-1,直到CX=0为止。REP MOVSB / REP MOVSW执行指令前,应该做好的工作: 源串首地址 DS:SI 目标串首地址 ES:DI 串长度送到CX寄存器 建立方向标志REP具体执行过程: 如(CX)=0 则退出REP,否则往下执行。 CX CX-1 执行其后MOVS串指令 重复例:F串传送. MOV DS,AX MOV E

11、S,AX MOV SI, OFFSET S1 (LEA SI,S1) MOV DI, OFFSET S2 (LEA DI,S2) MOV CX, 18 CLD REP MOVSB (无条件反复执行,直到CX=0) .S1 DB “This is a string!$” S2 DB 18 DUP(0)源目源 源目目源目有重叠部分2. 串扫描(搜索)SCASB/SCASW指令前通常加重复前缀REPNZ/REPNE,从而当 发现待搜索的元素时结束搜索。字符串搜索指令,关键字放在AL/AX中,操作时 AX/AL中的关键字,减去DI所指向附加段的目的串中 的一个数据,不保留结果,只根据结果设置标志位,

12、并修改DI的内容,指向下一个字节、字单元。事先要将待搜索的元素存入AL/AX在首地址为ES:DI的串中搜索某个元素(字节/字)AX/AL中的关键字,减去DI所指向附加段的目的串中 的一个数据,不保留结果。影响标志位例:F串扫描(影响标志位)MOV DI, OFFSET String MOV CX, xx MOV AL, h REPNZ SCASB JNZ Not_FoundFound: Not_ Found:.执行的操作: 如(CX)=0或ZF=1(某次比较的结果两个操作数相等) 则退出REP,否则往下执行。 CX CX-1 执行其后SCAS串指令 重复CLD MOV CX,100 MOV D

13、I,0100H MOV AL,$ REPNE SCASB;直到ZF=1 或 CX=0 AND CX,0FFH JZ ZER DEC DI MOV BX,DIJMP ST0 ZER:MOV BX,0 ST0:HLTF串扫描(P130 例:在某字符串中查找是否存在 $字符,若存在则将$所在的地址送入BX 寄存器 中)CLD MOV CX,100 MOV DI,0100H MOV AL,$ REPNE SCASB; JZ GETMOV BX,0 GET: DEC DI MOV BX,DIHLT3.串比较(影响标志位)CMPSB CMPSW比较地址为DS:SI、ES:DI的两 个字节/字指令前通常加重

14、复前缀REPZ/REPE,相同则继续往 下比较,当发现两个串不同时结束比较。内存(DS:SI) 与 内存( ES:DI)比较例:F串比较(影响标志位)MOV SI, OFFSET S1 MOV DI, OFFSET S2 MOV CX, xx REPZ CMPSB;直到ZF=0或CX=0 JNZ Not_Equal;ZF=0时不相等Equal: Not_Equal: .注:SCAS指令是用来从目标串中查找某个关 键字(相同则退出指令),CMPS常用来比较 两个串是否相同,查到不同则退出指令。CLDMOV CX,100HMOV SI,2400HMOV DI,1200HREPE CMPSBAND CX,0FFFFH;判断CX是否为0JZ EQQDEC SIMOV BX,DIMOV AL,SIJMP STOP EQQ: MOV BX,0 STOP:HLTF串比较(P131 例:检验被传送过的数据是否与源串完全相同)初始化;直到ZF=0

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 资格认证/考试 > 其它考试类文档

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