资源描述:
《逻辑运算和移位指令.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、3.3.3逻辑运算和移位指令逻辑运算指令●运算规则:按位操作,无进/借位●对标志位的影响(除NOT指令外):CFOFSFZFPFAF00***无定义根据运算结果设置1(1)逻辑”与”AND对两个操作数进行按位逻辑“与”操作。格式:ANDdest,src用途:保留操作数的某几位,清零其他位。例1:保留AL中低4位,高4位清0。ANDAL,0FH例2:AL中有字符’a’~’z’,将其转换成大写。ANDAL,01011111B2例3:测试AL的bit7,bit5,bit2是否都是1。ANDAL,10100100BCMPAL,10100100BJZYES;ifmatch,gotoYES
2、……;ifnotmatch……YES:……;goeshereifall‘1’3对两个操作数进行按位逻辑”或”操作。格式:ORdest,src用途:对操作数的某几位置1;对两操作数进行组合。例1:把AL中的非压缩BCD码变成相应十进制数的ASCII码。ORAL,30H(2)逻辑”或”OR4例2:把AH和AL中的非压缩BCD码组合成压缩的BCD码,放到AL中。MOVCL,4SHLAH,CLORAL,AH例3:把AL的第5位置为1ORAL,00100000B5对操作数进行按位逻辑”非”操作。格式:NOTmem/reg例:NOTCXNOTBYTEPTR[DI](3)逻辑“非”(取反)N
3、OT6对两个操作数按位进行”异或”操作。格式:XORdest,src用途:对reg清零(自身异或)把reg/mem的某几位变反(与’1’异或)例1:把AX寄存器清零。例2:把DH的bit4,3变反①MOVAX,0XORDH,18H②XORAX,AX③ANDAX,0④SUBAX,AX(4)逻辑”异或”XOR7操作与AND指令类似,但不将”与”的结果送回,只影响标志位。TEST指令常用于位测试,与条件转移指令一起用。例:测试AL的内容是否为负数。TESTAL,80H;检查AL中D7=1?JNZMINUS;是1(负数),转MINUS……;否则(正数)不转移MINUS:…………(5)测
4、试指令TEST82.移位指令(1)非循环移位指令算术左移指令SAL(ShiftArithmeticLeft)算术右移指令SAR(ShiftArithmeticRight)逻辑左移指令SHL(ShiftLeft)逻辑右移指令SHR(ShiftRight)这4条指令的格式相同,以SAL为例:SALmem/reg,CL;移位位数大于1时1;移位位数等于1时9移位指令执行的操作如下图所示:最低位最高位CF0(a)算术/逻辑左移SAL/SHL最低位最高位CF(b)算术右移SAR最低位最高位CF(c)逻辑右移SHR0非循环移位指令功能示意图10算术移位——把操作数看做有符号数;逻辑移位——
5、把操作数看做无符号数。移位位数放在CL寄存器中,如果只移1位,也可以直接写在指令中。例如:MOVCL,4SHRAL,CL;AL中的内容右移4位影响C,P,S,Z,O标志。结果未溢出时:左移1位≡操作数*2右移1位≡操作数/211例:把AL中的数x乘10因为10=8+2=23+21,所以可用移位实现乘10操作。程序如下:SALAL,1;2xMOVAH,ALSALAL,1;4xSALAL,1;8xADDAL,AH;8x+2x=10x12不含进位位的循环左移指令ROL不含进位位的循环右移指令ROR含进位位的循环左移指令RCL含进位位的循环右移指令RCR格式同非循环移位指令。移位位数放
6、在CL寄存器中,如果只移1位,也可以直接写在指令中。循环移位指令只影响标志位CF和OF。(2)循环移位指令13这4条指令的功能如下图示:最低位最高位CF(a)ROL最低位最高位CF(c)RCL最低位最高位CF(b)ROR最低位最高位CF(d)RCR循环移位指令功能示意图14用移位操作代替乘除法可提高运算速度例:前例中计算x×10。(1)采用乘法指令:MOVBL,10MULBL共需70~77个T周期。(2)采用移位和加法指令:SALAL,1;2TMOVAH,AL;2TSALAL,1;2TSALAL,1;2TADDAL,AH;3T只需11个T周期,仅相当于乘法的1/7。15循环移位
7、举例:例1:将AL的高4位与低4位互换。MOVCL,4ROLAL,CL例2:将1A00H内存单元中的双字循环左移1位。CMP[1A00H],8000HCMCRCLWORDPTR[1A02H],1RCLWORDPTR[1A00H],116例:设在1000H开始存有四个压缩的BCD码12、34、56、78。要求把它们转换为ASCII码存放在3000H开始的单元中。假定DS、ES都已设置为数据段的段基址。程序见下页。1000H3000H1234567832H31H34H33H36H35H38H37