elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problemas con _fastcall e interrupciones
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problemas con _fastcall e interrupciones  (Leído 1,649 veces)
lweb20

Desconectado Desconectado

Mensajes: 43



Ver Perfil WWW
Problemas con _fastcall e interrupciones
« en: 24 Julio 2013, 01:14 am »

Buenas, aquí estoy continuando con el desarrollo de mi sistema operativo.

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 :o. 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  ;D


« Última modificación: 24 Julio 2013, 05:19 am por lweb20 » En línea

xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: Problemas con _fastcall e interrupciones
« Respuesta #1 en: 24 Julio 2013, 04:06 am »

El error dice que estas intentando ejecutar un opcode que no es valido para el procesador, tambien depende del modo de operacion del procesador.

Cual es ese opcode invalido?

Ya que he visto las instrucciones pushad y popad, te pregunto si estas en 64 bits?

Un saludo.


En línea

lweb20

Desconectado Desconectado

Mensajes: 43



Ver Perfil WWW
Re: Problemas con _fastcall e interrupciones
« Respuesta #2 en: 24 Julio 2013, 05:13 am »

Ah si me olvidé mencionar que estoy trabajando en 32 bits.

Reformulo mi pregunta ya que he hecho varios cambios. ¿Es posible que un handler de interrupción (por ejemplo del PIT) sea fastcall? y cómo.

- pushad y popad meten y sacan los registros del CPU de 32 bits.

EDIT

- el tipo de llamada o convención _fastcall es más rápido que _cdecl verdad?
« Última modificación: 24 Julio 2013, 05:23 am por lweb20 » En línea

xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: Problemas con _fastcall e interrupciones
« Respuesta #3 en: 24 Julio 2013, 06:21 am »

Reformulo mi pregunta ya que he hecho varios cambios. ¿Es posible que un handler de interrupción (por ejemplo del PIT) sea fastcall? y cómo.

Lee esto.

Código:
http://www.agner.org/optimize/calling_conventions.pdf

Tambien he ledio por hay que fastcall no esta estandarizada.

- pushad y popad meten y sacan los registros del CPU de 32 bits.

Si lose, pero como no indicaste en que modo estabas esas instrucciones en 64 bits generan un opcode invalido, que es el error que muestras y te pregunte y que no contestaste, de donde viene ese opcode invalido?

- el tipo de llamada o convención _fastcall es más rápido que _cdecl verdad?

Si, ya que fastcall utiliza los registros y no el stack.

Pero ya veo que esto es C++ y Windows, cosa que no me gusta, asi que no puedo ayudarte mejor, mas bien era por el code en ASM.

Un saludo.
En línea

lweb20

Desconectado Desconectado

Mensajes: 43



Ver Perfil WWW
Re: Problemas con _fastcall e interrupciones
« Respuesta #4 en: 24 Julio 2013, 06:22 am »

Gracias me haz aclarado muchas dudas.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Interrupciones AverTV GO + More TV
Multimedia
HollywoodStar 1 3,045 Último mensaje 17 Febrero 2005, 10:06 am
por HollywoodStar
Interrupciones en VB
Programación Visual Basic
el_chente23 4 5,563 Último mensaje 18 Mayo 2005, 22:47 pm
por Slasher-K
Interrupciones
Programación C/C++
@synthesize 1 3,139 Último mensaje 13 Junio 2010, 12:59 pm
por Eternal Idol
Todas las interrupciones del DOS
ASM
x64core 0 2,553 Último mensaje 17 Noviembre 2011, 06:10 am
por x64core
interrupciones
ASM
-dominique- 7 4,681 Último mensaje 14 Diciembre 2012, 00:31 am
por -dominique-
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines