74
12.2. Внутреннее представление данных
Таблица распределения нулевой страницы
$0000..$007f резервирована для систем BIOS, UniBIOS и UniDOS;
$0080..$00af резервирована для интерпретатора Y кода. Не должна использоваться
ассемблерскими подпрограммами во время работы программы на Uni-
Pascal-е;
$00b0..$00df рабочая область интерпретатора. Ассемблерские подпрограммы
могуть использовать ее;
$00e0..$00ff не используется интерпретатором.
12.2. Внутреннее представление данных
Во всех случаях простые переменные (которые не являются элементами массива
или записи) располагаются на границе слова (2 байта). Размер их представления кратен
16 битам, независимо от того сколько битов необходимо. Это относится и к элементам
массива или записи. Исключение составляет только случай непосредственного
указывания на упаковку (переменные типа STRING - упакованные по умолчанию).
12.2.1. Неупакованные переменные
При представлении переменных простых типов младший байт слова
предшествует старшему (вопреки тому, что у микропроцессора СМ601 это наоборот),
за исключением переменных ссылочного типа (их представление старший-младший).
Для переменных, тип которых позволяет представить их в небольше чем 8 битах,
используются 16 битов. Это значит, что простая переменная типа SHORTINT, BYTE ...,
всущности занимает два байта и интерпретируется как переменная типа INTEGER,
WORD, ... Если включена проверка границ {$R+}, она совершается как нужно.
Использованные 16 битов вместо 8 прозрачно для програмиста. Но если будут
использованы некоторые из специальных процедур, например, MOVE, BLOCKREAD,
FILLCHAR, ..., нужно обеспечить чтобы старший байт имел содержимое 0 (или $FF при
отрицательном значении). Например:
function GetByte(var f: file): byte;
var b: byte;
begin
b:= 0;
{ нулирование старшего байта }
BlockRead(f, b, 1);
GetByte:= b;
end { GetByte };
или
function GetByte(var f: file): byte;
 var b: byte;
begin
BlockRead(f, b, 1);
GetByte:= b and $ff;
{ только младший байт возвращается}
end { GetByte };
Если исключена проверка границ, при присваивании тоже возможно получение
значения, не принадлежащего типу (множеству допустимых значений). Если проверка
включена, в том случае получается ошибка в процессе выполнения. Использование
<<  <  GO  >  >>

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