前言
本次是该系列的的第0x0d篇,和上一篇内容是几乎一样的。。。。
实验环境:
- Windows10 + VS2022 + masm
0x0d
代码片段链接:xorpd | xchg rax,rax 0x0d
mov rdx,rbx
xor rbx,rcx
and rbx,rax
and rdx,rax
and rax,rcx
xor rax,rdx
cmp rax,rbx
代码分析
本文和上次的内容是一类的,两种等价的异或操作,两个数进行异或操作之前先各自进行相同的and操作,和异或操作之后再进行and操作,最终结果是一样的,也就是说,存在这样一个等价关系:(rbx ^ rcx) & rax == (rbx & rax) ^ (rcx & rax)
,因为比较简单,就不再做介绍了
测试代码:
.code
main proc
lea rbx, [099h]
lea rax, [0123h]
mov rdx,rbx ;rdx = rbx
xor rbx,rcx ;rbx = rbx ^ rcx
and rbx,rax ;rbx = (rbx ^ rcx) & rax
and rdx,rax ;rdx = (rdx & rax)
and rax,rcx ;rax = (rax & rcx)
xor rax,rdx ;rax = (rax & rcx) ^ (rax & rdx)
cmp rax,rbx ;(rbx ^ rcx) & rax == (rbx & rax) ^ (rcx & rax)
ret
main ENDP
END