elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Ayuda con el ejercicio T_T
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con el ejercicio T_T  (Leído 6,991 veces)
JorGe[xD]

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Ayuda con el ejercicio T_T
« en: 18 Septiembre 2009, 19:23 pm »

Hola como estan .

Mi pequeño gran problema es ...

Que cuando compilo en RadASM ... me sale error

Ejerc2IV.asm(32) : error A2033: invalid INVOKE argument : 2
Ejerc2IV.asm(32) : error A2114: INVOKE argument type mismatch : argument : 2

Quisiera saber como solucionarlo ... o que me dean una pista  :xD una explicacion

Lo que quiero hacer es :

Crear una calculadora  que sume  2 cantidades, debe tener  3 campo edit
donde:

El primer y segundo campo edit.-   se ingresara los  valores que se va a sumar.
El tercer campo edit.- mostrara el resultado.
 
Ademá s debe tener 3 botones con las siguientes funciones:
 
El primer botón.- Debe hacer la suma.
El segundo botón.-  Debe borrar todo los campos edit.
El tercer botón.- cerrar la ventana.
 
Para desarrollar este programa es necesario usar lo siguiente:
 
1.- la funciones atodw y dwtoa descritas en el capitulo III.
2.- Debes usar la instrucción add (suma).
 
Se pide el resultado en decimales, la idea es algo parecido a esta:


 
Archivo Ejercicio2VI.ASM :

Citar
.386
.model flat, stdcall  ;32 bit memory model
option casemap :none ;case sensitive

include Ejerc2IV.inc

.code

start:

   invoke GetModuleHandle,NULL
   mov      hInstance,eax

   invoke InitCommonControls
   invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr DlgProc,NULL
   invoke ExitProcess,0


DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM

   mov      eax,uMsg
   .if  eax==WM_INITDIALOG
  
   .elseif  eax==WM_COMMAND

   mov edx,wParam
   .if  eax==Boton01 ; aqui comparo si e presionado el Boton01 que seria Sumar
;si es asi ... realiza la siguiente funcion

      
     mov ebx,Edit01
    mov eax,Edit02
    add ebx,eax
      invoke  dwtoa,ebx,addr Edit03 ; aqui dice que esta el error ...

 
   .elseif  edx==Boton02 ; este seria el boton de Limpiar pero no se como se hace


   .elseif  edx==Boton03 ; el boton Salir
   invoke  SendMessage,hWin,WM_CLOSE,0,0
   .endif

   .elseif  eax==WM_CLOSE
       invoke  EndDialog,hWin,0
    .else
      mov      eax,FALSE
      ret
    .endif
   mov      eax,TRUE
  ret

DlgProc endp

end start

Archivo Ejercicio2VI.inc :
Citar
include windows.inc
include kernel32.inc
include user32.inc
include Comctl32.inc
include shell32.inc
include masm32.inc
include rvlcnrand.Inc

includelib kernel32.lib
includelib user32.lib
includelib Comctl32.lib
includelib shell32.lib
includelib masm32.lib
includelib rvlcnrand.lib

DlgProc         PROTO   :HWND,:UINT,:WPARAM,:LPARAM

.const



IDD_DIALOG1    equ     101
Edit01   equ       1001
Edit02   equ       1002
Edit03   equ         1003

Boton01     equ    1004
Boton02     equ    1005
Boton03     equ    1006

;#########################################################################
.data



.data?

buffer db 225 dup (?)
hInstance         dd ?

;#########################################################################


Desde ya Gracias :)

PD : Estoy estudiando los manuales de RadASM + MASM ... Ejercicio 2 del Capitulo VI.



« Última modificación: 19 Septiembre 2009, 00:57 am por JorGe[xD] » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.935


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Ayuda con el ejercicio T_T
« Respuesta #1 en: 18 Septiembre 2009, 21:48 pm »

Edit03 es un ID (un numero), no podes usar addr con el. Si lo que queres es obtener el valor de esos Edits podes usar GetDlgItemText (ahora ebx cuando llamas a dwtoa siempre es 1001 + 1002 = 2003).


En línea

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

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Ayuda con el ejercicio T_T
« Respuesta #2 en: 18 Septiembre 2009, 23:29 pm »

Intenta cambiando estos valores:
Código:
  .if  eax==Boton01
       
     mov ebx,Edit01
    mov eax,Edit02
    add ebx,eax
      invoke  dwtoa,ebx,addr Edit03
Por este:
Código:
.if  edx==Boton01
mov ebx,Edit01
mov eax,Edit02
add ebx,eax
invoke  dwtoa,ebx,Edit03
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.935


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Ayuda con el ejercicio T_T
« Respuesta #3 en: 18 Septiembre 2009, 23:31 pm »

1001 + 1002 + 1003  ;)
En línea

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
JorGe[xD]

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: Ayuda con el ejercicio T_T
« Respuesta #4 en: 19 Septiembre 2009, 00:50 am »

Edit03 es un ID (un numero), no podes usar addr con el. Si lo que queres es obtener el valor de esos Edits podes usar GetDlgItemText (ahora ebx cuando llamas a dwtoa siempre es 1001 + 1002 = 2003).

pero GetdlgItemtext no es para cadenas de texto ?

osea 1001 + 1002 = 10011002

:S

Me confundo mas :xD
En línea

YST


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
Re: Ayuda con el ejercicio T_T
« Respuesta #5 en: 19 Septiembre 2009, 02:16 am »

Para sacar numeros de los edit mejor usa GetDlgInt :P

http://msdn.microsoft.com/en-us/library/ms645485(VS.85).aspx
En línea



Yo le enseñe a Kayser a usar objetos en ASM
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.935


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Ayuda con el ejercicio T_T
« Respuesta #6 en: 19 Septiembre 2009, 09:02 am »

Si, pero siempre es mejor que usar el ID del control y despues sacar el numero :D Tambien podes usar la funcion que menciono YST que hace eso mismo internamente pero si usas dwtoa supongo que no es el objetivo (tambien podrias usar SetDlgItemInt y no dwtoa en ese caso ...).

Tenes que obtener los dos primeros numeros y sumarlos, el valor de Edit03 lo tenes que poner vos de acuerdo al resultado de la suma y para eso vas a tener que usar un buffer (donde escribe dwtoa) y SetDlgItemText.
En línea

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
JorGe[xD]

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: Ayuda con el ejercicio T_T
« Respuesta #7 en: 22 Septiembre 2009, 01:09 am »

Bueno es que me confundi mucho :S

por que si lees en una parte dice :
Citar
Para desarrollar este programa es necesario usar lo siguiente:
 
1.- la funciones atodw y dwtoa descritas en el capitulo III.
2.- Debes usar la instrucción add (suma).

Asi que no consideraba mas funciones ... :S ...

PD : YST ... firefox no me deja entrar a Paginas de Microsoft :S :S :S ...

Gracias a los dos

EDIT : Probe con Opera , IE  y pasa lo mismo .. me tira error al visitar cualquier pagina raiz  de Microsoft
« Última modificación: 22 Septiembre 2009, 01:13 am por JorGe[xD] » En línea

AleX Inc.

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Ayuda con el ejercicio T_T
« Respuesta #8 en: 22 Septiembre 2009, 02:30 am »

Mmm.
Talvez podrias crear una funcion llamada "Suma", creo que describen en esos tutoriales como hacerla con ejemplo de una resta pero no estoy seguro.
Creo que son asi pero no estoy seguro:
Código:
Suma proc cantidad1:DWORD,cantidad2:DWORD
mov eax,cantidad1
add eax,cantidad2
.inc
Código:
Suma PROTO :DWORD,:DWORD
Y por ultimo seria cambiar estas funciones:
Código:
mov edx,wParam
.if  edx==Boton01
invoke Suma,Edit01,Edit02 ;esta es la funcion que creamos, aqui se supone que realiza la suma de ambas cantidades
invoke dwtoa eax,Edit03 ;Creo que asi debes mostrar el resultado (Inseguro)
Y esto lo podrias cambiar ya que talvez cause error en el programa:
Código:
.elseif  edx==Boton03 ; el boton Salir
   invoke  SendMessage,hWin,WM_CLOSE,0,0
Por este codigo:
Código:
.elseif  edx==Boton03 ; el boton Salir
invoke EndDialog,hWin,0
Estoy algo confundido por la escuela que no estoy seguro sobre como crear la funcion "Suma" pero puedes revisar el capitulo mencionado (creo que el 2) y por favor alguien de los buenos en ASM pueda corregirme a mi tambien ya que soy nuevo en ASM. :D
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.935


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Ayuda con el ejercicio T_T
« Respuesta #9 en: 22 Septiembre 2009, 08:07 am »

Asi que no consideraba mas funciones ... :S ...

A la fuerza vas a tener que usar alguna mas, de alguna manera tenes que obtener el numero (si es que lo es je) que el usuario escribe en el Edit.

AleX Inc. : es lo mismo de antes pero en una funcion, la clave es que no hay que usar los identificadores (valores constantes) sino lo que el usuario haya escrito.

La cosa vendria a ser algo asi (depuralo que no tengo el Ejerc2IV.inc ni muchas ganas tampoco):

Código
  1. invoke GetDlgItemInt, hWin, Edit01, 0, 0
  2. mov ebx, eax
  3. invoke GetDlgItemInt, hWin, Edit02, 0, 0
  4. add eax, ebx
  5. ;ahi tenes la suma correcta en eax
  6. invoke dwtoa, ebx, buffer

PD. Al final ahora me doy cuenta de que ya tenes un buffer declarado en la sección de datos  ;D
En línea

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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines