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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  [AYUDA] No funciona este código
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [AYUDA] No funciona este código  (Leído 4,348 veces)
tete55

Desconectado Desconectado

Mensajes: 6


Ver Perfil
[AYUDA] No funciona este código
« en: 9 Diciembre 2014, 12:10 pm »

He programado esta operación y no me funciona.
Alguien que entienda me la puede echar un ojo para ver que esta mal o si esta incompleto?
Muchas gracias!!! :D :D

Aquí os dejo el código:



Código:
;X=A *B *C /100
segment .data
segment .bss
a resb 4
b resb 4
c resb 4
resultado resb 4
segment .text
global x
x:
push rbp
mov rbp, rsp

mov rax, qword [rbp+16]
mov qword [resultado], rax
mov rax, qword [rbp+24]
mov qword [c], rax
mov rax, qword [rbp+32]
mov qword [b], rax
mov rax,qword[rbp+40]
mov qword[a],rax

mov eax,[c]
mov ebx,[b]
mov ecx,[a]
imul eax,ebx
imul eax,ecx
mov dword[resultado],ecx

mov [resultado],rbx
cdq
mov ecx,100
idiv ecx
mov ecx,eax
mov dword[resultado],ecx
push qword[resultado]

mov rsp,rbp
pop rbp               
ret                   





En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


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


Ver Perfil WWW
Re: [AYUDA] No funciona este código
« Respuesta #1 en: 9 Diciembre 2014, 13:01 pm »

¿Que estas tratando de hacer? ¿Con que ensamblas eso? ¿Sabes que es codigo de 64 bits, no?

Y lo mas importante de todo:
¿Es esto una tarea y por eso borraste el codigo en el hilo anterior y creaste uno nuevo?


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
tete55

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: [AYUDA] No funciona este código
« Respuesta #2 en: 9 Diciembre 2014, 14:11 pm »

No he borrado ningún código de otro sitio, sino que he creado este nuevo post con el código completo para haber si alguien me podía ayudar

Estoy intentando aprender ensamblador en 32 bits, me he puesto a realizar la operación de multiplicar y dividir.

El programa en sí realiza la operación:  x = (a * b * c) / 100 lo estoy ensamblando con nasm pero no me da el resultado de la operación y no se por que.

Por todo esto quería que alguien que sepa del tema me diga en que me he equivocado y así aprender

Gracias
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


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


Ver Perfil WWW
Re: [AYUDA] No funciona este código
« Respuesta #3 en: 9 Diciembre 2014, 15:06 pm »

¿Que sentido tiene negarlo? Ahi habia codigo, es evidente.

https://foro.elhacker.net/asm/programa_que_calcule_multiplicaciones_asm-t425883.0.html

Bueno, como te decia antes ese codigo es de 64 bits, los registros con el prefijo R son de 64 bits. Esto es algo elemental asi que te recomiendo LEER (lo ideal es con un buen libro) antes de volver a preguntar.

https://foro.elhacker.net/asm/entry_point-t256455.0.html
https://foro.elhacker.net/asm/libro_de_ensamblador-t255032.0.html
https://foro.elhacker.net/asm/ensambladores_documentacion_herramientas-t393616.0.html

Un poco del codigo:

mov rax, qword [rbp+16] <<
Me imagino que aca esperas encontrar argv[1]. ¿Cual es el tipo de argv?

mov qword [resultado], rax    <<
QWORD es una palabra CUADRUPLE, una palabra - WORD - son 2 bytes, reservaste 4 bytes en total, suficiente para un DWORD no para un QWORD.

ver 3.2.2 RESB and friends: Declaring Uninitialised Data
http://www.posix.nl/linuxassembly/nasmdochtml/nasmdoc3.html

El resto mas o menos deberia ir bien aunque no entiendo el sentido de empujar a la pila resultado, pasar de eax a ecx el cociente para despues asignarlo en resultado, ni lo siguiente:
   mov dword ptr [resultado],ecx ;para que queres poner en resultado el valor de A
   mov qword ptr [resultado],rbx ;idem con RBX que puede no ser identico al valor de B

