【发布时间】:2014-04-11 16:06:20
【问题描述】:
我在 GNU C 程序中有以下代码:
void *segment = malloc(1024);
asm volatile("mov $%0, %%rax" : : "r" (segment));
我收到以下错误:
Error: illegal immediate register operand %rax
%rax 有什么问题?
【问题讨论】:
-
代码有什么问题...从不需要直接将任何内容显式移动到
%rax,因为您可以改为使用asm("" : : "a"(segment));- 即使用寄存器修饰符"a"表示“我希望在[ER]AX中传递/返回此值”。上面的程序集是没有意义的——编译器会把它扔掉。请说明您想对RAX中的值做什么。
标签: gcc 64-bit inline-assembly