汇编语言的逻辑运算也是我们通常所说的:非、与、或、异或等
(1)否操作指令
指令格式如下:
NOT OPRD
操作后的结果:OPRD各位取反,操作数可以是通用寄存器,可以是存储单元,但是不能是立即数对标志位没有影响。
(2)逻辑与操作(and)
指令格式如下:
AND OPRD1,OPRD2
操作的结果如下:
按位进行“与”操作,执行指令后,CF = 0,OF = 0,标志位PF,ZF,SF反映运算结果,标志位AF未定义。某个操作数自己与自己相“与”,则值不变,但是可以是进位标志CF清0
该指令的主要作用是使操作数中的某些为保持不变,其它为清零
保持不变的位和"1"与,清零的位和“0”与
(3)逻辑或操作(or)
指令格式如下:
OR OPRD1,OPRD2
操作的结果如下:
操作数按位进行“或”操作,指令执行后:CF=0,OF=0,标志PF/ZF/SF反映运算结果,标志位AF未定义
该指令的作用主要是:保证某些位不变,某些为设置位1,保持不变的为和“0”做或运算,设置为1的位和“1”做或运算。
(4)异或运算指令
指令格式如下:
XOR OPRD1,OPRD2,
异或执行的规则如下:
XOR 0,0 = 0
XOR 0,1 = 1
XOR 1,0 = 1
XOR 1,1 = 0
通过上面的分析可以看到,如果某一位与“0”进行异或操作则会保持不变,如果与“1”进行异或操作则刚好取反,所以进行XOR操作的作用搞好是这样的,保持某些位不变,某些为取反。
对标志寄存器的影响:CF=0,OF=0标志位PF,ZF,SF反映运算结果,标志为AF未定义。
如果一个操作数XOR A,A,则A会被置0,CF=OF=0,ZF=1,PF=1,SF=0
这个操作也是经常被使用的。
(5)测试指令
TEST OPRD1,OPRD2
这条指令和AND操作的指令执行相同,但是不会把执行的结果放在OPRD1中,该条指令的作用是判断操作数OPRD1中是否由某些位为1,然后根据ZF的结果进行相关的操作,主要是可以和跳转指令一起执行进行条件的跳转。
对于一些操作可能需要取反后才可以进行正确的判断,根据上下文来进行分析。
根据移位运算和逻辑运算我们实现如下的一个功能
怎么样把双字同时进行右移四位
AX = 9876H,BX=5432H,则AXBX为双字98765432H,则移位后的结果是87654320H
MOV CL,4
MOV DL,BH (DL=54H)
SHL BX,CL (BX=4320H)
SHL AX,CL (AX=8760H)
SHR DL,CL (DL=05H)
OR AL,DL (AL = 65)
最后操作的结果87654320H,完成了相关的移位和合并等操作