相关疑难解决方法(0)

GCC内联汇编程序,混合寄存器大小(x86)

有谁知道如何摆脱以下汇编警告?

代码是x86,32位:

int test (int x)
{
  int y;
  // do a bit-rotate by 8 on the lower word. leave upper word intact.
  asm ("rorw $8, %0\n\t": "=q"(y) :"0"(x));
  return y;
}
Run Code Online (Sandbox Code Playgroud)

如果我编译它,我得到以下(非常有效)警告:

Warning: using `%ax' instead of `%eax' due to `w' suffix
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是告诉编译器/汇编器我想要访问%0的低16位子寄存器的方法.访问字节子寄存器(在本例中为AL和AH)也很好.

我已经选择了"q"修饰符,因此编译器被迫使用EAX,EBX,ECX或EDX.我已经确保编译器必须选择一个具有子寄存器的寄存器.

我知道我可以强制asm-code使用特定的寄存器(及其子寄存器),但我想将寄存器分配作业留给编译器.

x86 assembly gcc gnu-assembler

12
推荐指数
2
解决办法
5792
查看次数

标签 统计

assembly ×1

gcc ×1

gnu-assembler ×1

x86 ×1