Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-02-2016
xangiesaurx xangiesaurx is offline
Miembro
NULL
 
Registrado: feb 2016
Posts: 57
Poder: 9
xangiesaurx Va por buen camino
Uso de ASM en 64 bits

Hola que tal a todos, vengo con otra duda, tengo este código en mi código de Delphi de 32bits, pero ahora que estoy compilando en 64bits con Delphi XE5, me da errores, me preguntaba si alguno de ustedes podría ayudarme con esto.
Muchas gracias

Código:
function FastCpySSE(const D:Pointer; const S:Pointer; const count:dword):integer;
var dwNumElements, dwNumPacks:DWORD;
begin
 dwNumElements := count div sizeof(integer);
 // not really using it, just for debuging. it keeps number of looping.
 // it also means number of packed data.
 dwNumPacks := dwNumElements div (128 div (sizeof(integer)*8));

 asm
  // remember for cleanup
  pusha;
@@begin:
  // init counter to SizeInBytes
  mov  ecx,count
  // get destination pointer
  mov  edi,D
  // get source pointer
  mov  esi,S
@@begina:
  // check if counter is 0, yes end loop.
  cmp  ecx,0
  jz  @@end
@@body:
  // calculate offset
  mov  ebx,count
  sub  ebx,ecx
  // copy source's content to 128 bits registers
  movdqa xmm1,[esi+ebx]
  // copy 128 bits registers to destination
  movdqa [edi+ebx],xmm1;

@@bodya:
  // we've done "1 packed == 4 * sizeof(int)" already.
  sub  ecx,16;
  jmp  @@begina
@@end:
  // cleanup
  popa;
end;

 result := 0;;
end;
Responder Con Cita
  #2  
Antiguo 22-02-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por xangiesaurx Ver Mensaje
me da errores
Responder Con Cita
  #3  
Antiguo 22-02-2016
xangiesaurx xangiesaurx is offline
Miembro
NULL
 
Registrado: feb 2016
Posts: 57
Poder: 9
xangiesaurx Va por buen camino
Sorry, crei que si los había puesto xD
Estos son los errores que me da Delphi

[dcc64 Error] MemMgr.pas(141): E1025 Unsupported language feature: 'ASM'
[dcc64 Error] MemMgr.pas(141): E2029 ';' expected but 'ASM' found
[dcc64 Error] MemMgr.pas(143): E2003 Undeclared identifier: 'pusha'
[dcc64 Error] MemMgr.pas(146): E2003 Undeclared identifier: 'count'
[dcc64 Error] MemMgr.pas(148): E2003 Undeclared identifier: 'D'
[dcc64 Error] MemMgr.pas(150): E2003 Undeclared identifier: 'S'
[dcc64 Error] MemMgr.pas(170): E2003 Undeclared identifier: 'popa'
[dcc64 Error] MemMgr.pas(171): E2029 '.' expected but ';' found
[dcc64 Error] MemMgr.pas(32): E2065 Unsatisfied forward or external declaration: 'SmartCpy64'
[dcc64 Error] MemMgr.pas(33): E2065 Unsatisfied forward or external declaration: 'SmartFill64'
[dcc64 Error] MemMgr.pas(34): E2065 Unsatisfied forward or external declaration: 'SmartFill32'
[dcc64 Error] MemMgr.pas(35): E2065 Unsatisfied forward or external declaration: 'FillChar32'
[dcc64 Fatal Error] MemBitmap.pas(5): F2063 Could not compile used unit 'MemMgr.pas'
Responder Con Cita
  #4  
Antiguo 22-02-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Creo que esto te puede dar una idea:

http://docwiki.embarcadero.com/RADSt..._Assembly_code

Básicamente, en 64 bits ya no puedes tener rutinas con código mezclado: o todo es delphi o todo es ensamblador.

LineComment Saludos
Responder Con Cita
  #5  
Antiguo 23-02-2016
xangiesaurx xangiesaurx is offline
Miembro
NULL
 
Registrado: feb 2016
Posts: 57
Poder: 9
xangiesaurx Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Creo que esto te puede dar una idea:

http://docwiki.embarcadero.com/RADSt..._Assembly_code

Básicamente, en 64 bits ya no puedes tener rutinas con código mezclado: o todo es delphi o todo es ensamblador.

LineComment Saludos
Ya lo eh revisado, pero incluso tomando en cuenta lo que se muestra en el documento, me siguen saliendo los mismos errores
Responder Con Cita
  #6  
Antiguo 23-02-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Traduciste el codigo a pascal?
Responder Con Cita
  #7  
Antiguo 23-02-2016
xangiesaurx xangiesaurx is offline
Miembro
NULL
 
Registrado: feb 2016
Posts: 57
Poder: 9
xangiesaurx Va por buen camino
Aun no hago la traducción a Pascal, me piden que conserve ensamblador y que si hay forma de hacerlo, pero eso es lo que aun no puedo lograr
Responder Con Cita
  #8  
Antiguo 23-02-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Es una limitacion del lenguaje

Delphi no te va a dejar escribir codigo ASM en Win64 bits

O lo traduces a Pascal, o compilas en 32 bits
Responder Con Cita
  #9  
Antiguo 23-02-2016
xangiesaurx xangiesaurx is offline
Miembro
NULL
 
Registrado: feb 2016
Posts: 57
Poder: 9
xangiesaurx Va por buen camino
Ok, tendré que empezar a traducirlo a pascal, muchas gracias.
Responder Con Cita
  #10  
Antiguo 23-02-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por AgustinOrtu Ver Mensaje
Es una limitacion del lenguaje

Delphi no te va a dejar escribir codigo ASM en Win64 bits

O lo traduces a Pascal, o compilas en 32 bits
Lo que dice el enlace que puse es que no puedes mezclar código delphi con ensamblador. No dice que no puedas tener código asm en 64 bits.

LineComment Saludos
Responder Con Cita
  #11  
Antiguo 23-02-2016
xangiesaurx xangiesaurx is offline
Miembro
NULL
 
Registrado: feb 2016
Posts: 57
Poder: 9
xangiesaurx Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Lo que dice el enlace que puse es que no puedes mezclar código delphi con ensamblador. No dice que no puedas tener código asm en 64 bits.

LineComment Saludos
Si había visto eso y sigo probando, pero por más que lo intento no me deja, me marca error en la linea donde indico que es ensamblador (asm).
Responder Con Cita
  #12  
Antiguo 23-02-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Entre el begin y el asm tienes código delphi y yo supongo que éso es lo que no se puede hacer.

LineComment Saludos
Responder Con Cita
  #13  
Antiguo 23-02-2016
xangiesaurx xangiesaurx is offline
Miembro
NULL
 
Registrado: feb 2016
Posts: 57
Poder: 9
xangiesaurx Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Entre el begin y el asm tienes código delphi y yo supongo que éso es lo que no se puede hacer.

LineComment Saludos
Oks, modificare esa parte y ya les aviso como me fue
Responder Con Cita
  #14  
Antiguo 23-02-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Auch, tenés razón roman, no hay problema con usar ASM en 64 bits, lo que no se puede es mezclar
Responder Con Cita
  #15  
Antiguo 01-03-2016
xangiesaurx xangiesaurx is offline
Miembro
NULL
 
Registrado: feb 2016
Posts: 57
Poder: 9
xangiesaurx Va por buen camino
Hola chicos, disculpen la tardanza en contestar, pude resolver el problema, como había comentado roman, tuve que traducirlo y quedo en una simple línea de código:

CopyMemory(D, S, count);

El problema es que ahora me aparece el siguiente error:

[dcc64 Error] JPG.pas(1091): E2045 Bad object file format: 'D:\Development\Library\Library\GraphicEx\jdapimin.obj'

Alguien sabría a que se debe?
gracias
Responder Con Cita
  #16  
Antiguo 02-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Esta es apenas la poca documentacion que he encontrado, a ver si te sirve
Responder Con Cita
  #17  
Antiguo 02-03-2016
xangiesaurx xangiesaurx is offline
Miembro
NULL
 
Registrado: feb 2016
Posts: 57
Poder: 9
xangiesaurx Va por buen camino
Gracias AgustinOrtu, justo era lo que estaba viendo ayer, pero revisando el proyecto, no encuentro algun error relacionado a lo que aparece en la lista, no se a que mas se pueda deber esto
Responder Con Cita
  #18  
Antiguo 15-03-2016
xangiesaurx xangiesaurx is offline
Miembro
NULL
 
Registrado: feb 2016
Posts: 57
Poder: 9
xangiesaurx Va por buen camino
Que tal chicos, la verdad, no se me da nada ensamblador, me cuesta mucho entenderle, entonces me preguntaba si me podrian ayudar a traducir algunas partes a código para Delphi please?

Como este:
asm
PUSH EBX
LEA EBX, ReverseTable
MOV ECX, [PackedSize]
MOV EDX, [Source]
MOV EDX, [EDX]
@@1:
MOV AL, [EDX]
{$ifdef COMPILER_6}
XLATB
{$else}
XLAT
{$endif COMPILER_6}
MOV [EDX], AL
INC EDX
DEC ECX
JNZ @@1
POP EBX
end;

Gracias
Responder Con Cita
Respuesta



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
Instalar componentes de 32 bits en una PC de win7 a 64 bits uper Windows 10 29-01-2016 18:08:30
compilar programas 32 bits con lazarus 64 bits anubis Lazarus, FreePascal, Kylix, etc. 3 30-10-2013 18:08:44
Pasar varible de 16 bits a dos de 8 bits bactering C++ Builder 7 04-11-2010 04:44:33
Como ejecutar aplicativos dbExpress de 32 bits en 64 bits rolandoj Conexión con bases de datos 0 30-07-2010 19:39:07
Aplicaciones de 32 bits en Windows de 64 bits Gabo Debates 9 25-09-2008 20:49:32


La franja horaria es GMT +2. Ahora son las 22:56:24.


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