selph
selph
发布于 2022-01-14 / 341 阅读
0
0

《xchg rax,rax》片段分析0x0d--两种等价异或2

前言

本次是该系列的的第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

评论