当前位置:  开发笔记 > 前端 > 正文

使用rx寄存器而不是exx来解码CPUID是否有优势?

如何解决《使用rx寄存器而不是exx来解码CPUID是否有优势?》经验,为你挑选了1个好方法。

我一直在使用eax等在我的64位操作系统上进行编程,但rax的工作方式完全相同.在exx vs rxx中编写内联汇编有什么好处吗?如果有任何exx跨平台兼容,并节省了使用预定义处理器宏在exx和rxx之间进行更改的边际时间.



1> Peter Cordes..:

在什么情况下?如果需要保存地址,显然需要64位寄存器(除非使用x32 ABI或其他方法确保地址适合32位).

否则,如果您不需要64位操作数大小,请使用32位,因为它是默认值.64需要REX前缀,16需要操作数大小前缀字节,而8只需要使用不同的操作码.

在许多情况下,即使您只想要较小的结果,也可以使用默认的32位操作数/ 64位地址大小.例如lea eax, [rdi + rsi*4 - 15]总是给出相同的结果lea eax, [edi + esi*4 - 15].这个Q&A涵盖了(并链接到)操作数大小的一些背景,如果你发现它不明显,可能会对事情有所了解.


另请注意,[gcc现在已经内置了测试CPUID,因为至少是gcc 4.8](https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html).使用例如`__builtin_cpu_supports("avx")`查看示例
@Revolt:正如您从insn参考手册(从x86标签wiki链接)中看到的那样,CPUID仅写入`eax/ebx/ecx/edx`,即使在64位模式下也是如此.`这条指令在非64位模式和64位模式下运行相同.显然,这使每个人都更容易:编写代码来解码结果的人,以及编写CPU微码内部实现的人.所以是的,你绝对应该使用32位寄存器/操作数大小来测试CPUID结果位.
推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有