一、逻辑运算指令AND/OR/NOT/XOR/TEST(与,或,非,异或,测试)
①与,或,非,异或
这边大家都知道,这里不在重复,举几个例子:
AND AX,1000H ;AX中的16位数和1000H相与,结果送到AX中。
OR AX,00F0H ;AX中的值与00f0相或,结果在AX中
NOT AL ;AL中的内容求反码,结果在AL中
XOR AL,0FH ;AL和0fh相异或,结果在AL中
②测试TEST
测试指令执行AND指令操作,把OF,和CF标志清0,修改SF,ZF和PF标志,TEST指令不会送操作结果,而仅仅影响标志
TEST AL,01 ;如AL的最低位为1,则ZF=0,否则ZF=1
注意:
①在程序设计中,用AND指令对指定位清0
②OR指令对指定位置置1
③NOT指令常用来将某个数据取反码,再加上1便得到补码
④XOR常用来取反某位,0变为1,1变为0
⑤TEST指令用来检测指定位是1还是0
二、移位指令SAL/SAR/SHL/SHR/ROL/ROR/RCL/RCR
1)非循环移位指令SAL/SAR/SHL/SHR
算术移位指令SAL,SAR (A:算术)
逻辑移位指令SHL,SHR (H:逻辑)
注意:逻辑移位指令执行时,实际上是把操作数看成无符号数进行移位,所以,右移时最高位添0,;算术移位指令执行时,则将操作数看成有符号数进行移位,所以,右移时保持最高位的值不变,这里的最高位就是符号位。
所有移位指令执行时,都会影响标志位CF,OF,PF,SF,ZF.
所有移出的位都会在符号位里面。
2)循环移位指令ROL/ROR/RCL/RCR
循环分小循环和大循环,
小循环就是不带进位的循环:ROL/ROR
大循环就是带进位的循环:RCL/RCR
循环移位指令影响CF和OF标志。
按照移入的位设置进位标志CF
进行1次移位后,如果移位前的操作数最高位与移位后操作数的最高位不同(有变化),则OF=1;否则OF=0。