如何让asm跳转到c中的变量地址?

时间:2013-11-07 03:46:01

标签: c linux assembly x86 inline-assembly

现在,我用c中的内联汇编调用跳转指令,如下所示:

int register eax asm("eax") = addr; // addr is a memory address
asm("jmp *%eax");

我想这样做而不必设置任何其他寄存器值(例如我想要这样做):

asm("jmp *(addr)");

这样做的正确方法是什么?也就是说,如何将“c”变量“插入”asm调用?

Ubuntu 12.04 64位,Intel x86 64位处理器,gcc版本4.7.4。

1 个答案:

答案 0 :(得分:4)

"Assembler Instructions with C Expression Operands"

asm volatile("jmp *%0" : : "r" (addr));