Hoy decidí cambiar la convención de llamada de mi sistema de _cdecl a _fastcall porque si no me equivoco _fastcall reduce el tamaño del ejecutable y casi siempre usa registros en lugar de la pila, lo cual lo hace más veloz al SO. (Corríjanme si me equivoco).
Resulta que tuve un pequeño problema con las interrupciones del SO (el manejador del teclado, etc..).
El manejador del teclado dejó de funcionar . Entonces empecé a testear y testear, investigar e investigar y nada . Aquí les dejo el código a ver si alguien me da una mano:
Código:
void __cdecl Teclado::manejador(){
_asm cli // deshabilito interrupcionnes
_asm pushad // guardo registros generales en la pila
// aquí va todo el código para controlar las teclas... etc......
_asm popad // saco los registros guardados de la pila
_asm sti // habilito interrupciones si no me quedo colgado xD
_asm iret // salgo de la interrupción
}
El error que sale es Invalid opcode.
También tengo la duda si el manejador debe ser _cdecl o puede ser _fastcall porque con ninguna funciona
Ojalá alguien pueda ayudarme por favor