当前位置:  开发笔记 > 编程语言 > 正文

如何BSWAP低32位的64位寄存器?

如何解决《如何BSWAP低32位的64位寄存器?》经验,为你挑选了1个好方法。

我一直在寻找如何将BSWAP用于64位寄存器的低32位子寄存器的答案.例如,0x0123456789abcdef在RAX寄存器中,我想0x01234567efcdab89用一条指令将其更改为(由于性能).

所以我尝试了以下内联函数:

#define BSWAP(T) {  \
    __asm__ __volatile__ (  \
            "bswap %k0" \
            : "=q" (T)  \
            : "q" (T)); \
}

结果是0x00000000efcdab89.我不明白为什么编译器就像这样.有人知道有效的解决方案吗?



1> Dan Lenski..:

啊,是的,我现在明白了这个问题:

执行32位操作时,x86-64处理器 32位寄存器隐式零扩展为64位(在%eax,%ebx等上).这是为了保持与遗留代码的兼容性,遗留代码需要这些寄存器的32位语义,据我所知.

所以我担心没有办法ror只对64位寄存器的低32位做.你必须使用一系列的几个指令......


[为什么大多数x64指令将32位寄存器的上半部分归零](http://stackoverflow.com/q/11177137/995714)
推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有