Что касается ответа на первый вопрос, то необходимо вспомнить о том, что в языке Pascal существуют два способа передачи аргументов в процедуру: по ссылке и по значению.
Тип аргументов, передаваемых по ссылке, совпадает с типом ассемблера dword и с типом pointer в Pascal. По сути, это указатель из четырех байт на некоторый объект. Структура указателя обычная: два младших байта - смещение, два старших байта - значение сегментной составляющей адреса. С помощью такого указателя в программу на ассемблере передаются адреса следующих объектов:
hвсех аргументов, объявленных при описании в программе на Pascal: как var,
независимо от их типа;
hаргументов pointer и longint;
hстрок string;
hмножеств;
hмассивов и 'записей, имеющих размер более четырех байтов. Аргументы по значению передаются следующим образом:
hдля типов char и byte - как байт;
hдля типа boolean - как байт со значением 0 или 1;
hдля перечисляемых типов со значением 0...255 - как байт; более 255 - как два байта;
hдля типов integer и word - как два байта (слово);
hдля типа real - как шесть байтов (три слова);
hмассивы и записи, длина которых не превышает четырех байтов, передаются
«как есть».
Заметим, что аргументы таких типов, как single, double, extended и comp, передаются через стек сопроцессора.