FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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; |
#2
|
||||
|
||||
#3
|
|||
|
|||
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' |
#4
|
||||
|
||||
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 |
#5
|
|||
|
|||
Cita:
|
#6
|
||||
|
||||
Traduciste el codigo a pascal?
|
#7
|
|||
|
|||
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
|
#8
|
||||
|
||||
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 |
#9
|
|||
|
|||
Ok, tendré que empezar a traducirlo a pascal, muchas gracias.
|
#10
|
||||
|
||||
Cita:
LineComment Saludos |
#11
|
|||
|
|||
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).
|
#12
|
||||
|
||||
Entre el begin y el asm tienes código delphi y yo supongo que éso es lo que no se puede hacer.
LineComment Saludos |
#13
|
|||
|
|||
Oks, modificare esa parte y ya les aviso como me fue
|
#14
|
||||
|
||||
Auch, tenés razón roman, no hay problema con usar ASM en 64 bits, lo que no se puede es mezclar
|
#15
|
|||
|
|||
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 |
#16
|
||||
|
||||
Esta es apenas la poca documentacion que he encontrado, a ver si te sirve
|
#17
|
|||
|
|||
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
|
#18
|
|||
|
|||
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 |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
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 |
|