Modificar registros a partir de C

Iniciado por LaiaxanIV, 29 Marzo 2016, 19:21 PM

0 Miembros y 1 Visitante están viendo este tema.

LaiaxanIV

Muy buenas a todos!
Os cuento el problema que tengo. Unos compañeros y yo estamos desarrollando un pequeño Sistema Operativo. Nos hemos aventurado en la gestión de procesos y estamos encallados ya que no sabemos como hacer el task switch.
A la hora de cambiar la pila de ejecución necesitamos modificar el registro %ebp por el Kernel_Esp (que apunta a la cima de la pila del proceso anterior). Tenemos una macro Kernel_Esp que nos devuelve este puntero, pero necesitamos ponerlo dentro de %ebp.

Tenemos:

Dword d = Kernel_Esp((union task_union*) t)
__(asm)__{
   "movl d,%ebp"    //Esto obviamente no es correcto
}


Hemos visto algunas formas parecidas a:

Dword d = Kernel_Esp((union task_union*) t)
__(asm)__{
   "movl %0,%ebp" : "=r" (d)    //Compila, pero no sabemos si funciona
}


Pero no sabemos si es esto lo que buscamos.
En resumen, buscamos una manera de introducir una variable dentro de un registro.

fary

En sintaxis de intel sería así:

Código (asm) [Seleccionar]
mov ebp, [d]

Ahora sí, en AT&T ni idea.

saludos.
Un byte a la izquierda.