如何解决为什么在 64 位上使用 eax?
我查看了命名约定 here,发现在 64 位系统上,AX 寄存器称为 RAX。但是,在查看我的反汇编 C 代码时,我发现经常使用 EAX 而不是 RAX。这不仅适用于 EAX,也适用于 EDI 和其他一些寄存器。
我还可以在我的反汇编代码中找到 RAX 的示例,因此在我看来,这不仅仅是一个坚持 32 位名称的命名约定。 64 位 x86 是否会并排使用寄存器,仅在需要时使用 64 位,如果是这样,它是如何工作的?如果不是这种情况并且 EAX 和 RAX 都指向同一个寄存器,那为什么名称不同?
解决方法
%eax
指的是 64 位 %rax
寄存器的低 32 位。因此,如果 %rax
初始为 0,并且您执行指令 movl $5,%eax
,那么 %rax
也会取值为 5。但是,它们不是完全独立的,因此应该小心.比如在我的机器上,如果你把%rax
的所有位都设置为1,然后执行xor %eax,%eax
,你会发现%rax
的ALL被设置为0,而不仅仅是较低的32 位。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。