• Domingo 22 de Diciembre de 2024, 18:42

Autor Tema:  Problema En Masm  (Leído 6357 veces)

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Problema En Masm
« en: Lunes 19 de Septiembre de 2005, 15:47 »
0
Saludos,
no he usado MASM nunca y recien lo estoy utilizando, he tratado de ensamblar un còdigo sencillo pero me arroja un error:

prog.asm(20) : error A2070: invalid instruction operands

No se que pueda ser ya que ese mismo codigo finciona perfectamente en NASM (haciendo las modificaciones pertienentes), este es el còdigo:

Código: Text
  1.  
  2. .486
  3. .model tiny
  4.  
  5. .data
  6. cad db "prueba",0
  7. .code
  8. imprimir:
  9. mov ah,0eh
  10. caracter:
  11. lodsb
  12. cmp al,0
  13. jz finchar
  14. int 10h
  15. jmp caracter
  16. finchar:
  17. ret
  18.  
  19. _start:
  20. cld
  21. mov SI,cad
  22. call imprimir
  23. end _start
  24.  
  25.  
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema En Masm
« Respuesta #1 en: Lunes 19 de Septiembre de 2005, 17:50 »
0
Hay mas de un problema en este planteamiento, el primer problema lo podes solucionar cambiando el .486 por .186, lo segundo que veo es que definis diferentes secciones de codigo cuando en realidad un .COM no tiene cabeceras ni secciones sino datos binarios. Tambien veo que este ejecutable no define el origen a 0100h como debe hacer todo .COM y que empieza su ejecucion en imprimir. Eso lo podes comprobar facilmente con el depurador de MS-DOS (debug.com).

Sin cambiar demasiado asi funciona:

Código: Text
  1.  
  2. .186
  3. .model tiny
  4.  
  5. Codigo segment 'code'
  6. org 0100h
  7.  
  8. _start:
  9. cld
  10. mov SI, offset cad
  11. call imprimir
  12. ret
  13.  
  14. imprimir:
  15. mov ah,0eh
  16. caracter:
  17. lodsb
  18. cmp al,0
  19. jz finchar
  20. int 10h
  21. jmp caracter
  22. finchar:
  23. ret
  24.  
  25.  
  26. cad db "prueba",0
  27.  
  28. Codigo ends
  29.  
  30. end _start
  31.  
  32.  

 :devil:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problema En Masm
« Respuesta #2 en: Lunes 19 de Septiembre de 2005, 18:00 »
0
Citar
cambiando el .486 por .186
para que hago esto?

Citar
lo segundo que veo es que definis diferentes secciones de codigo cuando en realidad un .COM no tiene cabeceras ni secciones sino datos binarios. Tambien veo que este ejecutable no define el origen a 0100h como debe hacer todo .COM

bueno es que no quiero hacer un COM por eso omiti lo del 0100h y agregue segmentos adicionales y quiero hacerlo con asm de 32 bit no con asm de 16 como lo tenia en NASM.

Citar
mov SI, offset cad

que hace offset?

donde puedo conseguir un BUEN manual de MASM?
los que he visto son pateticos...
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema En Masm
« Respuesta #3 en: Lunes 19 de Septiembre de 2005, 18:05 »
0
Cita de: "JuanK"
para que hago esto?

Para que no te de el error al cual haces mencion en el mensaje inicial.

Cita de: "JuanK"
bueno es que no quiero hacer un COM por eso omiti lo del 0100h y agregue segmentos adicionales y quiero hacerlo con asm de 32 bit no con asm de 16 como lo tenia en NASM.

Entonces hay muchos mas errores que no eran aparentes. El primero es que el modelo .tiny no existe en un Sistema Operativo de 32 bits como Windows que solo tiene un modelo de memoria plana.
El segundo y mucho mas importante es que no podes acceder a esa interrupcion de la BIOS ni usar punteros de 16 bits (mov si, cad) en modo protegido. En sintesis ese codigo es para 16 bits.

 :smartass:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problema En Masm
« Respuesta #4 en: Lunes 19 de Septiembre de 2005, 18:08 »
0
eso lo explica todo, o sea que tendria que hacerlo con la 21H supongo,
este era el codigo de 16 bits en nasm:

