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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  problema con la definicion de la variable
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: problema con la definicion de la variable  (Leído 7,149 veces)
robertofd1995

Desconectado Desconectado

Mensajes: 172


Ver Perfil
problema con la definicion de la variable
« en: 8 Mayo 2014, 23:03 pm »

hola a todos , estoy una funcion en asm , es la primera vez que hago algo a este nivel

el metodo lo que tiene que hacer es que dados 4 valores me diga la distancia al objetivo

en c++ seria asi:
Código:
int distanceShipBomb(int xShip, int yShip, int xBomb, int yBomb){	
return max(abs(xShip-xBomb),abs(yShip-yBomb));
}

el problema esta al pasarlo a asemblador , ya hice lo de
extern "C" int distanceShipBomb(int xShip, int yShip, int xBomb, int yBomb);

y cree el archivo bien y eso

el codigo en asemlador que tengo es este :

Código:
 

.386
.model flat, C

.code

PUBLIC distanceShipBomb

distanceShipBomb PROC
 

 ;ARQUITECTURA 86-32 DE INTEL


push esb  ; pointer variable s [la variable que se encargara de ser el puntero ]
mov esb, esp; [hago que mi puntero sea igual al puntero base]

push eax  ; x ship a [meto en el stack la variable a ]


push ebx  ; y ship b [meto en el stack la variable b ]


push ecx  ; x bomb c [meto en el stack la variable c ]


push edx  ; y bomb d [meto en el stack la variable d ]


push eox  ; o =0  [meto en el stack la variable o que sera oara compararlo con 0 ]


inc esb
        inc esb
        inc esb
        inc esb
inc esb
; adjust pointer [incremente el puntero 5 veces , una por cada elemento en el stack]

xor eox , eox ; [hago que eox sea igual a 0]

sub eax,ecx ; [resta a -c]
sub ebx,edx ; [resta b - d]

cmp eax , eox ; [compara a con  0]

JS consequent ;[como estoy comparando numero con signo tengo que mirar que las flags de signed y overflow sean distintas para mirar la operacion a<0]
JNO consequent

jmp next
consequent:  ;[en caso de ser negativo lo paso a positivo]
 NEG eax ;if eap is neggative change sing
next:

JNS consequent2 ; [aqui en ek otro caso que se puede dar que la flag s sea 0 y o =1 ]
JO  consequent2

jmp next2
consequent2:
 NEG ebx ;if eap is neggative change sing
next2:


cmp ebx , eox ;[exactamente lo mismo que lo anterior pero esta vez con la variable b ]
;PD se poco de asemblador pero supongo que para evitar la repeticion se podra hacer una funcion , si me echais os lo agradeceria  

JS consequent3
JNO consequent3

jmp next3
consequent3:
 NEG ebx ;if eap is neggative change sing
next3:

JNS consequent4
JO  consequent4

jmp next4
consequent4:
 NEG ebx ;if eap is neggative change sing
next4:

OR eax,ebx  ; [hago una operacion or para quedarme con el mayor ]

pop eox ; [dejo lmpio el stack de nuevo]
pop edx
pop ecx
pop ebx
pop eax

pop esp

ret ;  [retorno]


distanceShipBomb ENDP ;[fin funcion]

END

el error que me marca una y otra vez es este

Código:
1>------ Operación Compilar iniciada: proyecto: TeamWrok-Winter-2014, configuración: Debug Win32 ------
1>  Assembling Distance.asm...
1>Distance.asm(10): error A2006: undefined symbol : esb
1>Distance.asm(11): error A2006: undefined symbol : esb
1>Distance.asm(24): error A2006: undefined symbol : eox
1>Distance.asm(25): error A2006: undefined symbol : eox
1>Distance.asm(29): error A2006: undefined symbol : ESB
1>Distance.asm(31): error A2006: undefined symbol : eox
1>Distance.asm(36): error A2006: undefined symbol : eox
1>Distance.asm(55): error A2006: undefined symbol : eox
1>Distance.asm(75): error A2006: undefined symbol : eox
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\BuildCustomizations\masm.targets(49,5): error MSB3721: El comando "ml.exe /c /nologo /Zi /Fo"Debug\Distance.obj" /W3 /errorReport:prompt  /TaDistance.asm" salió con el código 1.
========== Compilar: 0 correctos, 1 incorrectos, 0 actualizados, 0 omitidos ==========

os agradeceria un monton que me pudieseis ayudar con el problema, llevo peleando con el toda la tarde y no he sido capaz

Un saludo y gracias


« Última modificación: 9 Mayo 2014, 13:31 pm por robertofd1995 » En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: problema con la definicion de la variable
« Respuesta #1 en: 9 Mayo 2014, 11:23 am »

¿Incorrecto nombramiento de los registros? ( esb, eox, ESB, etc )


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


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


Ver Perfil WWW
Re: problema con la definicion de la variable
« Respuesta #2 en: 9 Mayo 2014, 11:53 am »

Ademas: ¿inc ESB+ 5? inc solo incrementa en 1 (es ++ de C/C++), tenes que usar add para sumar 5.
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
robertofd1995

Desconectado Desconectado

Mensajes: 172


Ver Perfil
Re: problema con la definicion de la variable
« Respuesta #3 en: 9 Mayo 2014, 13:30 pm »

¿Incorrecto nombramiento de los registros? ( esb, eox, ESB, etc )

si perdon se me olvido modificarlo para que todos se llamasen igual ,lo acabo de modificar ahora

