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


         

Результаты возврата функций


В следующей таблице приведен обзор того, как результаты возвращаются из функции в программу. Для более подробной информации насчет каждого типа, читайте соответствующий раздел.



Тип Дельфи

Результат

Размер

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.



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