Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: h0oke en 31 Julio 2009, 14:07 pm



Título: Duda - Ensamblado
Publicado por: h0oke en 31 Julio 2009, 14:07 pm
Hola, este este es mi primer intento de código en ASM, de seguro tiene millones de errores, o seguramente carece de sentido  :-[.

Código
  1. TITLE fibonnacci-10n
  2.  
  3. Include Irvine32.inc
  4. .data
  5. i byte 1
  6. j byte 0
  7. t byte 0
  8. .code
  9. main PROC
  10. mov cx,10   ;counter=10
  11. lblLooop1:
  12.        mov ax,i
  13.        add ax,j
  14.        mov bx,t
  15.        add bx,ax
  16.        mov i,j
  17.        mov j,t
  18.        mov dx,j
  19.        call DUMPREGS  
  20.        loop lblLoop1
  21. main ENDP
  22. END main

Esto creo que no es correcto verdad?:
Código:
        mov i,j
        mov j,t

Lo tengo en el editor de MASM, tengo la duda de como ensamblarlo.


Título: Re: Duda - Ensamblado
Publicado por: Eternal Idol en 31 Julio 2009, 14:12 pm
ml.exe es el ensamblador de MASM:
ml archivo.asm


Título: Re: Duda - Ensamblado
Publicado por: h0oke en 31 Julio 2009, 14:20 pm
Como lo suponía Irvine32 me iba a traer errores...  :¬¬



Título: Re: Duda - Ensamblado
Publicado por: Eternal Idol en 31 Julio 2009, 14:26 pm
Sacalo y en lugar de usar ese DUMPREGS usa Debug.exe.

Usa un registro, del tamaño adecuado (en este caso 1 byte, 8 bits), para el mov:

Código
  1. mov cl, j
  2. mov i, cl


Título: Re: Duda - Ensamblado
Publicado por: h0oke en 31 Julio 2009, 14:45 pm
 :-[
Será que ASM no me quiere?

Código
  1. TITLE fibonnacci-10n
  2.  
  3. .data
  4.    i byte 1
  5.    j byte 0
  6.    t byte 0
  7.  
  8. .code
  9.    main PROC
  10.    mov cx,10   ;counter=10
  11.    lblLooop1:
  12.            mov ax,i
  13.            add ax,j
  14.            mov bx,t
  15.            add bx,ax
  16.            mov cl,j
  17.            mov i,cl
  18.            mov cl,t
  19.            mov j,cl
  20.            mov dx,j
  21.            loop lblLoop1
  22.    main ENDP
  23.    END main
Al ensamblar tengo 10 errores, 9 son:

Citar
Must be in a segment block

Y otro es:

Citar
fatal error... Unmatched block nesting:main




Título: Re: Duda - Ensamblado
Publicado por: Eternal Idol en 31 Julio 2009, 15:26 pm
¿Queres hacerlo en 16 bits? ¿Estas usando el MASM de 16 bits?

Ojo con usar cl sin restaurarlo, estas cambiando cx que es el contador del loop.


Título: Re: Duda - Ensamblado
Publicado por: h0oke en 31 Julio 2009, 15:30 pm
Según tengo entendido, http://www.masm32.com/masmdl.htm, es de 32 bits.

Ahora bien, con respecto a lo de cl, es verdad. Mejor lo cambio por bl.


Título: Re: Duda - Ensamblado
Publicado por: fuenteRea en 31 Julio 2009, 15:35 pm
El MASM dependera de la version, la ultima que yo use era de 16.

PD: Veo un error, tienes un registro tipo palabra y se la asignas a una variable tipo byte y lo haces muchas veces. pasalo o a la parte alta o a la parte baja del registro

un saludo!!

si no tienes mucha soltura, empieza por otro mas sencillo, aunque sea malo por ejemplo esta el emu 8086 tiene una especie de depurador que te permite ir paso a paso y ves donde te confundes. OJO si usas interrupciones no vas a poder porque son distintas, creo que la interrupcion del raton o la funcion de pedir la hora o puff no me acuerdo lo siento


Título: Re: Duda - Ensamblado
Publicado por: h0oke en 31 Julio 2009, 15:42 pm
doctor77 en que parte ves lo de la asignación del registro?

La version que utilizo 6.14.8444


Título: Re: Duda - Ensamblado
Publicado por: Eternal Idol en 31 Julio 2009, 15:49 pm
Si es de 32 necesitas mas directivas, asi lo vas a poder ensamblar, depuralo para ver como funciona :

Código
  1. .386
  2. .model flat, stdcall
  3.  
  4. .data
  5. i byte 1
  6. j byte 0
  7. t byte 0
  8.  
  9. .code
  10. main:
  11. mov cx,10   ;counter=10
  12. lblLoop1:
  13.        mov al,i
  14.        add al,j
  15.        mov bl,t
  16.        add bl,al
  17.  
  18. mov cl, j
  19. mov i, cl
  20.  
  21. mov cl, t
  22. mov j, cl
  23.  
  24.        mov dl,j
  25.  
  26.        loop lblLoop1
  27. end main
  28.  


Título: Re: Duda - Ensamblado
Publicado por: h0oke en 31 Julio 2009, 16:16 pm
Muchas gracias EI. Al parecer me tengo que actualizar un poco, en ensambladores 32bit; solo me guiaba por el manual Assembly Language For Intel based computers.

Bien, ahora trataré de practicar un poco más, ya que intenté comenzar por algo que no debía al parecer; repasar un poco más sobre los registros.


Título: Re: Duda - Ensamblado
Publicado por: Eternal Idol en 31 Julio 2009, 16:18 pm
De nadas, te recomiendo arrancar por aca: tutoriales de Iczelion (http://win32assembly.online.fr/tutorials.html).


Título: Re: Duda - Ensamblado
Publicado por: h0oke en 31 Julio 2009, 16:21 pm
Gracias nuevamente EI  ::)


Título: Re: Duda - Ensamblado
Publicado por: fuenteRea en 31 Julio 2009, 16:26 pm
por si te sirve, aqui tienes las posibles instrucciones http://www.emu8086.com/assembly_language_tutorial_assembler_reference/8086_instruction_set.html
faltan las interrupciones porque no son las mismas, un saludo!!

un registro ax esta formado por ah y al  ax= (ahal) ah viene de a high y al de a low parte alta y baja del registro.  ax tipo palabra= a 16b que es ah+al

un saludo!!


Título: Re: Duda - Ensamblado
Publicado por: h0oke en 31 Julio 2009, 16:30 pm
Eso es lo que me está mareando un poco desde el comienzo; el tema de las librerías, veo que en ese enlace utiliza emu8086.inc y pone como que la instrucción mov pertenece a tal, en camio el código de EI no la utiliza. ¿Qué sería lo recomendable? ¿Qué me fije en las librerías para un modo consola? o directamente trabajar con las api a través de invoke?


Título: Re: Duda - Ensamblado
Publicado por: Eternal Idol en 31 Julio 2009, 16:33 pm
Ese es un emulador de un procesador arcaico, no necesitas incluir ese archivo, si usas la API de Windows tendras que incluir los archivos que vienen con MASM32 - los vas a ir viendo en los tutoriales de Iczelion - o escribirlos vos mismo (solo tiene sentido para aprender), las interrupciones de la BIOS y MS-DOS no estan disponibles en 32/64 bits donde tenes que usar la API de Windows, incluso para la consola. invoke es una directiva util que enmascara los push y el call, siempre podes usar estas instrucciones manualmente.


Título: Re: Duda - Ensamblado
Publicado por: fuenteRea en 31 Julio 2009, 16:36 pm
es para que veas como funcionan las instrucciones, para que sepas que por ejemplo donde se guardan las cosas al hacer una division, es solo una orientacion, a mi me resulto bastante util porque siempre se me olvida por ejemplo el mull o div. Pero ya te dije que el emu es malo, pero que te lo recomendaria para empezar haciendo un yo que se un programa que sume matrices, o cositas asi. un saludo!!


Título: Re: Duda - Ensamblado
Publicado por: ny0x en 31 Julio 2009, 18:14 pm
cuidado con apegarse a libreria de terceros, mejor usa las apis  ;-)


Título: Re: Duda - Ensamblado
Publicado por: h0oke en 6 Agosto 2009, 05:16 am
He terminado unas materias, y puedo dedicarle un poquito más de tiempo.

Como dije, ya había leído una parte sobre los registros y demás y operadores básicos, por supuesto que esto no se aprende más que con la práctica.

Ahora bien, estuve mirando el tuto que recomendó EI, sería recomendable que comience con API's para manejar CIERTOS eventos en mis programitas? Sería algo muy cómodo para mi ya que vengo de utilizar API's en lenguajes de alto nivel; a lo que me refiero es que si quiero hacer sumas, necesitaría de al menos una api para leer la entrada y otra para la salida, y ver un poco más de "dinamismo" si quieres llamarle.


Título: Re: Duda - Ensamblado
Publicado por: Eternal Idol en 6 Agosto 2009, 08:07 am
Consulta GetStdHandle y ReadFile en la MSDN.


Título: Re: Duda - Ensamblado
Publicado por: Erik# en 12 Agosto 2009, 09:43 am
Muchas gracias EI. Al parecer me tengo que actualizar un poco, en ensambladores 32bit; solo me guiaba por el manual Assembly Language For Intel based computers.

Bien, ahora trataré de practicar un poco más, ya que intenté comenzar por algo que no debía al parecer; repasar un poco más sobre los registros.

Assembly Language For Intel based computers de Kip R. Irvine esta basado el libro para la programación de FASM.