Pregunta

En este momento, llamo a la instrucción de salto con ensamblaje en línea en C de la siguiente manera:

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

Quiero hacerlo sin tener que establecer otros valores de registro (por ejemplo, que quiero hacer es algo como esto):

asm("jmp *(addr)");

¿Cuál es la forma correcta de hacer eso? Es decir, ¿cómo puedo "insertar" la variable AC en la llamada ASM?

Ubuntu 12.04 64 bits, Intel X86 Procesador de 64 bits, GCC versión 4.7.4.

¿Fue útil?

Solución

"Instrucciones de ensamblador con operandos de expresión C"

asm volatile("jmp *%0" : : "r" (addr));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top