【发布时间】:2014-06-23 08:18:16
【问题描述】:
xor ebx,ebx
mov bh ,0x04 ;how to change that "bh" to "ebx" ,and keep codes same meaning?
为什么人们总是使用xor 而不是mov XXX,0?
【问题讨论】:
标签: assembly x86 cpu-registers
xor ebx,ebx
mov bh ,0x04 ;how to change that "bh" to "ebx" ,and keep codes same meaning?
为什么人们总是使用xor 而不是mov XXX,0?
【问题讨论】:
标签: assembly x86 cpu-registers
xor ebx,ebx mov bh ,0x04;如何将“bh”改为“ebx”,并保持代码相同的含义?
假设我理解正确,你想要的是这样的:
mov ebx, 0x0400
(bh是bx的高8位,它本身就是ebx的低16位。所以你需要的值是原始值左移8位,我们通过添加两个十六进制得到0 位数)。
为什么人们总是使用 xor 而不是 mov XXX,0 ?
简单地说:因为它更短、更快。见What is the purpose of XORing a register with itself?和Does using xor reg, reg give advantage over mov reg, 0?
【讨论】:
由于bh 是ebx 的倒数第二个字节,你可以直接使用mov ebx, 0x0400。
xor 被使用是因为它的操作码更短,并且处理器有特殊的支持将其识别为将寄存器归零。请参阅优化手册,3.5.1.8 Clearing Registers and Dependency Breaking Idioms 部分。
【讨论】: