Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > ASM y Microcontroladores
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-08-2016
Avatar de dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.444
Poder: 26
dec Va camino a la famadec Va camino a la fama
Convertir código "asm" a código Delphi

Hola a todos,

Estoy tratando de compilar uno de mis programas para Windows de 64 bits, y, me encuentro conque en cierto código de terceros se hace uso de cierto método que a su vez usa código "asm", que, no puede compilarse para 64 bits. Se trata de dos líneas de código "asm", pero, bastan y aún sobran para verme en la necesidad de pedir vuestra ayuda. A continuación copio y pego el método en cuestión, con un comentario escrito por el propio desarrollador:

Código Delphi [-]
procedure TSynWebEngine.SetRangeInt(ALen, APos, AVal: Longword);
var
  i: Longword;
begin
  i := $FFFFFFFF shl ALen;
  //todo: Does it work in CLX? Should be [EBX].APos? I don't know 
  asm
    mov ecx, APos
    rol i, cl
  end;
  FInstance^.FRange := (FInstance^.FRange and i) or ((AVal shl APos) and not i);
end;

¿Puede alguien echarme una mano a convertir dicho código "asm" a código Delphi?

Muchas gracias de antemano.
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #2  
Antiguo 07-08-2016
Avatar de dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.444
Poder: 26
dec Va camino a la famadec Va camino a la fama
Hola a todos,

Sigue siendo interesante una posible solución a lo dicho arriba, pero, acabo de probar una compilación para 64 bits de mi programa y esta no arranca siquiera. Definitivamente, necesitaría que mi entorno de trabajo fuese ya usando un Windows de 64 bits, pero, puesto que no es así, mucho me temo que aquí tengo que dejar este intento por portar mis programas a dicha plataforma. Al menos de momento, puesto que la idea sería cambiar, en un futuro, mi propio ordenador a un Windows de 64 bits y trabajar desde ahí.

¡Queda dicho!
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #3  
Antiguo 08-08-2016
bucanero bucanero is offline
Miembro
 
Registrado: Nov 2013
Ubicación: Almería, España
Posts: 41
Poder: 0
bucanero Va por buen camino
Hola DEC,

Buscando por el nombre de la función en google, aparece en github una versión mas actualizada en donde el autor ya parece tener resuelto el problema

https://github.com/pyscripter/pyscri...lighterWeb.pas

Código Delphi [-]
procedure TSynWebEngine.SetRangeInt(ALen, APos, AVal: Longword);
var
  i: Longword;
begin
  i := $FFFFFFFF shl ALen;
  //todo: Does it work in CLX? Should be [EBX].APos? I don't know 
  {$IFDEF CPUX64}
  i:= (i shl APos) or (i shr (32-APos));
  {$ELSE}
  asm
    mov ecx, APos
    rol i, cl
  end;
  {$ENDIF}
  FInstance^.FRange := (FInstance^.FRange and i) or ((AVal shl APos) and not i);
end;

Espero te sirva
Un saludo
Responder Con Cita
  #4  
Antiguo 08-08-2016
Avatar de dec
dec dec is offline
Moderador
 
Registrado: Dec 2004
Ubicación: Alcobendas, Madrid, España
Posts: 12.444
Poder: 26
dec Va camino a la famadec Va camino a la fama
Hola bucanero,

Cita:
Empezado por bucanero Ver Mensaje
Hola DEC,

Buscando por el nombre de la función en google, aparece en github una versión mas actualizada en donde el autor ya parece tener resuelto el problema

https://github.com/pyscripter/pyscri...lighterWeb.pas

Código Delphi [-]
procedure TSynWebEngine.SetRangeInt(ALen, APos, AVal: Longword);
var
  i: Longword;
begin
  i := $FFFFFFFF shl ALen;
  //todo: Does it work in CLX? Should be [EBX].APos? I don't know 
  {$IFDEF CPUX64}
  i:= (i shl APos) or (i shr (32-APos));
  {$ELSE}
  asm
    mov ecx, APos
    rol i, cl
  end;
  {$ENDIF}
  FInstance^.FRange := (FInstance^.FRange and i) or ((AVal shl APos) and not i);
end;

Espero te sirva
Un saludo
Hombre, muchísimas gracias. ¡Ahora mismo voy a echar un vistazo!
__________________
David Esperalta
www.davidesperalta.com
Responder Con Cita
  #5  
Antiguo 09-12-2016
exmachina exmachina is offline
Miembro
 
Registrado: Sep 2016
Ubicación: 127.0.0.1
Posts: 30
Poder: 0
exmachina Va por buen camino
Hola. No conocozco las peculiaridades de Delphi (realmente no conozco practicamente nada de Delphi) pero, ¿no serviria algo asi?:
Código:
mov rcx, APos
https://software.intel.com/en-us/art...o-x64-assembly
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Marcar carpeta como "Compartida" por Código jhonalone Redes 2 08-05-2012 10:23:21
[Favor] "Traducir" archivos dfm de programa código abierto Ñuño Martínez La Taberna 7 23-04-2010 13:20:09
Código "erroneo" pero que funciona ixMike Varios 8 11-04-2007 18:57:08
Cambiar por código la opción "uso compartido de carpetas" en opciones de carpeta JuanErasmo API de Windows 1 09-11-2006 15:47:08
Investigadores quieren llevar el "código libre" a la ciencia Sasuke_Cub Noticias 0 02-09-2005 00:20:33


La franja horaria es GMT +2. Ahora son las 16:29:46.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi