我对64位模式下的AND指令有疑问。我有本手册告诉我,AND 32位立即数将被符号扩展为64位。但是我做不到
和rax,0x80000000
我认为这很荒谬,因为0x800000是完美的DWORD操作数。我可以接受的最高水平是
和rax,0x7fffffff
那么这是怎么回事?我不能使用MSb = 1对操作数进行符号扩展吗?如果是这样,那么符号扩展应该如何针对操作数工作而又不能像在0x80000000中那样使用它呢?
感谢您的答复。
答案 0 :(得分:-1)
“通过阻止人们做一些愚蠢的事情,您可以阻止他们做一些聪明的事情”:一种由尊重和谦卑产生的态度;您不知道所有的答案,所以不要像杰斯特在评论中指出的那样强加随意性。
首先,gcc / gnu可以理解:
and $0x80000000, %rax
宗教灌输的c语坚持:
and $0xffffffff80000000, %rax
现在,很快,那里有足够的f吗?这有助于提高可读性吗?如果您不理解符号扩展名,您到底要了解多少组装?