Руководство по языку B.Pascal 7

       

Параметры-значения


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

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

Фактический параметр должен иметь тип, совместимый по прис- ваиванию с типом формального параметра-значения. Если параметр имеет строковый тип, то формальный параметр будет иметь атрибут размера, равный 255.


Параметры- значения передаются по значению или по ссылке, в зависимости от их типа и размера. В общем случае, если пара- метр-значение занимает 1, 2 или 4 байта, то значение помещается непосредственно в стек. В противном случае в стек помещается ука- затель на значение, а процедура или функция копирует затем значе- ние в локальную ячейку памяти.
В процессоре 8086 не поддерживаются байтовые инструкции РUSН и РОР, поэтому байтовые параметры всегда передаются в стеке, как слова. Младший байт слова содержит значение, а старший байт слова свободен (и неопределен).
Значение или параметр целого типа передается как байт, слово или двойное слово. При этом используется такой же формат, как для представления переменной целого типа. (Для двойных слов старшее слово помещается в стек перед младшим словом, так что младшее слово размещается в более младших адресах.)
Параметр символьного типа (Char) передается, как байт без знака.
Параметр булевского типа (Boolean) передается, как байт со значением 0 или 1.
Параметр перечислимого типа передается, как байт без знака, если нумерация не превышает 256. В противном случае он передает- ся, как слово без знака.
Параметр вещественного типа (Real, значения с одинарной, двойной или повышенной точностью или сложного типа - Single, Double, Extended, Comp), передаются через стек как 4, 6, 8 или 10 байт. Это является исключением из того правила, что 1-, 2- и 4-байтовые значение передаются непосредственно в стеке.
Параметр типа указатель передается в виде двойного слова (адрес сегмента помещается в стек перед смещением, так что часть, представляющая собой смещение, заканчивается в самом младшем ад- ресе).
Параметр строкового типа передается, как указатель на значе- ние.
Параметр множественного типа передается в виде байта (если границы элемента установлены в диапазоне от 0 до 7) или слова (если границы элемента установлены в диапазоне от 0 до 15). В противном случае оно передается в виде указателя на "неупакован- ное" множество длиной 32 байта.
Массив или запись из 1, 2 или 4 байт помещается непосредс- твенно в стек. Другие массивы и записи передаются, как указатели на значения.

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