2014-05-06 179 views

回答

4

xor ebx,ebx mov bh,0x04;如何将“bh”更改为“ebx”,并保持代码的意义相同?

假设我理解正确的话,你要的是这样的:

mov ebx, 0x0400 

bhbx的高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?

3

由于bhebx的第二低字节,所以您可以只做mov ebx, 0x0400

xor被使用,因为它是较短的操作码,并且处理器有特殊的支持来将其识别为清零寄存器。请参阅优化手册,部分3.5.1.8清除寄存器和依赖打破习语