Ver Mensaje Individual
  #11  
Antiguo 16-02-2008
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Reputación: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

¡Hola!

Felicidades por la nueva sección. Creo que se verán cosas muy interesantes por aquí. Mis nociones de ensamblador son muy reducidas, pero siempre me ha llamado la atención el tema. Debido a que Andreano no me ha conseguido todavía información sobre la siguiente función, tal vez entre Javier, Domingo y otros maestros de esta disciplina, junto con algunos curiosos como yo podamos indagar un poco más sobre qué pretendía Borland con esta rutina:

(en System.pas de Delphi 7 y algunas otras versiones)
Código Delphi [-]
procedure       _CopyObject{ dest, source: Pointer; vmtPtrOffs: Longint; typeInfo: Pointer };
asm
        { ->    EAX pointer to dest             }
        {       EDX pointer to source           }
        {       ECX offset of vmt in object     }
        {       [ESP+4] pointer to typeInfo     }

        ADD     ECX,EAX                         { pointer to dest vmt }
        PUSH    dword ptr [ECX]                 { save dest vmt }
        PUSH    ECX
        MOV     ECX,[ESP+4+4+4]
        CALL    _CopyRecord
        POP     ECX
        POP     dword ptr [ECX]                 { restore dest vmt }
        RET     4

end;

Tuve la ocasión de estudiarla, junto con _CopyRecord. Ésta última me deja tranquilo respecto a su funcionamiento y uso por parte del compilador, pero sospecho que _CopyObject no hace lo que se esperaría con todos los campos de la clase que llevan contadores de referencia, además de que no parece haber instrucción Pascal que el compilador convierta a una implícita llamada a _CopyObject.

Un abrazo ensamblado.

Al González.
Responder Con Cita