在64位中将AND指令与32位操作数一起使用

时间:2018-11-19 21:34:28

标签: assembly x86 size x86-64 operands

我对64位模式下的AND指令有疑问。我有本手册告诉我,AND 32位立即数将被符号扩展为64位。但是我做不到

和rax,0x80000000

我认为这很荒谬,因为0x800000是完美的DWORD操作数。我可以接受的最高水平是

和rax,0x7fffffff

那么这是怎么回事?我不能使用MSb = 1对操作数进行符号扩展吗?如果是这样,那么符号扩展应该如何针对操作数工作而又不能像在0x80000000中那样使用它呢?

感谢您的答复。

1 个答案:

答案 0 :(得分:-1)

“通过阻止人们做一些愚蠢的事情,您可以阻止他们做一些聪明的事情”:一种由尊重和谦卑产生的态度;您不知道所有的答案,所以不要像杰斯特在评论中指出的那样强加随意性。

首先,gcc / gnu可以理解:

and $0x80000000, %rax
宗教灌输的

c语坚持:

and $0xffffffff80000000, %rax

现在,很快,那里有足够的f吗?这有助于提高可读性吗?如果您不理解符号扩展名,您到底要了解多少组装?