Методы используют те же соглашения о вызовах, что и обычные
процедуры и функции, за тем исключением, что каждый метод имеет
неявный дополнительный параметр Self, который соответствует пара-
метру-переменной того же типа, что и объектный тип данного мето-
да. Параметр Self всегда передается последним и всегда имеет фор-
му 32-разрядного указателя на экземпляр, из которого вызывается
метод. Например, если переменная PP имеет тип PPoint, как опреде-
лено выше, то вызов PP^.MoveTo (10, 20) кодируется следующим об-
разом:
mov ax, 10 ; загрузить 10 в AX
push ax ; передать PX как параметр
mov ax, 20 ; загрузить 20 в AX
push ax ; передать PY как параметр
les di, PP ; загрузить PP в ES:DI
push es ; передать, как параметр Self
push di
mov di, es:[di + 6] ; извлечь смещение ТВМ из поля ТВМ
call DWORD PTR [di + 16] ; вызвать запись ТВМ для MoveTo
Во время возврата метод должен удалить параметр Self из сте-
ка точно так же, как он удаляет обычные параметры.
Методы всегда используют дальний тип вызова, независимо от
состояния директивы $F компилятора.