12. UniPascal в детайли
73
иогически тип
Тъй като е необходимо представяне на стойностите 0 и 1, то е достатъчен само
един бит, но се използва един байт. Типът е пакетируем.
Целочислен тип
Ако минималната и максималната стойност са в границите:
*
0..255 се представят с един байт (беззнаково). Типът е пакетируем;
*
-128..127 се представят също с един байт (със знак). Стойности се
представят в допълнителен код. Типът е пакетируем;
*
във всички останали случаи са непакетируеми.
Типовете CHAR и BYTE
Тези типове са пакетируеми и се използва само един байт.
Реален тип
Реалният тип е непакетируем.
Стандартен тип STRING
Този тип е винаги пакетиран, но непакетируем. За него се отделя област от памет
с размер N + 1 байта, където N е константата, указана в декларацията. Тъй като типът
е непакетируем, то винаги се предприема изравняване на граница на дума и
следователно променливи от тип string[7] и string[6] ще заемат еднакво количество
памет.Първият байт (съответствуващ на нулевия елемент) е дължината на текущата
стойност на низа. Ако дължината, е по-малка от максималната дължина на низа,
използват се само първите K+1 байта от представянето (K - текущата дължина).
Например 'Test' има представяне: $04, $54, $65, $73, $74.
12.3. Връзка с подпрограми на асемблер
Връзка между програма на UniPascal и подпрограма на асемблер (машинен код)
се реализира само чрез параметрите. Те се предават през стека, като се намират в
обратен ред на обявяването си, т.е. на върха на стека се намира последният параметър,
под него е предпоследният и т.н. В момента на активизиране на асемблерската
подпрограма на върха на стека (над параметрите) се намира и адресът на връщане
(return address).
За да може интерпретаторът на Y код да различава асемблерските подпрограми
от тези на Y код, необходимо е всяка подпрограма на машинен код да започва с два
байта съдържащи нула.
Подпрограмата е длъжна да 'извади' от стека всички параметри, които й се
подават. Връщането към интерпретатора на Y код може да бъде извършено по два
начина: като се използва адреса за връщане, намиращ се в стека; като се направи
преход към адрес $BEFE (абсолютен адрес). Ако се използва преход, необходимо е да
бъде изваден от стека адресът на връщане.
Ако подпрограмата е функция, тя трябва да върне на върха на стека резултата
си. Резултатът на функцията трябва да е съобразен с представянето на данните, което
<<  <  GO  >  >>

Вернуться к началу сайта