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: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.decsoftutils.com
Responder Con Cita
  #2  
Antiguo 07-08-2016
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 08-08-2016
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
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: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 09-12-2016
exmachina exmachina is offline
Miembro
NULL
 
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 11:23:21
[Favor] "Traducir" archivos dfm de programa código abierto Ñuño Martínez La Taberna 7 23-04-2010 14:20:09
Código "erroneo" pero que funciona ixMike Varios 8 11-04-2007 19: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 16:47:08
Investigadores quieren llevar el "código libre" a la ciencia Sasuke_Cub Noticias 0 02-09-2005 01:20:33


La franja horaria es GMT +2. Ahora son las 07:53:51.


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