[DUDAS] Todas las dudas sobre RadASD + MASM aqui

Iniciado por AleX Inc., 4 Septiembre 2009, 18:45 PM

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

AleX Inc.

Gracias, otra dudita.
Que instrucciones nesecito para realizar multiplicaciones y divisiones?

YST



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

AleX Inc.

La de "imul" me funciono pero no la de "div" ni "idiv" no entiendo porque, solo estaaba probando y escribi:
idiv eax,ebx
claro esta que ya habia moido valores a esos registros pero no me deja compilar.
Que sera??

YST

Código (asm) [Seleccionar]

xor edx,edx
mov eax,9 ;Le pasamos el dividendo
mov edi,3 ;Le pasamos el divisor
idiv edi  ;Dividimos pasandole edi como dividendo
;En eax se devuelve el valor y en edx el resto 


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

AleX Inc.

Gracias, funciono correctamente.
Ahora tengo la duda de porque me salen mal las sumas.
estuve diseñando una calculadora para que sume y todo bien pero al momento de la suma toma los valores como si 1=49 osea si pongo 1+1=98.
Podrias revisar que es lo incorrecto por favor.
ASM:
.elseif eax==WM_COMMAND
mov edx,wParam
.if edx==boton1
invoke GetDlgItemText,hWin,edit1,addr valor1,100
invoke GetDlgItemText,hWin,edit2,addr valor2,100
mov eax,valor1
mov ebx,valor2
add eax,ebx
invoke dwtoa,eax,addr resultado
invoke MessageBox,hWin,addr resultado,addr tittlemsj,MB_OK


INC
.data

msgtittle db "Salir?",0
msgtexto db "Desea salir?",0
tittlemsj db "SUMA",0

.data?(?)
resultado dd ?
valor1 dd ?
valor2 dd ?

YST

#15
Tienes que transformar el ASCII ;)

Mira esta función
Código (asm) [Seleccionar]

;Funcion que pasa ASCII a un DWORD :P
proc StrToInt uses ebx esi, lpStr
       mov     esi,[lpStr]
       mov     ecx,10
       xor     edx,edx
@StrToIntLoop:
       lodsb
       test    al,al
       jz      @StrToIntEnd
       sub     al,'0'
       xor     ebx,ebx
       mov     bl,al
       lea     eax,[edx*2]
       lea     eax,[eax+edx*8]
       lea     edx,[eax+ebx]
       dec     ecx
       jnz     @StrToIntLoop
@StrToIntEnd:
       mov     eax,edx
       ret
endp                


También podrias usar la api GetDlgItemInt para obtener el numero directamente :P

http://msdn.microsoft.com/en-us/library/ms645485%28VS.85%29.aspx

PD: Algo interesante para ti

http://www.ascii.cl/es/


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

AleX Inc.

#16
Ohh, gracias.
La verdad un minuto despues de postear recorde que talvez ocuaba otra instruccion para hacer la convrsion de ASCII a DECIMAL pero antes de probar preferi esperar una respuesta, y creo que estaba en lo correcto, gracias, ahora intento y edito el mensaje para mostrar resultados:-)

EDITO:
Cambie la funcion "GetDlgItemText" por "GetDlgItemInt" pero ahora la me suma cada campo "edit" como "1", osea si escribo en un campo sin importar el numero me muestra la unidad como resultado y si escribo en los dos campos me muestra el numero "2".

Alguien sabe como usar la funcion "CreateProcces"?
lo intente pero no me funciono, me aparece esto en la informacion:
"CreateProcess,lpApplicationName,lpCommandLine,lpProcessAttributes,lpThreadAttributes,bInheritHandles,dwCreationFlags,lpEnvironment,lpCurrentDriectory,lpStartupInfo,lpProcessInformation"
alguien podria explicarme con un ejemplo por favor.

Disculpen tantas molestias.

Eternal Idol

En la MSDN se explica como usar esa funcion y hay codigo de ejemplo, sino Googlea.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

YST

Ejemplo del uso de CreateProcessA
Código (asm) [Seleccionar]

invoke CreateThread , 0, 0,Direccion de la funcion,Parametro para pasar a la función(alternativo),0 , 0;Creamos el hilo para descargar

¿Podrias poner el codigo ? para ver que esta mal que todavia no soy adivino :xD


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

AleX Inc.

Lo hice simple.
solo escribi asi.:
invoke CreateProcces,0,0,addr Ruta,0,0,0
Solo invoke la ruta, sabia que algo andaba mal pero no estoy seguro.