Autor
|
Tema: Sumar eax i ebx (Leído 7,062 veces)
|
E.P.I.
Desconectado
Mensajes: 346
elprogramadorinformatico [E.P.I.]
|
Hola, acabo de empezar a aprender ASM, hace 20 minutos, y estoy con un ejercicio de E0N... que el registro EAX tenga el valor 2 i el registro EBX el valor 5 y, que se sumen, y el valor quede en EAX... después POR MI CUENTA quiero mostrar el resultado con un MessageBoxA(), pero crashea, cuando acaba de ensamblar: include 'win32ax.inc' .code start: mov eax,2 mov ebx,5 add eax,ebx invoke MessageBoxA,0,eax,"suma",0 invoke ExitProcess,0 .end start
¿Alguna solución? Muchas gracias.
|
|
|
En línea
|
La verdad nos hará libres
|
|
|
MCKSys Argentina
|
Hola! Craseha porque debes pasarle un puntero a una cadena a MessageBox, y tu le estas pasando (como puntero) el valor 7. Osea, le estás diciendo a la función, que la cadena que quieres mostrar, se encuentra en la posición de memoria 7. Una forma de lograr lo que quieres hacer, sería: include 'win32ax.inc' ;incluimos la libreria de MASM include \masm32\include\masm32.inc includelib \masm32\lib\masm32.lib
;definimos una sección de datos donde guardaremos el resultado de la suma, pero convertido en cadena de caracteres ;esta sección contendrá los datos NO inicializados .data? miCadena db 0Ah dup (?)
;sección de datos inicializados .data tituloMensaje db "suma",0
.code start: mov eax,2 mov ebx,5 add eax,ebx ;dwtoa convierte un DWORD en una cadena value to an ascii ;declaracion: dwtoa proc public uses esi edi dwValue:DWORD, lpBuffer:DWORD invoke dwtoa, eax, addr miCadena invoke MessageBoxA,0,addr miCadena,addr tituloMensaje,0 invoke ExitProcess,0 .end start
Saludos!
|
|
|
En línea
|
MCKSys Argentina "Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."
|
|
|
E.P.I.
Desconectado
Mensajes: 346
elprogramadorinformatico [E.P.I.]
|
¡Gracias! Pero el problema es que quiero aprender FASM y supongo que incluyendo MASM... hay alguna solución con sólo FASM?
|
|
|
En línea
|
La verdad nos hará libres
|
|
|
[Zero]
Wiki
Desconectado
Mensajes: 1.082
CALL DWORD PTR DS:[0]
|
include 'win32ax.inc' .code start: mov eax,2 mov ebx,5 add eax,ebx ;Guardo eax en la pila push eax ;Reservo memoria y guardo en puntero a esa memoria en ebx invoke GlobalAlloc,GPTR,1024 mov ebx,eax ;Recupero eax de la pila pop eax ;Guardo en ebx un puntero que apunta hacia eax convertido en cadena invoke wsprintfA,ebx,"%d",eax invoke MessageBoxA,0,ebx,"suma",0 invoke ExitProcess,0 .end start
Saludos
|
|
|
En línea
|
“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza. Nietzsche
|
|
|
E.P.I.
Desconectado
Mensajes: 346
elprogramadorinformatico [E.P.I.]
|
Gracias... voy a probarlo con HeapAlloc.
|
|
|
En línea
|
La verdad nos hará libres
|
|
|
RAID-MAM
Desconectado
Mensajes: 58
|
include 'win32ax.inc' .code start: mov eax,2 mov ebx,5 add eax,ebx ;Guardo eax en la pila push eax ;Reservo memoria y guardo en puntero a esa memoria en ebx invoke GlobalAlloc,GPTR,1024 mov ebx,eax ;Recupero eax de la pila pop eax ;Guardo en ebx un puntero que apunta hacia eax convertido en cadena invoke wsprintfA,ebx,"%d",eax invoke MessageBoxA,0,ebx,"suma",0 invoke ExitProcess,0 .end start
Saludos y la pila te la metes por el orto ? Restaura la pila luego del wsprintf con cinvoke en ves de invoke . Mucha memoria para un numero que cabe en 2 bytes y luego no usas GLobalFree :S
|
|
|
En línea
|
|
|
|
[Zero]
Wiki
Desconectado
Mensajes: 1.082
CALL DWORD PTR DS:[0]
|
y la pila te la metes por el orto ? Restaura la pila luego del wsprintf con cinvoke en ves de invoke . Mucha memoria para un numero que cabe en 2 bytes y luego no usas GLobalFree :S No tiene sentido liberar memoria si nanosegundos despues haces un ExitProcess . Lo de la pila tienes razón: Note It is important to note that wsprintf uses the C calling convention (_cdecl), rather than the standard call (_stdcall) calling convention. As a result, it is the responsibility of the calling process to pop arguments off the stack, and arguments are pushed on the stack from right to left. In C-language modules, the C compiler performs this task.
include 'win32ax.inc' .code start: ;Reservo memoria y guardo en puntero a esa memoria en ebp ;¬¬' sub esp,2 mov ebp,esp mov eax,2 mov ebx,5 add eax,ebx ;Guardo en ebx un puntero que apunta hacia eax convertido en cadena invoke wsprintfA,ebp,"%d",eax ;¬¬' add esp,0x0C invoke MessageBoxA,0,ebp,"suma",0 add esp,2 ret .end start
Saludos
|
|
« Última modificación: 22 Marzo 2010, 06:41 am por Hacker_Zero »
|
En línea
|
“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza. Nietzsche
|
|
|
RAID-MAM
Desconectado
Mensajes: 58
|
y el pobre EBP no los restauras ? No lo digo por el codigo si no por si copia el pedazito de codigo
|
|
|
En línea
|
|
|
|
[Zero]
Wiki
Desconectado
Mensajes: 1.082
CALL DWORD PTR DS:[0]
|
y el pobre EBP no los restauras ? No lo digo por el codigo si no por si copia el pedazito de codigo NO!, me gusta ebp sin restaurar
|
|
|
En línea
|
“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza. Nietzsche
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Sumar productos sin talla
Desarrollo Web
|
nobo
|
2
|
2,218
|
12 Febrero 2012, 14:24 pm
por nobo
|
|
|
Sumar variables
PHP
|
z3nth10n
|
8
|
4,409
|
7 Junio 2012, 20:55 pm
por z3nth10n
|
|
|
[Soporte rápido] Sumar ID consecutiva.
Desarrollo Web
|
z3nth10n
|
2
|
2,571
|
6 Julio 2012, 16:21 pm
por z3nth10n
|
|
|
Sumar dos Textbox
« 1 2 »
.NET (C#, VB.NET, ASP)
|
SγиtαxEяяoя
|
11
|
12,716
|
14 Junio 2013, 08:20 am
por Eleкtro
|
|
|
Sumar horas más de 24 en access
Programación Visual Basic
|
hispapo
|
2
|
7,052
|
3 Agosto 2013, 11:14 am
por hispapo
|
|