【问题标题】:Assembly to C conversion汇编到 C 的转换
【发布时间】:2014-08-20 13:31:38
【问题描述】:

我正在编写以下代码...

CPUToBE16(uint16 x)
{
    #if  defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
        if (!__builtin_constant_p(x)) {
            int bits = 8;
            __asm__ ("rolw %%cl, %0"
                         : "=r" (x)
                         : "0" (x), "c" (bits));
            return x;
        }
    #endif
   return ((x >> 8) & 0x00ff) | ((x << 8) & 0xff00);
}

如果 x 的值为 0x0800,谁能解释一下代码的作用

【问题讨论】:

    标签: linux linux-kernel linux-device-driver


    【解决方案1】:

    C 行就是你需要破译的所有内容,这些内容是标准的 C 运算符,你应该能够自己弄清楚。

    它的汇编部分在预处理器条件中,当满足某些条件时,它提供函数的优化版本。此版本会产生与 C 版本相同的结果,所以不用担心。

    此外,函数名称可能会有所帮助:“BE”指的是大端,16 指的是 16 位数据类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-05
      • 1970-01-01
      • 2014-06-13
      • 2021-04-23
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多