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

14ifxucb  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(123)

此问题已在此处有答案

NASM Intel 64-bit mode: why does 32-bit constant 0xffffffff cause "warning: signed dword value exceeds bounds"(1个答案)
4天前关闭。
我对64位模式下的AND指令有疑问。我有这本手册告诉我,与32位立即数是要签署扩展到64位。但我不能这么做

and rax,0x80000000

字符串
我认为这是荒谬的,因为0x800000是一个完美的DWORD操作数。我最高能做到的就是

and rax,0x7fffffff


这是怎么回事我不能使用MSB=1对操作数进行符号扩展?如果是这样的话,那么在不能像在0x80000000中那样使用操作数的情况下,如何对操作数进行符号扩展呢?
谢谢你的回复。

wnrlj8wa

wnrlj8wa1#

“通过阻止人们做蠢事,你可能会阻止他们做聪明的事”:出于尊重和谦卑的态度;你不知道所有的答案,所以不要像Jester在评论中指出的那样强加随机的愚蠢。
fwiw、gcc / gnu的理解是:

and $0x80000000, %rax

字符串
clang,虔诚地灌输,坚持:

and $0xffffffff80000000, %rax


现在,快点,F够了吗?这是否有助于可读性?如果你不理解符号扩展,你又能理解多少汇编呢?

相关问题