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:
Hemos visto algunas formas parecidas a:
Pero no sabemos si es esto lo que buscamos.
En resumen, buscamos una manera de introducir una variable dentro de un registro.
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:
Código [Seleccionar]
Dword d = Kernel_Esp((union task_union*) t)
__(asm)__{
"movl d,%ebp" //Esto obviamente no es correcto
}
Hemos visto algunas formas parecidas a:
Código [Seleccionar]
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.