在 64 位中使用 AND 指令与 32 位操作数[重复]

问题描述 投票:0回答:1

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

and rax,0x80000000

我认为这很荒谬,因为 0x800000 是一个完美的 DWORD 操作数。我能承受的最高是

and rax,0x7fffffff

那么这里发生了什么?我无法使用 MSb=1 对操作数进行符号扩展?如果是这样,那么符号扩展应该如何针对操作数起作用而不能够像 0x80000000 中那样使用它?

谢谢您的回复。

assembly x86 size x86-64 operands
1个回答
0
投票

“通过阻止人们做愚蠢的事情,你可能会阻止他们做聪明的事情”:一种源于尊重和谦逊的态度;你不知道所有的答案,所以不要像杰斯特在评论中指出的那样强加随机的愚蠢。

fwiw,gcc / gnu 的理解:

and $0x80000000, %rax

clang,充满宗教色彩,坚持:

and $0xffffffff80000000, %rax

现在,快点,那里有足够的 f 吗?这对可读性有帮助吗?如果你不理解符号扩展,你到底能理解多少汇编?

© www.soinside.com 2019 - 2024. All rights reserved.