pero la pregunta esta en que si todos se llaman igual , porque me siguen saltando las alertas ?

es decir como tengo que llamar a los registros etc... , un saludo y muchas gracias
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


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


Ver Perfil WWW
Re: problema con la definicion de la variable
« Respuesta #4 en: 9 Mayo 2014, 13:37 pm »

ebp existe, esb no, eox no existe tampoco ...

http://en.wikipedia.org/wiki/X86#x86_registers

¿De donde estas sacando este codigo?
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
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: problema con la definicion de la variable
« Respuesta #5 en: 9 Mayo 2014, 15:13 pm »

si perdon se me olvido modificarlo para que todos se llamasen igual ,lo acabo de modificar ahora

pero la pregunta esta en que si todos se llaman igual , porque me siguen saltando las alertas ?

es decir como tengo que llamar a los registros etc... , un saludo y muchas gracias
No es que todos los registros se deben llamar de la misma manera. Lo Mejor sera aprender a programar en ASM leyendo algún buen libro.
En línea

robertofd1995

Desconectado Desconectado

Mensajes: 172


Ver Perfil
Re: problema con la definicion de la variable
« Respuesta #6 en: 9 Mayo 2014, 15:42 pm »

a ver os explico , tengo una asignatura en la uni en la que damos algo de asm , el caso es que para empezar (no vamos a dar asm , en el resto de la carrera , simplemente es para entender como se podria hacer y eso) usabamos un ordenador teorico que ellos habian construido , es decir para un procesador teorico que ellos habian creado

para estudiar y el examen practico y demas lo hicimos para esa arquitectura , el problema es que nos mandaron al final un trabajo para arquitectura 86-32 y no nos dieron tablas de equivalencia ni nada y fue un follon

por ej el nombre de los registros en el computador teorico eran r1 ,r2 ,..r6 y r7 que era el puntero

la resta era sub r1,r2,r3 siendo r1 el registro donde lo guardabas , etc... vaya que cambiaban un monton de cosas y no nos informaron bien

pero bueno me puse a buscar por internet como se tenian que llamar los registros etc.. y ya se como funciona y ya me funciona el proyecto

gracias de todas maneras , aunque hay una pequeña cosa que me paso y no se a que se debe

que diferencia hay entre esto
Código:

sub eax,ecx ; [resta a -c]

JS consequent ;[como estoy comparando numero con signo tengo que mirar que las flags de signed y overflow sean distintas para mirar la operacion a<0]
jmp next
consequent:  ;[en caso de ser negativo lo paso a positivo]
  NEG eax ;if eap is neggative change sing
next:

sub ebx,edx ; [resta b - d]

JS consequent2
jmp next2
consequent2:
  NEG ebx ;if eap is neggative change sing
next2:


y esto :

Código:

sub eax,ecx ; [resta a -c]
sub ebx,edx ; [resta b - d]

JS consequent ;[como estoy comparando numero con signo tengo que mirar que las flags de signed y overflow sean distintas para mirar la operacion a<0]
jmp next
consequent:  ;[en caso de ser negativo lo paso a positivo]
  NEG eax ;if eap is neggative change sing
next:



JS consequent2
jmp next2
consequent2:
  NEG ebx ;if eap is neggative change sing
next2:


con el primer code me funciona, con el segundo no y no entiendo el porque
porque en el if , no toco el registro del otro valor asi que no se a que debe

un saludo y gracias por la ayuda
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: problema con la definicion de la variable
« Respuesta #7 en: 9 Mayo 2014, 15:53 pm »

Pues si te fijas la unica diferencia entre el primer código y el segundo son dos linea nada más o más bien
el cambio de posición de la instruccion en la linea 9 del primer código en el segundo código además también
podes depurar el código sino ya sabras tu como va eso en el procesador emulado o teorico como sea.
En línea

robertofd1995

Desconectado Desconectado

Mensajes: 172


Ver Perfil
Re: problema con la definicion de la variable
« Respuesta #8 en: 11 Mayo 2014, 00:47 am »

ya se que solo cambia la poscion , lo que me preguntaba es q si simplemente solo cambia la posicion ,porque una si va y la otra no
En línea

xv0


Desconectado Desconectado

Mensajes: 1.027



Ver Perfil
Re: problema con la definicion de la variable
« Respuesta #9 en: 11 Mayo 2014, 05:33 am »

Si especificas el error mucho mejor, yo el unico problema que le veo al code numero dos, es que si eax es negativo SF se pondra en 1, pero si luego se resta ebx y este es positivo la bandera SF se pondra en 0 y el jump no se ejecutara.

Asi que no tiene mucho sentido eso, no?

Un saludo.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema de definición de imagen al pasar a video cd
Multimedia
Martillo 2 2,615 Último mensaje 16 Marzo 2005, 04:10 am
por Songoku
Modificar variable afuera de una definición
Scripting
laideker 3 2,808 Último mensaje 30 Abril 2011, 04:35 am
por leogtz
¿Como controlar la cantidad de caracteres en la definicion de una variable?
Scripting
the_Avenger 2 3,925 Último mensaje 28 Septiembre 2011, 23:12 pm
por the_Avenger
Problema con variable de sesion y variable de conexion
PHP
Vaagish 9 6,328 Último mensaje 19 Marzo 2013, 22:37 pm
por Vaagish
Tengo un simple problema con una definición
Hacking
UnaiiM 3 3,403 Último mensaje 26 Febrero 2020, 13:07 pm
por UnaiiM
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines