Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: Flamer en 28 Abril 2012, 01:40 am



Título: error al imprimir
Publicado por: Flamer en 28 Abril 2012, 01:40 am
Hola amigos tengo una falla en mi codigo en masm quiero imprimir un numero digitado por el usuario este es el codigo

Citar
.code
start:
   call main
   exit
main proc
   local num1:dword
   mov num1,input("dame un numero : ")
   mov eax,num1
   print str$(eax)

pero tiene un error me imprime la direccion de memoria de el valor no me imprime el valor digitado ejemplo
numero digitado 5 y me imprime 4206640
cual es mi error
a otra cosa que libro de masm me recomiendan y donde lo bajo (en español)
saludos flamer


Título: Re: error al imprimir
Publicado por: Flamer en 29 Abril 2012, 01:37 am
hola amigos ya lo solusione
Citar
local num1:dword
mov num1,input("dame el numero")
print (num1)
y listo el problema es pedir otro numero y sumarlos le pongo
Citar
add num1,num2
y me marca error
bueno saludos flamer


Título: Re: error al imprimir
Publicado por: x64core en 29 Abril 2012, 09:05 am
eso es cosa de conceptos basicos, debido que la CPU trabaja con los buses de control donde son pasados
los datos no podes usar dos posiciones de memoria, tenes que usar un registro de 8,16,32,64 bits dependiendo
del tamaño de operando de memoria que es o podes usar las instruccion MOVZ .

por cierto pone el codigo completo, creo que usas macros, porque?
macros en ASM para eso programo en un lenguaje de alto nivel


Título: Re: error al imprimir
Publicado por: Flamer en 29 Abril 2012, 17:59 pm
eso es todo el codigo lo demas son include lo de las librerias
perdona mi ignorancia pero nunca e usado masm y nose si estoy usando macros pero se genera el exe compilandolo en macros generas exe
saludos y perdona mi ignorancia


Título: Re: error al imprimir
Publicado por: x64core en 29 Abril 2012, 19:49 pm
eso es todo el codigo lo demas son include lo de las librerias
perdona mi ignorancia pero nunca e usado masm y nose si estoy usando macros pero se genera el exe compilandolo en macros generas exe
saludos y perdona mi ignorancia

pues si, eso queria ver, que librerias usas...
bueno jugando un poco con la macro porque no encontre la documentacion :|
devuelve el puntero a los datos y no es necesario usar la Str$
con solo que hagas esto te imprime porque la print obtiene el puntero:

         mov num1,input("dame un numero : ")
         mov eax,num1
         print eax

pero la macro input parece que no te guarda el caracter nullo dentro de la cadena solamente lo escribe, talves alveces funcione
porque en el espacio de memoria donde se encuntre el dato que escribiste, cerca solo se encuentren valores a 0, pero
lo mas correcto es seria hacerlo así:

         mov    num1,input("dame un numero : ")
         mov   eax,num1
         print    eax
         print  chr$(0)

escribimos el caracter nullo




Título: Re: error al imprimir
Publicado por: Flamer en 30 Abril 2012, 00:47 am
hola rhl ya pude como dije antes imprimir el numero dado por el usuario el problema ahora es sumarlo con otro numero dado por el usuario
pido el numero lo guardo en num2 y lo sumo con el comando add num1,num2 y me marca error no en tiendo por que
pero yo creo que ya me sali del nombre del tema pido disculpas si es que tengo que abrir un tema para preguntar eso
saludos


Título: Re: error al imprimir
Publicado por: x64core en 30 Abril 2012, 06:37 am
entonces despues de obtener el puntero has esto:


mov reg32,dword ptr [puntero]
add reg32,sumando
resultado = reg32


Título: Re: error al imprimir
Publicado por: Flamer en 30 Abril 2012, 18:00 pm
boy a calarlo
reg32 es una variable
el puntero es la direcion de memoria donde se al masena el numero correcto o estoy mal
saludos

EI: juntando mensajes.

gracias RHL ya pude sumar los numeros
el problema es otro pero yo lo resuelvo
gracias por tu ayuda
saludos flamer


Título: Re: error al imprimir
Publicado por: x64core en 1 Mayo 2012, 02:01 am
reg32 deberia haber sido un registro de 32 bits, puntero, una variable o un registro donde conteniera el puntero no deberia
ser un inmediato