Schau dir einfach einmal den generierten Assemblercode an.
Aber davon abgesehen verstehe ich auch nicht wirklich was da Assembler verloren hat. Sinnvoller wäre dort sowieso reiner Object Pascal Code, dann gibt es da auch keine solchen Probleme:
Delphi-Quellcode:
function MakeProcInstance(
const M: TMethod): Pointer;
begin
GetMem(Result, 7 + 2 * SizeOf(Pointer));
PByte(Result)^ := $B9;
Inc(PByte(Result));
PPointer(Result)^ := M.Data;
Inc(PPointer(Result));
PLongInt(Result)^ := $B952515A;
Inc(PLongInt(Result));
PPointer(Result)^ := M.Code;
Inc(PPointer(Result));
PByte(Result)^ := $FF;
Inc(PByte(Result));
PByte(Result)^ := $E1;
Dec(PByte(Result), 6 + 2 * SizeOf(Pointer));
end;