Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: ferk93 en 8 Julio 2009, 17:43 pm



Título: Sintaxis FASM
Publicado por: ferk93 en 8 Julio 2009, 17:43 pm
Mi pregunta es, como se puede mover el valor de un registro a una variable?

include 'C:\fasm\INCLUDE\WIN32AX.inc'

.data
num1 db 3
num2 db 2

.code
mov eax, num1
add eax, num2
mov num2, eax


Asi deberia mover el valor de la suma a la variable num2, pero visto que no tambien probe a hacerlo asi

include 'C:\fasm\INCLUDE\WIN32AX.inc'

.data
num1 db 3
num2 db 2
num3 db 0

.code
mov eax, num1
add eax, num2
add num3, eax  ; tambien con  mov num3, eax


como tampoco funciono intente hacerlo con la pila

include 'C:\fasm\INCLUDE\WIN32AX.inc'

.data
num1 db 3
num2 db 2

.code
mov eax, num1
add eax, num2
push eax
pop num2

Donde falla?

Gracias a todos..


Título: Re: Sintaxis FASM
Publicado por: Erik# en 8 Julio 2009, 19:04 pm
Código
  1. include 'C:\fasm\INCLUDE\WIN32AX.inc'
  2.  
  3. .data
  4. num1 db 3
  5. num2 db 2
  6.  
  7. .code
  8. start:
  9. mov eax, num1
  10. add eax, num2
  11. push eax
  12. pop num2
  13. .end start


Título: Re: Sintaxis FASM
Publicado por: YST en 8 Julio 2009, 21:51 pm
Código
  1. include 'win32ax.inc'
  2. .data
  3. Numero1 db 3
  4. Numero2 db 9
  5. .code
  6. start:
  7. xor cl,cl
  8. mov cl,byte[Numero1]
  9. add cl,byte[Numero2]
  10. mov byte[Numero2],cl
  11. ret
  12. .end start      

Esew coded te deja el primer byte de Numero2 en 12


Título: Re: Sintaxis FASM
Publicado por: Erik# en 8 Julio 2009, 22:01 pm
Código
  1. include 'win32ax.inc'
  2. .data
  3. Numero1 db 3
  4. Numero2 db 9
  5. .code
  6. start:
  7. xor cl,cl
  8. mov cl,byte[Numero1]
  9. add cl,byte[Numero2]
  10. mov byte[Numero2],cl
  11. ret
  12. .end start      

Esew coded te deja el primer byte de Numero2 en 12

cl son instrucciones de 16 bits? o eran 8?


Título: Re: Sintaxis FASM
Publicado por: YST en 8 Julio 2009, 22:03 pm
Código
  1. include 'win32ax.inc'
  2. .data
  3. Numero1 db 3
  4. Numero2 db 9
  5. .code
  6. start:
  7. xor cl,cl
  8. mov cl,byte[Numero1]
  9. add cl,byte[Numero2]
  10. mov byte[Numero2],cl
  11. ret
  12. .end start      

Esew coded te deja el primer byte de Numero2 en 12

cl son instrucciones de 16 bits? o eran 8?

CL no es una instruccion si no que es un registro :xD


Título: Re: Sintaxis FASM
Publicado por: Erik# en 8 Julio 2009, 22:20 pm
Código
  1. include 'win32ax.inc'
  2. .data
  3. Numero1 db 3
  4. Numero2 db 9
  5. .code
  6. start:
  7. xor cl,cl
  8. mov cl,byte[Numero1]
  9. add cl,byte[Numero2]
  10. mov byte[Numero2],cl
  11. ret
  12. .end start      

Esew coded te deja el primer byte de Numero2 en 12

cl son instrucciones de 16 bits? o eran 8?

CL no es una instruccion si no que es un registro :xD

YST marica tu sabes que siempre me confundo xD, de cuanto es ese registro: 8,16 bits?


Título: Re: Sintaxis FASM
Publicado por: ny0x en 8 Julio 2009, 22:30 pm
como te habras dado cuenta el identificador dentro de corchetes [] es el valor de la variable y sin corchetes es su direccion en memoria  ;-)


Título: Re: Sintaxis FASM
Publicado por: ferk93 en 8 Julio 2009, 22:41 pm
Ok, todo bien, pero un par de cosas:

ese "xor cl, cl" pone a cero el registro verdad?
porque usas el registro "cl"?
porque pones "byte" delante de [Numero1]?
que hace exactamnt ese "ret"?

Gracias, y por cierto, en primer codigo q ha posteado Erik# no lo compila el FASM,
de hecho tengo la duda de que se pueda hacer un "pop" a una variable definida en .data
es posible?

Gracias y un saludo!


Título: Re: Sintaxis FASM
Publicado por: Erik# en 8 Julio 2009, 22:44 pm
Ok, todo bien, pero un par de cosas:

ese "xor cl, cl" pone a cero el registro verdad?
porque usas el registro "cl"?
porque pones "byte" delante de [Numero1]?
que hace exactamnt ese "ret"?

Gracias, y por cierto, en primer codigo q ha posteado Erik# no lo compila el FASM,
de hecho tengo la duda de que se pueda hacer un "pop" a una variable definida en .data
es posible?

Gracias y un saludo!

ret es como el exitprocess o el return de c (creo), el xor lo pone a 0.
Mi código que puse no es nada, es solo que puse: start: y .end start
Y en assembly no se compila, se ensambla.


Título: Re: Sintaxis FASM
Publicado por: YST en 8 Julio 2009, 22:55 pm
Ok, todo bien, pero un par de cosas:

