资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,单击此处编辑母版标题样式,1,3.4,逻辑运算指令,运算规则:按位操作,无进,/,借位,包括以下两类:,逻辑位运算,移位、循环移位,CF OF,SF ZF PF,AF,0 0,*,无定义,根据运算结果设置,对标志位的影响,(,除,NOT,指令外,),:,2,1,、逻辑运算指令,有,5,条指令。,(,1,)“与”运算指令,AND,(,2,)“或”运算指令,OR,(,3,)“异或”运算指令,XOR,(,4,)“非”运算指令,NOT,(,5,)测试指令,TEST,3,(1),逻辑”与”,AND,对两个操作数进行按位逻辑“与”操作。,格式:,AND dst,src,功能:(,dst,)(,src,)(,dst,),用途:保留操作数的某几位,其他位清零。,例,1,:,AND AL,0FH,若执行前:,(AL)=35H,(即,5,:字符,5,的,ASCII,码值),执行:,0011 0101,0000 1111,分离了,AL,后,4,位,0000 0101,例:,AND DX,0FF00H,;分离,DX,内容的高,8,位,AND AL,0F0H,;分离,AL,内容的高,4,位,执行后,:,(AL)=05H,(,保留,AL,中低,4,位,高,4,位清,0,),即:,AND AL,0FH SUB AL,30H,5,例,2,:,AL,中有字符,a,z,将其转换成大写。,;,a,z,61H,7AH,;,A,Z,41H,5AH,;,a,A,20H z,Z,20H,AND AL,,,11,0,1 1111B,6,例,3,:测试,AL,的,bit7,bit5,bit2,是否都是,1,。,AND AL,1010 0100B,CMP AL,1010 0100B,JZ YES,YES:,7,对两个操作数进行按位逻辑,”,或,”,操作。,格式:,OR dst,src,功能:(,dst,)(,src,)(,dst,),用途:对操作数的某几位置,1,;,对两操作数进行组合。,(2),逻辑“或”,OR,8,例,1,:,把,AL,的第,5,位置为,1,。,OR AL,00100000B,例,2,:,把,AL,中的非压缩,BCD,码变成相应十进制数的,ASCII,码。(求数字,0,9,的,ASCII,码),OR AL,30H,;,09 =30H39H,9,对操作数进行按位逻辑,”,非,”,操作。,格式,:,NOT mem/reg,(3),逻辑“非”,(,取反,)NOT,按位取反,原来是“,0”,的位变为“,1”,;原来是“,1”,的位变为“,0”,例:,已知,CX,0011 0101B,35H,NOT CX,;,CX,1100 1010B,0CAH,10,对两个操作数按位进行,”,异或,”,操作。,格式:,XOR dst,src,功能:(,dst,)(,src,)(,dst,),用途:对,reg,清零,(,自身异或,),把,reg/mem,的某几位变反,(,与,1,异或,),(4),逻辑”异或”,XOR,例,1,:把,AX,寄存器清零。,例,2,:把,DH,的高,4,位求反,低,4,位变不变,MOV AX,0,XOR AX,AX,AND AX,0,SUB AX,AX,XOR DH,0F0H,11,三种运算指令的操作数,通用寄存器,通用寄存器,立即数,存储器,立即数,通用寄存器,存储器,目的操作数,源操作数,12,三种运算指令的主要作用,指 令,作 用,举 例,AND,使目的操作数某些位不变,,某些位变成,0,保留,AX,的最后,4,位不变,其余清,0,OR,XOR,使目的操作数某些位不变,,某些位变成,1,想把,BX,的低,8,位置,1,,其余不变,可以将目的操作数中的,某些位取反,;,还可以将,通用寄存器清,0,想把,CX,的内容清,0,13,AND,指令可用于复位某些位(同,0,相与),不影响其他位:将,BL,中,D,3,和,D,0,位清,0,,其他位不变,and bl,1111,0,11,0,B,OR,指令可用于置位某些位(同,1,相或),不影响其他位:将,BL,中,D,3,和,D,0,位置,1,,其他位不变,or bl,0000,1,00,1,B,XOR,指令可用于求反某些位(同,1,相异或),不影响其他位:将,BL,中,D,3,和,D,0,位求反,其他不变,xor bl,0000,1,00,1,B,总结:,14,操作与,AND,指令类似,但不将,”,与,”,的结果送回,只影响标志位。,TEST,指令常用于位测试,与条件转移指令一起用。,(5),测试指令,TEST,类似,CMP,例:测试,AL,的内容是否为负数。,TEST AL,80H,;,检查,AL,中,D,7,=1,?,JNZ MINUS,;,是,1(,负数,),,转,MINUS,;,否则为正数,MINUS:,15,2,、移位指令,(,1,)逻辑移位指令,(,2,)算术移位指令,(,3,),循环,移位指令,(,4,)带进位位,循环,移位指令,目的操作数可以是字节或字;,以,CL,为源操作数的移位指令执行以后,,CL,的值不变,。,有,8,条指令,分为以下四类。,1,CL,,,存储器,通用寄存器,目的操作数,源操作数,16,逻辑左移指令,SHL(,Shift Left,),逻辑右移指令,SHR(,Shift Right,),算术左移指令,SAL(,Shift Arithmetic Left,),算术右移指令,SAR(,Shift Arithmetic Right,),这,4,条指令的格式相同,以,SAL,为例:,(1),非循环移位指令,CL ;,移位位数大于,1,时,1 ;,移位位数等于,1,时,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,,,CL,CF dst,D,2,D,4,D,6,D,0,D,1,D,3,D,5,D,7,“0”,D,7,D,1,D,3,D,5,0,D,0,D,2,D,4,D,6,18,逻辑右移指令,SHR,(,Shift logical Right,),格式:,SHR dst,,,count,功能:,特点是移出的位进入进位位,CF,,空出的位用“,0”,填入。,dst CF,D,7,D,6,D,5,D,4,D,3,D,2,D,1,D,0,D,0,“0”,D,3,D,5,D,7,D,1,D,2,D,4,D,6,0,算术左移指令,SAL,(,Shift Arithmetic Left,),dst CF,D,2,D,4,D,6,D,0,D,1,D,3,D,5,D,7,格式:,SAR dst,,,count,功能:,将,dst,中的,8,位或,16,位数向右移动,count,次,最后移出的位进入,CF,,最左边的位既向右移又保持不变。,算术右移指令,SAR,(,Shift Arithmetic Right,),格式:,SAL dst,,,count,功能:与逻辑左移指令功能完全相同。,D,7,D,0,D,3,D,5,D,7,D,1,D,2,D,4,D,6,20,非循环移位指令功能示意图,最低位,最高位,CF,0,(,a),算术,/,逻辑左移,SAL/SHL,最低位,最高位,CF,(,b),算术右移,SAR,最低位,最高位,CF,(,c),逻辑右移,SHR,0,算术,/,逻辑左移,SHL/SAL,指令,算术右移,SAR,指令,逻辑右移,SHR,指令,24,mov CL,4,mov AL,1111 0000B,;,AL=F0H,SHL AL,1,;,AL=E0H,;,CF=1,,,SF=1,、,ZF=0,、,PF=0,,,OF=0,SHR AL,1,;,AL=70H,;,CF=0,,,SF=0,、,ZF=0,、,PF=0,、,OF=1,SAR AL,1,;,AL=38H,;,CF=0,,,SF=0,、,ZF=0,、,PF=0,、,OF=,0,SAR AL,CL,;,AL=03h,;,CF=1,,,SF=0,、,ZF=0,、,PF=1,25,算术移位,把操作数看做,有,符号数;,逻辑移位,把操作数看做,无,符号数。,移位位数放在,CL,寄存器中,如果只移,1,位,也,可以直接写在指令中。例如:,MOV CL,4,SHR AL,CL,;,AL,中的内容右移,4,位,影响,C,P,S,Z,O,标志。,结果未溢出时:,左移,1,位操作数*,2,右移,1,位操作数,/2,26,例:把,AL,中的数,x,乘,10,因为,10=8+2=2,3,+2,1,,所以可用移位实现乘,10,操作。,程序如下:,MOV CL,3,SAL AL,1 ;,2,x,MOV AH,AL,SAL AL,1 ;,4,x,SAL AL,1 ;,8,x,ADD AL,AH ;,8,x,+,2,x,=,10,x,27,用移位操作代替乘除法可提高运算速度,例:前例中计算,x,*10,。,(1),采用乘法指令,:,MOVBL,10,MULBL,共需,70,77,个,T,周期。,(2),采用移位和加法指令,:,SALAL,1,;,2T,MOVAH,AL,;,2T,SALAL,1,;,2T,SALAL,1,;,2T,ADDAL,AH,;,3T,只需,11,个,T,周期,仅相当于乘法的,1/7,。,28,不含进位位的循环左移指令,ROL,不含进位位的循环右移指令,ROR,含进位位的循环左移指令,RCL,含进位位的循环右移指令,RCR,(2),循环移位指令,格式同非循环移位指令。,移位位数放在,CL,寄存器中,如果只移,1,位,也可以直接写在指令中。,循环移位指令只影响标志位,CF,和,OF,。,29,循环左移指令,ROL,(,Rotate Left,),格式:,ROL dst,,,count,功能:,循环右移指令,ROR,(,Rotate Right,),格式:,ROR dst,,,count,功能:,D,0,CF,D,0,D,3,D,5,D,7,D,1,D,2,D,4,D,6,D,7,CF,D,7,D,1,D,3,D,5,D,0,D,2,D,4,D,6,CF,带进位位循环左移指令(,Rotate Left through,Carry,),格式:,RCL dst,,,count,功能:,CF,D,7,D,1,D,3,D,5,D,0,D,2,D,4,D,6,带进位位循环右移指令(,Rotate Right through Carry,),格式:,RCR dst,,,count,功能:,CF,CF,D,0,D,3,D,5,D,7,D,1,D,2,D,4,D,6,31,(,a)ROL,最低位,最高位,CF,(,c)RCL,最低位,最高位,CF,(,b)ROR,最低位,最高位,CF,(,d)RCR,最低位,最高位,CF,循环移位指令功能示意图,ROL,指令,ROR,指令,RCL,指令,RCR,指令,36,循环移位举例:,例,1,:将,AL,的高,4,位与低,4,位互换。,MOV CL,4,ROL AL,CL,37,DX,AX,CF,0,SHL AX,1,例:将,DX.AX,中,32,位数值左移一位,RCL DX,1,38,1A02H,1A00H,CF,CMP 1A00H,8000H,;,CF,1A00H,的,D,7,CMC,;进位标志求反命令,RCL WORD PTR1A02H,1,RCL WORD PTR1A00H,1,例,2,:将,1A00H,内存单元中的双字循环左移,1,位。,39,例,3,:把,AL,最低位送,BL,最低位,保持,AL,不变,ROR BL,1,ROR AL,1,RCL BL,1,ROL AL,1,AL,、,BL,CF,BL,CF,AL,CF,AL
展开阅读全文