Sintaxis FASM

Iniciado por ferk93, 8 Julio 2009, 17:43 PM

0 Miembros y 1 Visitante están viendo este tema.

ferk93

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..

Erik#

Código (asm) [Seleccionar]
include 'C:\fasm\INCLUDE\WIN32AX.inc'

.data
num1 db 3
num2 db 2

.code
start:
mov eax, num1
add eax, num2
push eax
pop num2
.end start

YST

Código (asm) [Seleccionar]

include 'win32ax.inc'
.data
Numero1 db 3
Numero2 db 9
.code
start:
xor cl,cl
mov cl,byte[Numero1]
add cl,byte[Numero2]
mov byte[Numero2],cl
ret
.end start       


Esew coded te deja el primer byte de Numero2 en 12


Yo le enseñe a Kayser a usar objetos en ASM

Erik#

Cita de: YST en  8 Julio 2009, 21:51 PM
Código (asm) [Seleccionar]

include 'win32ax.inc'
.data
Numero1 db 3
Numero2 db 9
.code
start:
xor cl,cl
mov cl,byte[Numero1]
add cl,byte[Numero2]
mov byte[Numero2],cl
ret
.end start       


Esew coded te deja el primer byte de Numero2 en 12

cl son instrucciones de 16 bits? o eran 8?

YST

Cita de: Erik# en  8 Julio 2009, 22:01 PM
Cita de: YST en  8 Julio 2009, 21:51 PM
Código (asm) [Seleccionar]

include 'win32ax.inc'
.data
Numero1 db 3
Numero2 db 9
.code
start:
xor cl,cl
mov cl,byte[Numero1]
add cl,byte[Numero2]
mov byte[Numero2],cl
ret
.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


Yo le enseñe a Kayser a usar objetos en ASM

Erik#

Cita de: YST en  8 Julio 2009, 22:03 PM
Cita de: Erik# en  8 Julio 2009, 22:01 PM
Cita de: YST en  8 Julio 2009, 21:51 PM
Código (asm) [Seleccionar]

include 'win32ax.inc'
.data
Numero1 db 3
Numero2 db 9
.code
start:
xor cl,cl
mov cl,byte[Numero1]
add cl,byte[Numero2]
mov byte[Numero2],cl
ret
.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?

ny0x

como te habras dado cuenta el identificador dentro de corchetes [] es el valor de la variable y sin corchetes es su direccion en memoria  ;-)

ferk93

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!

Erik#

Cita de: 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!

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.

YST

Cita de: 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!
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


Yo le enseñe a Kayser a usar objetos en ASM