《《逻辑运算指令》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《逻辑运算指令》PPT课件.ppt(43页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、复习:复习:算术运算指令l比较指令比较指令 CMPl加加/减减1 1指令指令INC,DECl不带进位的加不带进位的加/减法指令减法指令 ADD,SUBl带进位的加带进位的加/减法指令减法指令 ADC,SBB13.4 逻辑运算指令 运算规则:按位操作,无进运算规则:按位操作,无进/借位,包括以借位,包括以下两类:下两类:逻辑位运算逻辑位运算 移位、循环移位移位、循环移位CF OF SF ZF PF AF 0 0 *无定义无定义 根据运算结果设置根据运算结果设置 对标志位的影响对标志位的影响(除除NOTNOT指令外指令外):21、逻辑运算指令有有5条指令。条指令。(1)“与与”运算指令运算指令AN
2、D(2)“或或”运算指令运算指令OR(3)“异或异或”运算指令运算指令XOR(4)“非非”运算指令运算指令NOT(5)测试指令)测试指令TEST3(1)逻辑”与”AND对两个操作数进行按位逻辑对两个操作数进行按位逻辑“与与”操作。操作。格式:格式:AND dst,src功能:功能:(dst)(src)(dst)用途:保留操作数的某几位,其他位清零。用途:保留操作数的某几位,其他位清零。4例1:AND AL,0FHAND AL,0FH 若执行前:(AL)=35H(即5:字符5的ASCII码值)执行:0011 0101 0000 1111 分离了AL后4位 0000 0101例:例:AND DX,
3、0FF00H AND DX,0FF00H ;分离;分离DXDX内容的高内容的高8 8位位 AND AL,0F0H AND AL,0F0H ;分离;分离ALAL内容的高内容的高4 4位位执行后:(AL)=05H(AL)=05H(保留保留AL中低中低4位,高位,高4位清位清0)即:AND AL,0FH SUB AL,30H5例例2:AL中有字符中有字符az,将其转换将其转换成大写。成大写。;az61H7AH;AZ41H5AH;a A20H z Z20HAND AL,1101 1111B6例例3:测试:测试AL的的bit7,bit5,bit2是否都是是否都是1。AND AL,1010 0100BCM
4、P AL,1010 0100B JZ YES YES:7对两个操作数进行按位逻辑对两个操作数进行按位逻辑”或或”操作。操作。格式:格式:OR dst,src功能:功能:(dst)(src)(dst)用途:对操作数的某几位置用途:对操作数的某几位置1;对两操作数进行组合。对两操作数进行组合。(2)逻辑“或”OR8例例1 1:把把AL的第的第5位置为位置为1。OR AL,00100000B例例2:把把ALAL中的非压缩中的非压缩BCDBCD码变成相应十进制数的码变成相应十进制数的ASCIIASCII码。(求数字码。(求数字0 09 9的的ASCIIASCII码)码)OR AL,30H;09 =30
5、H39H9对操作数进行按位逻辑对操作数进行按位逻辑”非非”操作。操作。格式格式:NOT mem/reg(3)逻辑“非”(取反)NOT 按按位位取取反反,原原来来是是“0”的的位位变变为为“1”;原原来来是是“1”的的位位变变为为“0”例:例:已知已知 CX0011 0101B 35HNOT CX;CX1100 1010B0CAH10对两个操作数按位进行对两个操作数按位进行”异或异或”操作。操作。格式:格式:XOR dst,src功能:功能:(dst)(src)(dst)用途:对用途:对regreg清零清零(自身异或自身异或)把把reg/memreg/mem的某几位变反的某几位变反(与与11异或
6、异或)(4)逻辑”异或”XOR 例例1 1:把:把AXAX寄存器清零。寄存器清零。例例2 2:把:把DHDH的高的高4 4位求反位求反,低低4 4位变不变位变不变 MOV AX,0 XOR AX,AX AND AX,0 SUB AX,AX XOR DH,0F0H 11三种运算指令的操作数通用寄存器通用寄存器通用寄存器通用寄存器立即数立即数存储器存储器 立即数立即数通用寄存器通用寄存器 存储器存储器目的操作数目的操作数源操作数源操作数12三种运算指令的主要作用三种运算指令的主要作用指指 令令作作 用用举举 例例AND使目的操作数某些位不变,使目的操作数某些位不变,某些位变成某些位变成0保留保留A
7、X的最后的最后4位不变,其余清位不变,其余清0ORXOR使目的操作数某些位使目的操作数某些位不变,不变,某些位变成某些位变成1想把想把BX的低的低8位位置置1,其余不变,其余不变可以将目的操作数中的可以将目的操作数中的某某些位取反些位取反;还可以将还可以将通用寄存器清通用寄存器清0想把想把CX的内容的内容清清013ANDAND指令可用于复位某些位(同指令可用于复位某些位(同0 0相与),不影响其相与),不影响其他位:将他位:将BLBL中中D D3 3和和D D0 0位清位清0 0,其他位不变,其他位不变and bl,1111 and bl,1111 0 011110 0B BOROR指令可用于
8、置位某些位(同指令可用于置位某些位(同1 1相或),不影响其相或),不影响其他位:将他位:将BLBL中中D D3 3和和D D0 0位置位置1 1,其他位不变,其他位不变or or blbl,0000,0000 1 100001 1B BXORXOR指令可用于求反某些位(同指令可用于求反某些位(同1 1相异或),不影响相异或),不影响其他位:将其他位:将BLBL中中D D3 3和和D D0 0位求反,其他不变位求反,其他不变xorxor blbl,0000,0000 1 100001 1B B总结:总结:14操作与操作与ANDAND指令类似指令类似,但不将但不将”与与”的结果送回的结果送回,只
9、影只影响标志位。响标志位。TESTTEST指令常用于位测试指令常用于位测试,与条件转移指令一起用。与条件转移指令一起用。(5)测试指令TEST类似类似CMP例:测试例:测试AL的内容是否为负数。的内容是否为负数。TEST AL,80H ;检查检查AL中中D7=1?JNZ MINUS ;是是1(负数负数),转,转MINUS ;否则为正数否则为正数MINUS:152、移位指令(1)逻辑移位指令)逻辑移位指令(2)算术移位指令)算术移位指令(3)循环循环移位指令移位指令(4)带进位位)带进位位循环循环移位指令移位指令目的操作数可以是字节或字;目的操作数可以是字节或字;以以CL为源操作数的移位指令执行
10、以后,为源操作数的移位指令执行以后,CL的的值不变值不变。有有8条指令,分为以下四类。条指令,分为以下四类。1CL,存储器存储器通用寄存器通用寄存器目的操作数目的操作数源操作数源操作数16 逻辑左移指令逻辑左移指令 SHL(Shift LeftShift Left)逻辑右移指令逻辑右移指令 SHR(Shift RightShift Right)算术左移指令算术左移指令 SAL(Shift Arithmetic LeftShift Arithmetic Left)算术右移指令算术右移指令 SAR(Shift Arithmetic RightShift Arithmetic Right)这这4 4
11、条指令的格式相同条指令的格式相同,以以SALSAL为例:为例:(1)非循环移位指令CL ;移位位数大于移位位数大于1时时1 ;移位位数等于移位位数等于1时时 SAL mem/reg,SAL mem/reg,17逻辑左移指令SHL(Shift logical Left)格式:格式:SHL dst,count功能功能:将:将dst中的中的8位或位或16位数向左移动位数向左移动count次,最次,最后移出的位进入后移出的位进入CF,右边的,右边的count位移入位移入0。移动次数移动次数count只能为只能为1或或CL。如:如:SHL AX,1 SHL AL,CLCF dstD2D4D6D0D1D3
12、D5D7“0”D7D1D3D5 0D0D2D4D618逻辑右移指令SHR(Shift logical Right)格式:格式:SHR dst,count功能:功能:特点是移出的位进入进位位特点是移出的位进入进位位CF,空出的,空出的位用位用“0”填入。填入。dst CFD7D6D5D4D3D2D1D0D0“0”D3D5D7D1D2D4D6 019算术左移指令SAL(Shift Arithmetic Left)dst CFD2D4D6D0D1D3D5D7格式:格式:SAR dst,count功能:功能:将将dst中的中的8位或位或16位数向右移动位数向右移动count次,次,最后移出的位进入最后
13、移出的位进入CF,最左边的位既向右移又保,最左边的位既向右移又保持不变。持不变。算术右移指令SAR(Shift Arithmetic Right)格式:格式:SAL dst,count功能:与逻辑左移指令功能完全相同。功能:与逻辑左移指令功能完全相同。D7D0D3D5D7D1D2D4D620非循环移位指令功能示意图最低位最高位CF0(a)算术/逻辑左移SAL/SHL最低位最高位CF(b)算术右移SAR最低位最高位CF(c)逻辑右移SHR021算术/逻辑左移 SHL/SAL指令指令22算术右移SARSAR指令指令23逻辑右移SHRSHR指令指令24mov CL,4mov CL,4mov AL,1
14、111 0000Bmov AL,1111 0000B;AL=F0HAL=F0HSHL AL,1SHL AL,1;AL=E0HAL=E0H ;CF=1CF=1,SF=1SF=1、ZF=0ZF=0、PF=0PF=0,OF=0OF=0SHR AL,1SHR AL,1;AL=70HAL=70H ;CF=0CF=0,SF=0SF=0、ZF=0ZF=0、PF=0PF=0、OF=1OF=1SAR AL,1SAR AL,1;AL=38HAL=38H ;CF=0CF=0,SF=0SF=0、ZF=0ZF=0、PF=0PF=0、OF=OF=0 0SAR AL,CLSAR AL,CL;AL=03hAL=03h ;CF
15、=1CF=1,SF=0SF=0、ZF=0ZF=0、PF=1PF=125算术移位算术移位把操作数看做把操作数看做有有符号数;符号数;逻辑移位逻辑移位把操作数看做把操作数看做无无符号数。符号数。移位位数放在移位位数放在CLCL寄存器中,如果只移寄存器中,如果只移1 1位位,也也 可以直接写在指令中。例如:可以直接写在指令中。例如:MOV CL,4MOV CL,4 SHR AL,CL SHR AL,CL ;ALAL中的内容右移中的内容右移4 4位位影响影响C,P,S,Z,OC,P,S,Z,O标志。标志。结果未溢出时:结果未溢出时:左移左移1 1位位操作数操作数*2 2 右移右移1 1位位操作数操作数
16、/2/226例:把例:把AL中的数中的数x乘乘10因为因为10=8+2=23+21,所以可用移位实现乘,所以可用移位实现乘10操作。操作。程序如下:程序如下:MOV CL,3SAL AL,1 ;2xMOV AH,AL SAL AL,1 ;4x SAL AL,1 ;8x ADD AL,AH ;8x+2x=10 x27l用移位操作代替乘除法可提高运算速度用移位操作代替乘除法可提高运算速度例:前例中计算例:前例中计算x*10*10。(1)(1)采用乘法指令采用乘法指令:MOV MOVBL,10BL,10 MUL MULBLBL 共需共需70707777个个T T周期。周期。(2)(2)采用移位和加法
17、指令采用移位和加法指令:SAL SALAL,1 AL,1 ;2T 2T MOV MOVAH,AL AH,AL ;2T 2T SAL SALAL,1 AL,1 ;2T 2T SAL SALAL,1 AL,1 ;2T 2T ADD ADDAL,AH AL,AH ;3T 3T 只需只需1111个个T T周期周期,仅相当于乘法的仅相当于乘法的1/71/7。28 不含进位位的循环左移指令不含进位位的循环左移指令 ROL 不含进位位的循环右移指令不含进位位的循环右移指令 ROR 含进位位的循环左移指令含进位位的循环左移指令 RCL 含进位位的循环右移指令含进位位的循环右移指令 RCR(2)循环移位指令格式
18、同非循环移位指令。格式同非循环移位指令。移位位数放在移位位数放在CLCL寄存器中,如果只移寄存器中,如果只移1 1位位,也可以直接写在指令中。也可以直接写在指令中。循环移位指令只影响标志位循环移位指令只影响标志位CFCF和和OFOF。29循环左移指令ROL(Rotate Left)格式:格式:ROL dst,count功能:功能:循环右移指令ROR(Rotate Right)格式:格式:ROR dst,count功能:功能:D0CFD0D3D5D7D1D2D4D6D7CFD7D1D3D5D0D2D4D630CF带进位位循环左移指令(Rotate Left through Carry)格式:格式
19、:RCL dst,count功能:功能:CFD7D1D3D5D0D2D4D6带进位位循环右移指令(Rotate Right through Carry)格式:格式:RCR dst,count功能:功能:CFCFD0D3D5D7D1D2D4D631(a)ROL最低位最高位CF(c)RCL最低位最高位CF (b)ROR最低位最高位CF(d)RCR最低位最高位CF循环移位指令功能示意图32ROL指令指令33ROR指令指令34RCL指令指令35RCR指令指令36循环移位举例:循环移位举例:例例1:将:将AL的高的高4位与低位与低4位互换。位互换。MOV CL,4 ROL AL,CL37DXAXCF0S
20、HL AX,1SHL AX,1例:将例:将DX.AXDX.AX中中3232位数值左移一位位数值左移一位RCL DX,1RCL DX,138移位指令小结指指 令令主要作用主要作用逻辑左移指令逻辑左移指令SHL逻辑右移指令逻辑右移指令SHR将操作数乘以将操作数乘以2的的CL次。次。将操作数除以将操作数除以2的的CL次。次。算术左移指令算术左移指令SAL算术右移指令算术右移指令SAR将操作数乘以将操作数乘以2的的CL次。次。将补码数除以将补码数除以2的的CL次。次。循环左移指令循环左移指令ROL循环右移指令循环右移指令ROR将操作数的高低将操作数的高低4位或位或8位位(字节)数据相交换。(字节)数据
21、相交换。带进位位循环左移指令带进位位循环左移指令RCL带进位位循环右移指令带进位位循环右移指令RCR保存其它指令移入保存其它指令移入CF的值的值41例题1、以下指令序列,请问实现了什么功能?、以下指令序列,请问实现了什么功能?MOV AL,08H SAL AL,1 MOV BL,AL MOV CL,2 SAL AL,CL ADD AL,BL ;08H AL;AL算术左移一位,算术左移一位,AL=10H,;相当于;相当于AL2;AL BL;2 CL;AL算术再左移两位,算术再左移两位,AL=40H,;相当于;相当于AL4;AL+BLAL整个过程相当于整个过程相当于AL10,AL=50H422、试
22、分析下面的程序段完成什么功能?、试分析下面的程序段完成什么功能?MOV CL,04HSHL DX,CL MOV BL,AHSHL AX,CL SHR BL,CLOR DL,BL;04H CL;DX逻辑左移逻辑左移4位,相当于位,相当于DX;低;低4位清零,位清零,DX=0H;AHBL;AX逻辑左移逻辑左移4位,相当于位,相当于AX低低4位位;清零,;清零,AX=0H;BL逻辑右移逻辑右移4位,相当于位,相当于AH=0H;现;现DL的高的高4位是原来位是原来DL的低的低4位,位,;现;现DL的低的低4位是原位是原AH的高的高4位位所以,完成将所以,完成将DX,AX组成的双字逻辑左移组成的双字逻辑左移4位。位。43