| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
kusanagi85
Registrado: 29 Nov 2007 Mensajes: 1
| Publicado: 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
| Publicado: 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
| Publicado: 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.
| Publicado: 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 | |  | robertof32
Registrado: 20 Mar 2011 Mensajes: 4
| Publicado: 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.
| Publicado: 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 | |  | | robertof32
Registrado: 20 Mar 2011 Mensajes: 4
| Publicado: 23/03/2011 7:02 pm | | | Título: |
| | ok. Gracias. |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |