xor ebx,ebx
mov bh ,0x04 ;how to change that "bh" to "ebx" ,and keep codes same meaning?
为什么人们总是使用xor
代替mov XXX,0
?
答案 0 :(得分:4)
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?
答案 1 :(得分:3)
由于bh
是ebx
的第二低字节,您只需执行mov ebx, 0x0400
。
xor
是因为它的操作码更短,处理器特别支持将其识别为归零寄存器。请参阅优化手册, 3.5.1.8清除寄存器和依赖性破坏惯用语部分。