Código: Text
  1. [ORG 0X0100]
  2. [BITS 16]
  3. jmp INICIO
  4.  
  5. IMPR:
  6. mov AH, 0Eh
  7. SIGCHAR:
  8. lodsb&#59; carga SI en AL, e incrementa SI
  9. cmp AL, 0; verifica fin de cadena
  10. jz    FIN
  11. INT 10H
  12. jmp SIGCHAR  
  13. ;FIN IMPR
  14.  
  15. INICIO:
  16. mov SI,cadena
  17. call IMPR
  18. FIN:
  19. ret
  20. ;FINAL
  21. cadena  db "JuanK",0
  22.  

Si quisiera hacer codigo de 32 bit sin usar el OS.. e decir digamios que estoy haciendo un OS y que no uso ningun compilador de C nio de C++ sino que solo quiero asm..
como puedo hacer ese mismo proceso en  32 bit?
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema En Masm
« Respuesta #5 en: Lunes 19 de Septiembre de 2005, 18:20 »
0
Cita de: "JuanK"
que hace offset?

donde puedo conseguir un BUEN manual de MASM?
los que he visto son pateticos...

A grosso modo diria que devuelve la direccion dentro de un segmente de una etiqueta en este caso cad.

Esto es lo que hay, no me atrevo a decir que no es patetico  :D :
http://doc.ddart.net/asm/Microsoft_MASM_Pr...ers_Guide_v6.1/

Cita de: "JuanK"
eso lo explica todo, o sea que tendria que hacerlo con la 21H supongo

La interrupcion 21h es de MS-DOS por lo tanto la respuesta corta es no. La respuesta larga involucra el metodo de llamada de servicios de Windows ya sea mediante una interrupcion o instrucciones de llamada rapida.

Cita de: "JuanK"
Si quisiera hacer codigo de 32 bit sin usar el OS.. e decir digamios que estoy haciendo un OS y que no uso ningun compilador de C nio de C++ sino que solo quiero asm..
como puedo hacer ese mismo proceso en 32 bit?

No se puede hacer un Sistema Operativo con MASM porque su licensia lo prohibe.

De cualquier manera no podes imprimir nada en pantalla sin hacer uso de hardware, el hardware no es accesible directamente en modo protegido con lo cual dependes de los servicios del S.O. para cualquier cosa que quieras hacer, no tenes acceso ni a la BIOS ni a puertos. Windows tampoco funciona en modo consola con lo cual no saldria el texto ... en sintesis tenes que usar las funciones del S.O. y a lo sumo podes interactuar con el hardware en modo kernel.

 :devil:  :smartass:

PD. TODO el tiempo hablo de Windows NT (3.1, 4.0, 5.0=Windows 2000, 5.1=Windows XP, 5.2=Windows 2003 Server, 6.0=Windows Vista).

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problema En Masm
« Respuesta #6 en: Lunes 19 de Septiembre de 2005, 18:26 »
0
bueno pero retomandom mi pregunta...
y si estoy haciuendo un sistema operativo o mi propio programa que corre en el arranque...

como puedo implementar esa rutina en modo protegido siendo to mismo el desarrolador del OS o de mi RTL?

Aparte de NASM que otro ensamblador puedo usar para hacer un OS?
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema En Masm
« Respuesta #7 en: Lunes 19 de Septiembre de 2005, 18:40 »
0
Cita de: "JuanK"
como puedo implementar esa rutina en modo protegido siendo to mismo el desarrolador del OS o de mi RTL?

Como quieras, si es tu Sistema Operativo la podes implementar como quieras. Lo que hacen tanto Windows como Linux, a grandes rasgos, es proveer una interfaz mediante una llamada al sistema con la cual se derivara oportunamente al driver encargado de la placa de video la peticion de escritura.
De cualquier manera me parece que te estas adelantando un poco a los hechos, si tuvieras un S.O. de 32 bits verias claramente como implementarlo.

Cita de: "JuanK"
Aparte de NASM que otro ensamblador puedo usar para hacer un OS?

