для общего развития неплохо бы прочитать
http://www.transl-gunsmoker.ru/2008/12/1.html
http://www.transl-gunsmoker.ru/2008/12/2.html
http://www.transl-gunsmoker.ru/2008/12/3.html
http://www.transl-gunsmoker.ru/2008/12/4-ia64.html
http://www.transl-gunsmoker.ru/2008/12/5-amd64.html
Особенно третью и пятую части.
По передаче параметров тут так. - говорю за x86 - stdcall
Без модификаторов
const,
var или
out
boolean, char, целочисленные вплоть до (LongInt/DWORD), а так же всякие Pointer`ы- каждая величина кладётся в стек и занимает в стеке 4 байта.
Int64 кладётся в стек и занимает в стеке 8 байт.
String - представляет собой указатель на первый символ строки и занимает в стеке 4 байта. Перед вызовом процедуры производится увеличение количества ссылок на строку.
Record, состоящий из вышеперечисленного кладётся в
стек весь целиком.
С модификатором
const
boolean, char, целочисленные вплоть до (LongInt/DWORD), а так же всякие Pointer`ы - каждая величина кладётся в стек и занимает в стеке 4 байта.
Int64 - кладётся в стек и занимает в стеке 8 байт.
String - представляет собой указатель на первый символ строки и занимает в стеке 4 байта. Увеличение счётчика не производится.
Record`ы - в стек кладётся указатель на начало структуры.
С модификатором
var
Для всех типов в стек кладётся адрес переменной.
С модификатором
out
Для всех типов в стек кладётся адрес переменной.