TURBO PASCAL

Новости           

Программы

Turbo Pascal

Игры

Документация

"Странности"

FAQ

Ссылки

Гостевая книга

Благодарности

От автора

 

 

 

Адреса и указатели

Оперативная память ПК представляет собой совокупность элементарных ячеек для хранения информации - байтов. ^Каждый байт имеет собственный номер. Эти ^номера натыкаются адресами, они позволяют обращаться к любому бай i\ памят.

В Турбо Паскале имеется гибкое средство для управления динамической памятью - это так называемые указатели.

Указатель - это переменная, которая в качестве своею значения содержит адрес байта памяти.

В ПК адреса задаются совокупностью двух шестнадцатиразрядных слов, которые называются сегментом и смещением. Сегмент - эго участок памяти длиной 65536 байт (64кб) и начинающийся с физического адреса, кратного 16 (0.16,32.48 и т.д.). Смещение указывает сколько байт от начала сегмента необходимо пропустить, чтобы обратиться к нужному адресу.

Турбо Паскаль 7.0 может работать только со стандартной памятью ПК (в пределах 1мб). Для использования оперативной памяти за пределами !мб можно использовать Borland Pascal With Object 7.0.

Для адресации в пределах 1мб нужно не менее 20 двоичных разрядов: 220=1048576 - количество элементарных ячеек (байтов) в оперативной памяти, имеющей объем 1мб. При использовании 20 двоичных разрядов адрес любою сегмента в шестнадцатеричной системе счисления оканчивается на «О» (т.к. адрес любого сегмента кратен 16). Но хранится этот адрес в ячейке, имеющей 16 двоичных разрядов, как истинный адрес, деленный на 16. Например: 1DE20 - адрес сегмента при использовании 20 двоичных разрядов: 1DE2 - адрес того же самого сегмента при использовании 16 двоичных разрядов.

Для вычисления истинного адреса ячейки адрес сегмента умножается на 16 (в двоичной системе счисления на 24 или смещается влево на 4 разряда, а освободившиеся правые разряды заполняются нулями). Результат умножения складывается с содержимым смещения. Смещение хранится как 16 - разрядное слово. Например: 1DE2*10=1DH20 (здесь 10 - основание системы счисления (16)); 1 DF.20+00006=1DE26 - адрес ячейки (здесь 00006 - смещение)

Фрагмент памяти в 16 байт называется параграфом. Сегменты могут следовать в памяти друг за другом без промежутков или с некоторым интервалом или могут перекрывать друг друга. Поэтому абсолютный адрес ячейки может образовываться несколькими способами. Например: 00210 - 20 - разрядный абсолютный адрес может образовываться как 00200ЮООЮ (здесь 0020 - это 16 - разрядной ссгмеж, 0001 - 16 -это разрядное смещение) и;.и 00 1FO* 00020 (здесь 00200-0001 0=00 1FO, 000101-00010^00020: 001 F - это 16 - разрядный сегмент: 0002 - эго 16 - разрядное смещение).

Любой указатель по своей внутренней структуре представляет собой совокупность двух слов (данных типа WORD), трактуемых как сегмент и смещение. С помощью указателей можно размещать в динамической памяти любой тип данных. Один элемент данных может занимать один или несколько смежных байт. Указатель адресует лишь первый байт данных. Сам указатель занимает в памяти 4 байт

 

На первую страницу

 

Rambler's Top100 PROext: Top 1000 Rambler's Top100
(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz