dragon писал(а):
Предполагаю что референсная реализация будет выглядеть как нибудь так
Да, именно так. Набросал два варианта (Delphi 6):
Код:
procedure InvLPG(Page: Pointer);
asm
INVLPG [Page]
end;
procedure ConstInvLPG(const Page);
asm
INVLPG [Page]
end;
Без квадратных скобок у [Page] Delphi не компилит, ругается на несовместимость команды и операндов. DCU32Int выдает одинаковые опкоды для обоих вариантов:
Код:
procedure InvLPG (Page: System.Pointer);
begin
// -- Line #308 --
0: ..8 [0F 01 38 | INVLPG WORD PTR [EAX]
// -- Line #309 --
3: Γ |C3 | RET NEAR
end;
procedure ConstInvLPG (var Page: void);
begin
// -- Line #313 --
0: ..8 [0F 01 38 | INVLPG WORD PTR [EAX]
// -- Line #314 --
3: Γ |C3 | RET NEAR
end;
Коды совпадают с теми, что выдает FASM. В Delphi, стало быть, всё реализовано верно. Ну и DCU32Int хороший инструмент, советую.