FASM.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problema En Masm
« Respuesta #8 en: Lunes 19 de Septiembre de 2005, 18:47 »
0
me salio el error al realizar los cambio en el codigo, como lo puedo corregir?
Citar
mioasm.obj : warning LNK4078: multiple ".data" sections found with different att
ributes (C0220040)
mioasm.obj : fatal error LNK1190: invalid fixup found, type 0x0001
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema En Masm
« Respuesta #9 en: Lunes 19 de Septiembre de 2005, 19:28 »
0
Cita de: "JuanK"
me salio el error al realizar los cambio en el codigo, como lo puedo corregir?
Citar
mioasm.obj : warning LNK4078: multiple ".data" sections found with different att
ributes (C0220040)
mioasm.obj : fatal error LNK1190: invalid fixup found, type 0x0001
¿Que cambio hiciste exactamente y con que trataste de construir la aplicacion, MASM32?

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problema En Masm
« Respuesta #10 en: Lunes 19 de Septiembre de 2005, 20:32 »
0
copié el código tal cual lo posteaste y si en masm32.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema En Masm
« Respuesta #11 en: Lunes 19 de Septiembre de 2005, 20:47 »
0
Cita de: "JuanK"
copié el código tal cual lo posteaste y si en masm32.

Cita de: "Eternal Idol"
El segundo y mucho mas importante es que no podes acceder a esa interrupcion de la BIOS ni usar punteros de 16 bits (mov si, cad) en modo protegido. En sintesis ese codigo es para 16 bits.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problema En Masm
« Respuesta #12 en: Lunes 19 de Septiembre de 2005, 20:54 »
0
como le digo a MASM que me genere codigo de 16 bits?
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema En Masm
« Respuesta #13 en: Lunes 19 de Septiembre de 2005, 21:12 »
0
Cita de: "JuanK"
como le digo a MASM que me genere codigo de 16 bits?
No se puede, existe una version de 32 y otra de 16 bits, tenes que usar ese ejecutable.   :comp:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problema En Masm
« Respuesta #14 en: Lunes 19 de Septiembre de 2005, 21:54 »
0
O sea que como que mejor me quedo con el NASM?
realmente siempre use TASM cuando lo poco que hice en asm hace unos años, pero recien hace poco los oi hablar de NASM y me gusto, pero tambien los hoy de MASM , queria probar y no me gusto...

lo unico malo es ..

bueno abrire otro post para eso.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema En Masm
« Respuesta #15 en: Lunes 19 de Septiembre de 2005, 22:32 »
0
Cita de: "JuanK"
O sea que como que mejor me quedo con el NASM?
realmente siempre use TASM cuando lo poco que hice en asm hace unos años, pero recien hace poco los oi hablar de NASM y me gusto, pero tambien los hoy de MASM , queria probar y no me gusto...

lo unico malo es ..

bueno abrire otro post para eso.
El problema es que intentas usar un destornillador para clavar un clavo cuando deberias usar un martillo, no podes ensamblar un programa de 16 bits con MASM de 32 bits y tampoco podes pretender que ese programa funcione en Windows.

Para hacer aplicaciones de 32 para Windows, a mi entender, no hay nadie que le haga sombra al paquete MASM32.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Problema En Masm
« Respuesta #16 en: Lunes 19 de Septiembre de 2005, 22:40 »
0
es que precisamente no me interesa desarrollar asm de 32 bit para windows, me interesa hacerlo para montar un pequeño OS usando el BOSCH, por lo que ya les he mencionado nunca he hecho nada del proceso de arranque ni el paso a 32 bit, y he trabajado en lenguaje C cuando ya estas cosas han sido hechas y me interesa hacerlas por mi cuenta.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema En Masm
« Respuesta #17 en: Lunes 19 de Septiembre de 2005, 22:57 »
0
Cita de: "JuanK"
es que precisamente no me interesa desarrollar asm de 32 bit para windows, me interesa hacerlo para montar un pequeño OS usando el BOSCH, por lo que ya les he mencionado nunca he hecho nada del proceso de arranque ni el paso a 32 bit, y he trabajado en lenguaje C cuando ya estas cosas han sido hechas y me interesa hacerlas por mi cuenta.
Entonces olvidate de MASM, MASM es para usar con los S.O. de Windows asi de simple.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.