Использование ассемблера в Дельфи


         

Передача параметров в функции и процедуры


В следующей таблице приведены сведения о передаче параметров по значению (включая, директиву const) в процедуры и функции Дельфи. При передаче по ссылке (директива var), все параметры передаются как 32-битные указатели.



Тип

Размер

Регистр (1)

ShortInt

1 байт (2)

Да

SmallInt

1 слово (2)

Да

LongInt

1 двойное слово

Да

Byte

1 байт (2)

Да

Word

1 слово (2)

Да

Dword

1 двойное слово

Да

Int64

8 байт

Нет

Boolean

1 байт (2)

Да

ByteBool

1 байт (2)

Да

WordBool

1 слово (2)

Да

LongBool

1 двойное слово

Да

Char

1 байт (2)

Да

AnsiChar

1 байт (2)

Да

WideChar

1 слово (2)

Да

ShortString

32-битный указатель

Да

AnsiString

32-битный указатель

Да

WideString

32-битный указатель

Да

Variant

32-битный указатель

Да

Pointers

1 двойное слово

Да

Objects

32-битный указатель

Да

Class and Class reference

32-битный указатель

Да

Procedure pointer

1 двойное слово

Да

Method pointers

Два 32-битных указателя (3)

Нет

Sets

Значение типа байт/слово/двойное слово или 32-битный указатель (4)

Да (4)

Records

Значение типа байт/слово/двойное слово или 32-битный указатель (4) (5)

Да (4)

Static Arrays

Значение типа байт/слово/двойное слово или 32-битный указатель (4)

Да (4)

Dynamic arrays

32-битный указатель

Да

Open array

Два 32-битных значения (6)

Нет

Single

4 байта

Нет

Double

8 байт

Нет

Extended

12 байт (7)

Нет

Real48

8 байт (8)

Нет

Currency

8 байт

Нет

(1) Если указано, то тип передается через регистр. Типы, которые не указаны, всегда передаются через стек.

(2) Когда эти типы занимают менее 32 бит, тогда при передаче на стек они всегда занимают 32 бита, и значение находится в младшей части, содержимое оставшей части неопределено.

3) Указатели на метод передаются через стек, как два 32-битных указателя, указатель на экземпляр помещается перед указателем на метод, так что позже это становится младшим адресом.

(4) Если тип помещается в байт/слово/двойное слово, то он передается непосредственно. Иначе, передается 32-битный указатель на память, где хранится этот тип.

(5) При использовании соглашения по вызову типа cdecl, stdcall или safecall, записи всегда передаются через стек и их размер округляется в сторону большего двойного слова.

(6) Первое значение это 32-битный указатель на массив, а второе значение содержит количество элементов в массиве.

(7) Используются только младшие 10 байт.

(8) Используется только младшие 6 байт.



Содержание раздела