Результаты возврата функций
В следующей таблице приведен обзор того, как результаты возвращаются из функции в программу. Для более подробной информации насчет каждого типа, читайте соответствующий раздел.
Тип Дельфи | Результат | Размер |
ShortInt | al | 8-битное значение |
SmallInt | ax | 16-битное значение |
LongInt | EAX | 32-битное значение |
Byte | al | Значение типа байт |
Word | ax | Значение типа слово |
Dword | EAX | Значение типа двойное слово |
Int64 | EDX:EAX | 64-битное значение |
Boolean | al | Значение типа байт |
ByteBool | al | Значение типа байт |
WordBool | ax | Значение типа слово |
LongBool | EAX | Значение типа двойное слово |
Char | al | Значение типа байт |
AnsiChar | al | Значение типа байт |
WideChar | ax | Значение типа слово |
ShortString | Указатель в Result (1) | 32-битный указатель |
AnsiString | Указатель в Result (1) | 32-битный указатель |
WideString | Указатель в Result (1) | 32-битный указатель |
Variant | Указатель в Result (1) | 32-битный указатель |
Pointers | EAX | 32-битный указатель |
Objects | EAX | 32-битный указатель |
Class and Class reference | EAX | 32-битный указатель |
Procedure pointer | EAX | 32-битный указатель |
Method pointers | Указатель в Result (2) | 2 x 32-битных указателя |
Sets | EAX или Result (3) | Непосредственно или как 32-битный указатель (3) |
Records | EAX или Result (3) | Непосредственно или как 32-битный указатель (3) |
Static Arrays | EAX или Result (3) | Непосредственно или как 32-битный указатель (3) |
Dynamic arrays | Указатель в Result (1) | 32-битный указатель |
Single | ST(0) | n/a |
Double | ST(0) | n/a |
Extended | ST(0) | n/a |
Real48 | ST(0) | n/a |
Currency | ST(0) (4) | n/a |
(1) Переменная Result в действительности передается в функцию, как дополнительный var параметр. Эта переменная Result содержит 32-битный указатель на область результата в памяти. Подлинное местонахождение зависит от типа использованного соглашения о вызове: Для соглашения register это может быть EAX, EDX или ECX, в зависимости от количества переданных параметров. В других случаях Result это 32-битный указатель на стеке.
(2) Переменная Result указывает на адрес памяти где расположены два 32-битных указателя. Этот указатель передается так, как если бы он был действительно объявлен, и его точное местонахождение зависит от типа используемого соглашения о вызове.
(3) Если подлинный тип помещается в 32 бита, то он возвращается напрямую через регистр al/ax/EAX. Иначе, Result содержит 32-битный указатель на переменную памяти, и он передается в функцию, как если бы он был объявлен как дополнительный 32-битный var параметр. Этот параметр (точное местонахождение зависит от типа использованного соглашения о вызове) должен содержать указатель на действительные данные в памяти
(4) Значение в ST(0) является маштабированным значением (x10000). Для примера, значение 5,8745 возвращается как 58745.