/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

int86() en DEV c++

 
      Índice del Foro elrincondelc.com -> Dev-C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
kusanagi85



Registrado: 29 Nov 2007
Mensajes: 1

MensajePublicado: 29/11/2007 1:15 pm
Título: int86() en DEV c++

Como puedo hacer para utilizar int86() en el DEV c++.

Es que estoy en modo consola, y quiero usar el mouse. pero necesito
usar las interrupciones.

Desde ya muchas gracias
Volver arriba
robertof32



Registrado: 20 Mar 2011
Mensajes: 4

MensajePublicado: 20/03/2011 9:35 pm
Título:

yo usaba _asm {
'codigo ensamblador'
} para utilizar c con ensamblador pero ultimamente estuve probando la funcion int86 pero no se que error tengo porque no compila, pero supongo que tendré que leer este texto que acabo de encontrar. saludos.
Volver arriba
robertof32



Registrado: 20 Mar 2011
Mensajes: 4

MensajePublicado: 21/03/2011 7:27 am
Título:

Bueno, la cosa es que me puse a probar en visual c un equivalente a printf pero en ensamblador y primero pensé que era así:
void main () {
char *var="dddd";
_asm {
MOV DX, word ptr var
MOV AH,9
INT 21h
INT 20h
}
}

pero después dudé y lo hicce de esta otra manera:

void main () {
char *var="dddd";
_asm {
push word ptr var
push 9
int 21h
int 20h
}
}

el asunto es que de ninguna de las dos maneras compila.
Alguien sabe dónde está el error.

PD:creo que int86 no se puede usar en visual c.
Volver arriba
untio



Registrado: 17 Sep 2008
Mensajes: 290
Ubicación: MICA S.A.

MensajePublicado: 22/03/2011 7:05 am
Título:

Hola,
Con OpenWatcom he creado 2 proyectos. Uno de consola para Windows y otro para msdos. En ambos he escrito el siguiente código -el mismo para ambos-:
Código:

int main(int argc, char *argv[])
{
    __asm push ax
    __asm push bx
    __asm push dx
    __asm mov ah, 02h;
    __asm mov bh, 0
    __asm dh, 1
    __asm dl, 1
    __asm int 10h
    __asm pop dx
    __asm pop bx
    __asm pop ax
    return 0;
}

Me ha compilado en los 2 proyectos. Un proyecto se ejecuta bien, pero en el otro recibo un volcado de pila y si lo ejecuto con el depurador recibo una violación de acceso a memoria.
Supongo que podrás ejecutarlo en Visual C++ también.
Un consejo: si quieres hacer un programa para Windows usa su api, pero si te empeñas, prueba con las interrupciones que quieras. En todas ellas te ocurrirá lo mismo que le pasa al proyecto para Windows con este código. Tú mismo, pero al final deberás rendirte a la evidencia. NO PUEDES USAR INTERRUPCIONES CON WINDOWS PORQUE EL SISTEMA SE PROTEJE A SÍ MISMO. De modo que olvídate de la interrupción 33h y descárgate el sdk de windows y empieza a documentarte. Puedes descargarlo desde:
http://www.microsoft.com/downloads/en/details.aspx?familyid=71DEB800-C591-4F97-A900-BEA146E4FAE1&displaylang=en
Pero ten paciencia porque ocupa lo suyo y mejor que lo hagas con un gestor de descargas, por si tienes que hacerlo en varios tramos.

Espero que te sea útil.
Volver arriba
Yahoo Messenger
robertof32



Registrado: 20 Mar 2011
Mensajes: 4

MensajePublicado: 22/03/2011 4:16 pm
Título:

Mil gracias, capeon. La verdad que a me compilaba y me tiraba el overflow, pero ni idea de por qué. Tendré que consultar los manuales porque no me doy idea de como pasarle un puntero a un direccion de memoria. A decir verdad, nunca dejé de ser nuevo en esto de programar usando las interrupciones.
Si me explicás dónde tengo el error en mi codigo, te lo agradezco sino no importa.
Gracias.
Volver arriba
untio



Registrado: 17 Sep 2008
Mensajes: 290
Ubicación: MICA S.A.

MensajePublicado: 23/03/2011 6:48 am
Título:

Hola,
Si deseas usar las viejas interrupciones estás obligado a crear un programa msdos. Te funcionará en windows, pero a través de una máquina virtual que tiene.
El problema en tu código es que quieres asignar a dx el desplazamiento dentro del segmento ds a la cadena de caracteres. En primer lugar, eso se hace así en msdos porque se trabaja en modo real y los registros son de 16 bits. En un programa windows se trabaja en modo protegido y los registros son de 32 bits. No se hasta que punto estás puesto en assembly -eso que algunos llaman ensamblador-. Normalmente se usan los modelos small o flat. En el modelo small de 32 bits los desplazamientos son de hasta 4 GBs y los registros de segmento pueden variar. En el modelo flat sólo tratas con un segmento de 4GBs.
El problema de tu código es que quieres asignar un desplazamiento de 32 bits a un registro -dx-, o mejor dicho, a la palabra de menor peso de un registro -edx-, que sólo tiene sitio para una palabra (16 bits).

Otra cosa. Si quieres hacer programas gráficos para windows, hay tutoriales del api de windows a montones en la red. Además, te descargas el sdk, o te pasas la vida buscando en msdn, para los detalles de cada parámetro de cada función. Es bastante divertido tener dos ventanas mientras desarrollas un programa: una para el compilador y otra con la documentación. Al final te acostumbras.
La programación gráfica no es tan complicada, aunque la documentación para desarrollar programas de consola también está incluida en el sdk, y es bastante gratificante. Eso sí, no es tan simple como el visual basic, pero todo es acostumbrarse. Además tendrás acceso a cosas muy potentes: acceso a bases de datos, trabajo con imágenes, multimedia, internet, etc.

Eso sí. Si quieres dedicarte en serio a hacer programas para windows, usa Visual C++. Uso la versión express que es gratuita. Los demás compiladores no tienen tantas librerías. Prueba a añadir a un fichero fuente en devcpp esto: #include <dshow.h>
verás que lista de errores.

Espero que te sirva de ayuda.
Volver arriba
Yahoo Messenger
robertof32



Registrado: 20 Mar 2011
Mensajes: 4

MensajePublicado: 23/03/2011 7:02 pm
Título:

ok. Gracias.
Volver arriba
      Índice del Foro elrincondelc.com -> Dev-C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com