AMD64(又名 x86-64 或 x64)寄存器可以一次访问 8、16、32 或 64 位。阅读反汇编列表时,哪些寄存器操作不简单?
例如,当一条指令访问寄存器的一部分时,它如何影响其他部分?
优化器使用的哪些典型指令或指令序列可能会编码一些不明显的东西(例如,将寄存器与自身异或以将其设置为零)?
AMD64(又名 x86-64 或 x64)寄存器可以一次访问 8、16、32 或 64 位。阅读反汇编列表时,哪些寄存器操作不简单?
例如,当一条指令访问寄存器的一部分时,它如何影响其他部分?
优化器使用的哪些典型指令或指令序列可能会编码一些不明显的东西(例如,将寄存器与自身异或以将其设置为零)?
并不是真正的优化,但是当来自 x86 时,您必须注意的一个问题是:
例如,以下内容:
mov eax, 3
实际上相当于:
mov rax, 3
这也适用于新寄存器r8
- r15
,例如:
inc r8d
也将 的上半部分归零r8
。
但是,寄存器的 8 位和 16 位部分不是这样工作的,即对它们的操作仅修改寄存器的那部分。