我对 64 位模式下的 AND 指令有疑问。我有本手册告诉我 AND 32 位立即数要符号扩展为 64 位。但我做不到
and rax,0x80000000
我认为这很荒谬,因为 0x800000 是一个完美的 DWORD 操作数。我能承受的最高是
and rax,0x7fffffff
那么这里发生了什么?我无法使用 MSb=1 对操作数进行符号扩展?如果是这样,那么符号扩展应该如何针对操作数起作用而不能够像 0x80000000 中那样使用它?
谢谢您的回复。
“通过阻止人们做愚蠢的事情,你可能会阻止他们做聪明的事情”:一种源于尊重和谦逊的态度;你不知道所有的答案,所以不要像杰斯特在评论中指出的那样强加随机的愚蠢。
fwiw,gcc / gnu 的理解:
and $0x80000000, %rax
clang,充满宗教色彩,坚持:
and $0xffffffff80000000, %rax
现在,快点,那里有足够的 f 吗?这对可读性有帮助吗?如果你不理解符号扩展,你到底能理解多少汇编?