Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
54
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Параметры-переменные

Параметры-переменные (параметры var) всегда передаются по

ссылке, то есть указатель ссылается на ячейку памяти с фактичес-

ким значением.

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

Параметры-значения передаются по значению или по ссылке, в

зависимости от их типа и размера. В общем случае, если пара-

метр-значение занимает 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 байт помещается непосредс-

твенно в стек. Другие массивы и записи передаются, как указатели

на значения.

Открытые строковые параметры

Открытые строковые параметры передаются занесением в стек

сначала указателя на строку, а затем слова, содержащего атрибут

размера (максимальную длину строки).

Открытые параметры-массивы передаются занесением в стек сна-

чала указателя на массив, а затем слова, содержащего атрибут раз-

мера (число элементов массива минус 1).

При использовании встроенного ассемблера, значение, возвра-

щаемое для открытого параметра с помощью стандартной функции

High, можно получить, загружая слово непосредственно под открытым

параметром. В данном примере это демонстрирует процедура

FillString, заполняющая строку до ее максимальной длины указанным

символом.

procedure FillString(var Str: OpenString; Chr: Char);

assebmler;

asm

LES DI,Str { ES:DI = @Str }

MOV CX,Str,Str.Word[-2] { Cx = igh(Str) }

MOV AL,CL

CLD

STOSB { установить Str[0] }

MOV AL,Chr

REP STOSB { установить Str[1..High] }

end;

Соседние файлы в предмете Программирование на Pascal