Autor
|
Tema: [AYUDA] No funciona este código (Leído 4,664 veces)
|
tete55
Desconectado
Mensajes: 6
|
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!!! Aquí os dejo el 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
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
¿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
Mensajes: 6
|
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
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
¿Que sentido tiene negarlo? Ahi habia codigo, es evidente. https://foro.elhacker.net/asm/programa_que_calcule_multiplicaciones_asm-t425883.0.htmlBueno, 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.htmlhttps://foro.elhacker.net/asm/libro_de_ensamblador-t255032.0.htmlhttps://foro.elhacker.net/asm/ensambladores_documentacion_herramientas-t393616.0.htmlUn 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.htmlEl 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
Mensajes: 6
|
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 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
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
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
Mensajes: 1.027
|
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
Mensajes: 875
|
Agrego un detalle:Estoy intentando aprender ensamblador en 32 bits 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:push rbp mov rbp, rsp mov eax, dword [rbp+4]
Atención al leer,, y leer primero !!! Intenta limpiar el codigo,, tenes cosas de mas.. Saludos!
|
|
|
En línea
|
|
|
|
|
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,757
|
22 Junio 2008, 23:08 pm
por MANULOMM
|
|
|
Tengo este codigo y no funciona
PHP
|
& eDu &
|
3
|
2,149
|
25 Julio 2008, 16:04 pm
por Novlucker
|
|
|
Por qué no me funciona este codigo?
Desarrollo Web
|
luison
|
0
|
2,469
|
24 Septiembre 2010, 21:57 pm
por luison
|
|
|
Porque no me funciona este codigo
Programación C/C++
|
0xDani
|
3
|
3,619
|
11 Junio 2012, 00:40 am
por 0xDani
|
|
|
Me explican si este código funciona [Bat]
Scripting
|
WIитX
|
2
|
3,669
|
27 Agosto 2012, 07:03 am
por Eleкtro
|
|