Seran copy/paste supogno ... en fin, la clave esta en como intentas recibir los parametros del programa.
« Última modificación: 9 Diciembre 2014, 15:11 pm por Eternal Idol » 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
tete55

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: [AYUDA] No funciona este código
« Respuesta #4 en: 10 Diciembre 2014, 17:35 pm »

Muchas gracias por la información aportada ya que gracias a ello he modificado varias cosas del código pero me sigue sin realizar la fórmula, si son tan amables de aportar alguna idea lo agradecería mucho.
Lo que debería hacer el programa es la operación Resultado = (a * b * c )/100

Muchas gracias a todos y perdonen las molestias  :D :D :D

Código:
segment .data

segment .bss
a resb 4
  b resb 4
c resb 4
  resultado resb 4

segment .text

global x
x:
push rbp
mov rbp, rsp

mov eax, dword [rbp+4] ;efectuado una llamada y metido en la pila rbp, asi que el primer numero esta en rbp + 4
mov dword [resultado], eax
mov eax, dword [rbp+8]
mov dword [c], eax
mov eax, dword [rbp+16]
  mov dword [b], eax
  mov eax,dword[rbp+32]
mov dword[a],eax

mov eax,[c]
mov ebx,[b]
mov ecx,[a]
imul eax,ebx
mov ebx,ecx
imul eax,ebx
mov dword[resultado],eax

mov [resultado],rbx
cdq
mov ecx,100
idiv ecx
mov ecx,eax
mov dword[resultado],ecx
;push dword[resultado]

mov rsp,rbp
pop rbp               
ret                     
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


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


Ver Perfil WWW
Re: [AYUDA] No funciona este código
« Respuesta #5 en: 10 Diciembre 2014, 17:44 pm »

No mire con atencion el codigo por una sencilla razon: seguis teniendo el mismo problema conceptual con los parametros.

Mira lo que hay realmente en la pila, presta atencion al tipo de argv:
http://www.gnu.org/software/libc/manual/html_node/Program-Arguments.html
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
xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: [AYUDA] No funciona este código
« Respuesta #6 en: 10 Diciembre 2014, 20:44 pm »

Ese code esta 100% para reciclar, no te ofendas pero haces cosas sin sentido alguno ya te lo comento @EI.

Por que no usas un sistema fastcall? Usas los registros para pasar parametros, ya que estas en x64 tienes los registros r8-15 por descontado, ojo que algunos tienen funciones y podrian darte problemas.

Ejemplo, que r13 == a, r14 == b, r15 == c, podrian ser punteros o lo que quieras.

Tambien por otra parte, cuando chequeas los posibles Overflows? Para algo esta esa bandera, podrias tener datos erroneos por culpa de cosas como esa.

Un saludo.
En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: [AYUDA] No funciona este código
« Respuesta #7 en: 10 Diciembre 2014, 22:36 pm »

Agrego un detalle:


Citar
Estoy intentando aprender ensamblador en 32 bits

Citar
Bueno, como te decia antes ese codigo es de 64 bits, los registros con el prefijo R son de 64 bits. Esto es algo elemental asi que te recomiendo LEER

Codigo nuevo:

Código
  1. push rbp
  2.  mov rbp, rsp
  3.  
  4.  mov eax, dword [rbp+4]


Atención al leer,, y leer primero !!! Intenta limpiar el codigo,, tenes cosas de mas..

Saludos!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Este codigo en C# no funciona (es simple)
.NET (C#, VB.NET, ASP)
& eDu & 1 2,617 Último mensaje 22 Junio 2008, 23:08 pm
por MANULOMM
Tengo este codigo y no funciona
PHP
& eDu & 3 1,978 Último mensaje 25 Julio 2008, 16:04 pm
por Novlucker
Por qué no me funciona este codigo?
Desarrollo Web
luison 0 2,267 Último mensaje 24 Septiembre 2010, 21:57 pm
por luison
Porque no me funciona este codigo
Programación C/C++
0xDani 3 3,294 Último mensaje 11 Junio 2012, 00:40 am
por 0xDani
Me explican si este código funciona [Bat]
Scripting
WIитX 2 3,422 Último mensaje 27 Agosto 2012, 07:03 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines