FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
||||
|
||||
ASSEMBLER en JAVA
Hola Amigos. bueno me encuentro haciendo una transcripcion de una parte de un programa desarrollado en delphi a java.
a los golpes y con mucho trabajo vengo bien. hasta que me he topado con lo siguiente..
Este codigo En ASSEMBLER. El problema es.. es posible y utilizar codigo assember en javA? If True Como? Muchas gracias. |
#2
|
|||
|
|||
Hola
Tal vez esta página te ayude de algo. http://today.java.net/pub/a/today/20...from-java.html Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#3
|
||||
|
||||
gracias egostar!!, mañana me voy a tomar el trabajo de leerla completita y bien detalladamente porque por una mirada rapida que le di. no entendi un pomo jejeje
saludos y gracias |
#4
|
||||
|
||||
El enlace que te muestra egostar, aconseja utilizar otro lenguaje (MASM) para crear una librería dinamica que contenga las funciones en ASM que requieres y luego exportar dichos métodos en JAVA. Es posible hacer lo mismo con Delphi; creas una DLL pegas la funcion que quieres exportar (ROL2) la defines como stdcall y la exportas. Pero creo que un simple ROL 2 no amerita tanto esfuerzo:
Código:
private char ROL2(char Value) { return (Value << 2) | (Value >> 6); } |
#6
|
||||
|
||||
Bueno la funcion anterior que les comente no funciona bien debido a que no completa los 8 bits (es decir no rellena con ceros entonces da un error importante)
cHacKall hice una modificacion a lo que me posteaste
Cambie tel Tipo de dato por Byte. pero de todas maneras sigo teniendo este error Cita:
sabrias decirme a que se debe? gracias |
#7
|
||||
|
||||
Aunque mi definicion no sea la que vayas a leer en un libro te explico con mis palabras lo que sucede; el compilador esta realizando un casting implicito debido a la diferencia en los tipos de datos (entre el resultado de la operacion y el tipo retornado), los cuales varian en 24 bits y dicha diferencia puede representar una perdida de datos y por ende una falla en la presicion del resultado; como para nuestros fines solo nos interesa un ROL de 8 bits y estamos concientes que "no pasa nada" prueba ésto:
Código:
private static byte ROL2(byte Value) { return (byte)((Value << 2) | (Value >> 6)); } Última edición por cHackAll fecha: 20-10-2008 a las 17:39:55. Razón: corrijo un valor copiado del post #7 |
#8
|
||||
|
||||
gracias cHacKall. porque la verdad que estoy haciendo mis primeras armas en java. y justamente transcribiendo unas lineas de delphi. bueno hay muchos fundamentos de JAVA que se encuentras ausentes en mi.
gracias de nuevo y te comento como me resulto todo saludos |
#9
|
||||
|
||||
Sigo con el mismo error... por mas que utilize el Typecast.
Cita:
uso el for para verificar que no haya perdida de datos. debido a que el programa original asi lo hace con el ROL del assembler. y se puede decir que siempre da el mismo resultado.. debido a que solo rota los 8 bits. Utilizando el Integer.rotatetoleft() no funciona bien ya que no completa los 8 bits es decir No rellena con Ceros. |
#10
|
||||
|
||||
Bueno ahi pude hacer que compile..
Simplemente haciendo lo que vos dijiste... usando el TypeCast. me habia comido un par de ( ... ) El tema es el siguiente. el Rol 83,2 deberia dar 77 y da 76 eso se debe a no completa los 8 Bits. Si lo hacemos manual seria! 01010011 = 83 01001101 = 77 y como te inmaginaras apartir de ahi todos los calculos dan mal. |
#12
|
||||
|
||||
Usando este codigo!!!
el Rol Da lo siguiente ROL 83,2 = 77 ROL 77,2 = 53 ROL 53,2 = 212 ROL 212,2 = 83 ROL 83,2 = 77 como te inmaginas uso el resultado como valor de entrada y los valores se repiten!! Utilizando el Codigo de java!! 77 53 -44 -1 -1 -1 -1 -1 Como te inmaginaras.. sigo con el mismo problema.. en verdad no los Rota. sino que los Desplaza. es decir los mueve y rellena con 0 me parece que voy a tener que hacer algo de manera cacera!! |
#13
|
||||
|
||||
Considero que no es necesario el modificador "static" en una función sin variables declaradas, digo esto porque solo un comportamiento "residual" provocaría que una función retorne un valor correcto con un numero X, y que luego de algunas iteraciones al azar retorne un valor incorrecto con el mismo numero de prueba X (me refiero al "83" en tus pruebas).
Aparte de ese problema, he notado que el tipo de datos “byte” en JAVA tiene un rango de 2^7-1 al igual que un ShortInt de Delphi, con lo cual el valor esperado será siempre erróneo cuando sea establecido el último bit de dicho tipo (el signo). Hagamos otra prueba antes que decida instalar JAVA , y por favor si realizas alguna modificación a la misma explícame la razón puntualmente; Código:
private int ROL2(int Value) { return ((Value << 2) | (Value >> 6)) & 0xFF; } |
#14
|
||||
|
||||
Hola cHackAll, mira el cambio que hice lo hice sin saber, TE pido disculpas y voy a probar eso que me pasaste a ver si todo funciona Bien.
y la verdad que mucho no te voy a poder explicar si hago algun cambio, que como dije. es mi primer Pasito en el lindo mundo de java. saludos y estoy en contacto |
#15
|
||||
|
||||
Bueno cHacKall, la verdad que me ayudaste muchisimo, en 2 dias pude solucionar algo que me venia llevando unos cuantos mas..
Te cuento que la funcion quedo de 10, de la siguiente manera. Antes que nada Volvi a declarar la funcion como STATIC porque sino me daba el siguiente Error. Cita:
Y bueno he aqui el codigo!!
Cita:
|
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Boteable en assembler | fide | API de Windows | 5 | 31-12-2006 20:05:31 |
Assembler desde delphi | lookmydoom | Varios | 3 | 30-06-2006 21:56:20 |
assembler y el señor delphi | fcran | Varios | 2 | 26-06-2006 11:32:14 |
Fuentes assembler o .asm | Leomedellin | Varios | 7 | 19-04-2005 07:09:33 |
assembler en delphi | fcran | Varios | 4 | 23-05-2003 07:35:44 |
|