No querrás hacer un popa? que a fin de cuentas hace lo mismo que lo que tu has puesto en tu segunda etiqueta de código... Yo la instrucción popad no la conozco desde luego pero por la descripción que has hecho...
Código
int main(void) { __asm("pusha"); __asm("popa"); }
A mi me compila ok y no me peta la pila ni nada, supongo que querrás hacer eso Salu2
Ahora me da curioisidad si se puede sustituir el 0x12345678 por un valor dinamico, probe con sprintf pero no se puede, por ahi vi algunas formas para usar variables de C con el codigo asm pero para esto no me sirvio ninguna.
no creo que te sirvan variables ya que a la hora de compilarlo va a usar la direccion de esta y no su valor, por lo que no puede compilar nada. si quieres modificar alguna parte del codigo es mas sencillo usar labels para obtener un puntero a esa zona de codigo y despues ya puedes modificar y hacerlo dinamico (en tiempo de ejecucion).
Lo quiero para darle mas flexibilidad a la hora de crear codigo.
Hasta ahora siempre que quiero usar datos de variables en C con el codigo asm lo hago sabiendo como el compilador construye las funciones y donde ir a buscar los datos.
Pero aveces no solo uso el codigo generado al compilar sino q tmb que uso codigo asm creado en tiempo de ejecucion, por eso cuanta mas flexibilidad mejor.
Igualmente ya tengo varias formas y me arreglo bien para lo que quiero hacer, pero si hay mas conviene saberlas.