ese "xor cl, cl" pone a cero el registro verdad?
porque usas el registro "cl"?
porque pones "byte" delante de [Numero1]?
que hace exactamnt ese "ret"?

Gracias, y por cierto, en primer codigo q ha posteado Erik# no lo compila el FASM,
de hecho tengo la duda de que se pueda hacer un "pop" a una variable definida en .data
es posible?

Gracias y un saludo!
Estan caros los manuales de ASM que no se leen uno ? ¬¬'

xor cl,cl pone cl en 0.

Uso el registro cl por que se me da la regalada gana , podria usar al ,ah,ch,etc.. ( Siempre de tamaño de un byte ya que estoy trabajdno con un byte)

El byte antes de los corchetes es para expesificar el tamaño que quiero.

ret según lo que yo se saca EIP de la pila  y lo restaura :P


Título: Re: Sintaxis FASM
Publicado por: Erik# en 8 Julio 2009, 23:32 pm
Ok, todo bien, pero un par de cosas:

ese "xor cl, cl" pone a cero el registro verdad?
porque usas el registro "cl"?
porque pones "byte" delante de [Numero1]?
que hace exactamnt ese "ret"?

Gracias, y por cierto, en primer codigo q ha posteado Erik# no lo compila el FASM,
de hecho tengo la duda de que se pueda hacer un "pop" a una variable definida en .data
es posible?

Gracias y un saludo!
Estan caros los manuales de ASM que no se leen uno ? ¬¬'

xor cl,cl pone cl en 0.

Uso el registro cl por que se me da la regalada gana , podria usar al ,ah,ch,etc.. ( Siempre de tamaño de un byte ya que estoy trabajdno con un byte)

El byte antes de los corchetes es para expesificar el tamaño que quiero.

ret según lo que yo se saca EIP de la pila  y lo restaura :P


xD ¿Regalada gana? que vocabulario tan completo. (vés como al es de 1 byte :P(8 bits)).

Código
  1. format pe console
  2. entry start
  3. include 'win32ax.inc'
  4. Numero1 dd 3
  5. Numero2 dd 9
  6. Numero3 dd ?
  7. formato db '%d',0
  8. .code
  9. start:
  10. xor cl,cl
  11. mov cl,byte[Numero1]
  12. add cl,byte[Numero2]
  13. mov byte[Numero2],cl
  14. push [Numero2]
  15. push formato
  16. call [printf]
  17. add esp,8
  18. call [getchar]
  19. ret
  20. section '.idata' import data readable
  21. library msvcrt,'msvcrt.dll'
  22. import msvcrt,printf,'printf',getchar,'_fgetchar'

¿Porque no trabajas con dd? son usados para numeros, van genial, ya te digo que con db no vas a poder sumar mucho (:


Título: Re: Sintaxis FASM
Publicado por: ferk93 en 8 Julio 2009, 23:38 pm
Ok,  gracias a los dos y ya nos veRemos q me da q voy a tener muchas dudas con esto del ASM.


Título: Re: Sintaxis FASM
Publicado por: Erik# en 8 Julio 2009, 23:41 pm
Ok,  gracias a los dos y ya nos veRemos q me da q voy a tener muchas dudas con esto del ASM.

De nada, ya sabes, cualquier duda, todos los programadores de asm (no me incluyo xD) te podran ayudar y los usuarios noobs como yo en asm tambien :) ¬¬ ya no soy tan noob xd


Título: Re: Sintaxis FASM
Publicado por: YST en 9 Julio 2009, 04:03 am
Es ridiculo usar cl si estas trabajando con dword :xD .
Código
  1. format pe console
  2. entry start
  3. include 'win32ax.inc'
  4. Numero1 dd 3
  5. Numero2 dd 9
  6. Numero3 dd ?
  7. formato db '%d',0
  8. .code
  9. start:
  10. xor ecx,ecx
  11. mov ecx,dword[Numero1]
  12. add ecx,dword[Numero2]
  13. mov [Numero3],ecx
  14. cinvoke printf,formato,[Numero3]
  15. invoke getchar
  16. ret
  17. section '.idata' import data readable
  18. library msvcrt,'msvcrt.dll'
  19. import msvcrt,printf,'printf',getchar,'_fgetchar'                  


Título: Re: Sintaxis FASM
Publicado por: Erik# en 9 Julio 2009, 09:37 am
Es ridiculo usar cl si estas trabajando con dword :xD .
Código
  1. format pe console
  2. entry start
  3. include 'win32ax.inc'
  4. Numero1 dd 3
  5. Numero2 dd 9
  6. Numero3 dd ?
  7. formato db '%d',0
  8. .code
  9. start:
  10. xor ecx,ecx
  11. mov ecx,dword[Numero1]
  12. add ecx,dword[Numero2]
  13. mov [Numero3],ecx
  14. cinvoke printf,formato,[Numero3]
  15. invoke getchar
  16. ret
  17. section '.idata' import data readable
  18. library msvcrt,'msvcrt.dll'
  19. import msvcrt,printf,'printf',getchar,'_fgetchar'                  

Pero sin indicarle que son dword, funciona :P


Título: Re: Sintaxis FASM
Publicado por: YST en 9 Julio 2009, 09:50 am
Pero es lo mismo solamente que el ensamblador te lo detecta , no ahorras ni un byte :P .


Título: Re: Sintaxis FASM
Publicado por: Erik# en 9 Julio 2009, 09:57 am
Pero es lo mismo solamente que el ensamblador te lo detecta , no ahorras ni un byte :P .

Tambien es una forma de economizar xD! Voy a mirarlo en los procesos.

EDIT: La diferencia de uso de bytes es muy pequeña, casi ni se nota :)