只有一行代码, 编译出错了
void read_stack(int* result, int offset)
{
__asm__ (
"movl %1(%%esp), (%0)\n" : : "r"(result), "r"(offset * 4) :
);
}
编译的时候提示:
Error: junk `(%esp)' after register
不知道什么意思, 请教各位大神是哪里有问题?
[解决办法]
虽然你只有一行代码, 但是里面的错误可不只一个:
1. %1 是一个寄存器, () 前面是偏移, 不能把寄存器放在那个位置, 两个寄存器相加得 (%1, %%esp) 才行.
2. esp 寄存器不能用于基址+变址寻址方式中.
3. 你不能在两个内存之间进行 mov, 必须要有一个是寄存器才行.
修改建议:
void read_stack(int* result, int offset)
{
__asm__ (
"movl %%esp, %%esi\n"
"movl (%1, %%esi), %%eax\n"
"movl %%eax, (%0)\n" : : "r"(result), "r"(offset * 4) : "%esi", "eax", "memory"
);
}