¡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;
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.