[Ayuda]con punteros en asm

Iniciado por ny0x, 12 Mayo 2009, 19:44 PM

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

ny0x

Hola a todos quiero aprender a programar en asm, porque he oido que es el lenguaje mas rapido que hay, y tambien estoy enterado de todas sus desventajas. Pero bueno mi duda es esta como puedo usar punteros en asm.
Ya se que es un poco pronto porque estoy empezando. Pero esto de practicar mientras aprendo me ha servido, antes mi idea es hacer una funcion para sacar la longitud de una cadena usando el caracter nulo. Para esto necesito hacer un puntero que apunte al principio de una cadena para irlo incrementndo pero no se nada estoy en cero. Bueno se lo basico como los registros, algunas instrucciones pero hasta ahi nada mas.
No estoy pidiendo que me den una funcion hecha sino que me guien a como la puedo hacer yo.

gracias

Arkangel_0x7C5

para usarlos, lo metes en un registro y lo usas asi: mov eax, [ebx]
Donde los [] son para decirle que acceda a la dirección de memoria que hay en el registro.

Para saberla direccion de una variable gloval. puedes usar offset en masm y lea.
Si es una variable local, puedes usar lea tambien.

Saludos

ny0x

#2
Hola graicas por responder, intente hacer un code pero me surgen unas dudas, el lea solo me funciona dentro de main y no dentro len, bueno si compila pero se supone que debe mostrar holamundo pero no muestra nada (un messagebox vacio), y creo que a eso se deba que tarde tanto en salir de la funcion, los messagebox los puse para poder llevar un seguimiento de las variables.

Código (asm) [Seleccionar]

include 'c:\fasm\include\win32ax.inc'
entry main
section '.code' code readable executable
main:

invoke MessageBoxA,0,Hello,0,0
push Hello
call len
invoke MessageBoxA,0,0,0,0
mov eax,0
ret

proc len,cad
lea edx,[cad]
invoke MessageBoxA,0,edx,edx,0
mov ecx,0
buc:
cmp edx,0
je salir
inc edx
inc ecx
jmp buc
salir:
mov eax,ecx
ret
endp



section '.data' data readable writeable
        Hello     db   'holamundo',0
        var       rb   256
section '.idata' import data readable
library u32,'user32.dll'
import u32,MessageBoxA,'MessageBoxA'


ayuda, ya se que puede ser desesperante explicarle algo a quien no entiende mucho sobre el tema, pero por favor sean pacientes por cierto uso fasm, lo de offset es tambien valido para fasm?

gracias

bizco

Citar
invoke MessageBoxA,0,eax,0,0
mov ecx,0
buc:
cmp eax,0
je salir
inc eax
jmp buc
salir:

¿que intentas aqui?. la salida de MessageBox es 1 y comparas eax con 0 y la condicion es que ¿incrementas hasta que eax sea 0? la verdad no es por desanimarte pero tio usa la logica, intenta tener una base mas solida y luego empezamos con los demas temas.

ny0x

error de principiante, vengo de c y no estoy acostumbrado a que el valor de retorno se devuelva en un lugar especifico. No me habia dado cuenta, parece ser que lo que yo puse segun para comprobar que el code iba bien me lo echo a perder ;D.
Y nadie puede desanimarme (creo  :rolleyes:) , si yo me propongo algo lo logro aunque me cueste la cordura.
Cuando empece con c estaba peor, no sabia ni que era una variable  :P

P.D Gracias por contestar