首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

唯有一行代码, 编译出错了

2013-07-09 
只有一行代码, 编译出错了void read_stack(int* result, int offset){__asm__ (movl %1(%%esp), (%0)\n

只有一行代码, 编译出错了


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"
   );
}

热点排行