Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
программирование 2 семестр 1 курс.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
523.82 Кб
Скачать
  1. Операция сравнивания

Под операцией сравнения понимают сегментов и смещений , находящихся в ссылках или указателях . При этом допустимы операции сравнивания на равенство или не равенство адресов . При выполнении операции сравнения в операции участвуют 32 бита как единое целое , поэтому если две ссылки указывают на один физический адрес , но он записан по-разному , то ссылки – различные.

Дополнительные операции работы с адресами

  1. Определения адреса переменной

Add( «переменные ») = @ - взятие адреса

P:=@i; = p:= add(i);

  1. Определения адреса сегмента , в котором находятся значения переменной seg(‘переменая’):word; Данная функция возвращает адрес сегмента в десятичной формой .

Var

S :word;

I:byte;

S;=seg(i);

  1. OFS(‘ переменная ’): word; возвращение адреса смещения в десятичной форме

  2. Операция создания адреса

Ptr(‘адрес сегмента’,’ адрес смещения’);

Параметры задаются в 16ричной форме . Данная функция организует ссылку на место в памяти , определяемое заданными в качестве параметра адресами сегмента и смещения . Эта операция связывает ссылку с некоторой областью памяти . Данная операция = операция присваивания адреса.

P:=Ptr ($A1,$A2);

Var

P1,p2:^integer;

……….

P1:=Ptr ($0100,$0000);

P1^:=2;

P2:=Ptr ($0100,$0000);

Write(p2^);

Возможно осуществить ссылку на область памяти через функцию Ptr не используют переменную . Необходимо воспользоваться операцией приведения типов , так как операция раз адресация не содержат информации.

Var

B:byte;

……

B:=byte(Ptr ($0100,$0000));

Аналогичное использование функции и в случае , когда необходимо поместить значения в некоторой области памяти :

Byte (Ptr ($0100,$0000)^):=b;

Обычно функцию ptr используют для наложения некоторый структуры данных на какую-либо область памяти. Рассмотрим пример :

Необходимо наложить массив на видеобуфер , содержать образ текстового экрана и находящийся по адресу $B800:$0 . С этого адреса поочередно располагаются пары байт - информации , информации байт и байт – атрибут , который показывают какой символ и с каким атрибутом (цвет символа , фона ) отображается в том или ином месте экрана .

В текстовом режиме 10*25 знакомест строка экрана занимает 160 байт памяти. Весь экран – 400 байт = 4кб

Пример заполнения точки экрана символами ‘0’ синего цвета .

Type

Vid=record

Inf:char;

Attr:byte;

End;

Vid_arr=array [1..2000] of vid;

Var

I:word;

Ptr_v^:vid_arr;

Begin

Ptr_v:=ptr ($b800,$0);

For i:=1 to 2000 do

Begin

Ptr_v ^[i].inf:=’0’;

Ptr_v^[i].attr:=1;

End;

  1. Определение размера переменной или типа

Size of ( «переменная» или «тип»):word;

Var

S:word;

I:string[10];

……

S:=size of (i);

  1. Прямой доступ через предопределенный массив .

Используется 3 предопределения массива Mem (byte), Mem w (word), Mem L (Longint), которые работают с элементами различных типов . Синтаксис записи обращения к элементам массива :

Mem [‘сегмент ’:’ смещение ’] .

Пример заполнения текстового экрана ‘0’ синего цвета , использование предопределенный массив :

Var

I:word;

Begin

I:=0;

While I <> 400 do

Begin

Mem[$B800:$0 + i]:= ord(‘0’);

Mem[$B800:$1 + i]:= 1;

I:=i+2;

End;

  1. Копирование блока памяти из одной области в другую

Move («параметр 1», «параметр 2» , «параметр 3»);

Параметр 1 определяет адрес начала копируемого блока , адреса блока , в который копируем – 2 параметра , параметр 3 – размер копируемого блока . В качестве Параметров 1 и 2 возможно использовать различные переменные , которые будут определять адреса первых байтов соответствующих им блоков .

Пример копирования из А в А1

Const

A: array[1..5] of byte = (1,2,3,4,5);

Var

A1 : aaray[1..5] of byte ;

..

Move (A,A1, size of (A));

Данная процедура может используется для копирования переменных .

Копирование разнотипных переменных :

Var

I:byte;

J:word;

……..

I:=1;

J:=256;

Move (I,j, size of(i));

В этом случае необходимо использовать однотипные переменные или указатель правильный размер переменного блока Move (I,j, size of(i));

  1. Связывание переменной с адресом

Стандартами языка допускается устанавливать переменной адрес , по которому будут храниться ее значения . для этого используется директива absolute «адрес » , который указывается в разделе объявления переменных .

Var

C:char absolute $B800:$0;

P:^char;

Begin

Clrscr;

C:=b;

Readkey ;

Writeln ;

P:=@c ;

Write(p^);

End.

Организация динамической памяти

лекция №9

Ссылочный и указательный типы данных. Организация динамической памяти. Процедура работы с динамической памятью. Предопределённые указатели. Анализ ресурса динамической памяти при размещении динамических данных. Перепрограммирование функции монитора кучи.