Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Указатели и операции над нимиСодержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте Наименьшей адресуемой единицей памяти компьютера, построенного на базе микропроцессоров фирмы Intel и их аналогов, является байт. Таким образом, память представляет собой последовательность нумерованных байтов. Для обращения к конкретному байту необходимо знать его номер, который называется его физическим адресом. Память принято делить на слова (2 байта), двойные слова (4 байта) и параграфы (16 байт). При работе с памятью используется адресация по схеме «база + смещение» (рис.21.1). При этом адрес конкретного байта М определяется как адрес некоторого заданного байта Аб (адрес базы) + расстояние до требуемого байта Асм (смещение).
Рис.21.1. Адресация по схеме «база + смещение» В микропроцессорах фирмы Intel в качестве адреса базы используют адреса, кратные 16. Четыре последних бита такого адреса равны 0, и их не хранят, а аппаратно добавляют при вычислении физического адреса. Непрерывный участок памяти, имеющий длину не более 64 Кб и начинающийся с адреса, кратного 16, называется сегментом. Адрес начала сегмента принимают за базу для всего сегмента. Сегментный адрес и смещение имеют размер по 16 бит (слово). Физический адрес, получаемый при их сложении с учетом отброшенных четырех бит, имеет размер 20 бит и может адресовать память объемом 220 байт или 1 Мб (рис. 21.2.).
Рис.21.2. Получение физического адреса Максимальное смещение равно 216-1, что соответствует 64 Кб памяти. Таким образом, относительно одной базы можно адресовать не более 64 Кб памяти, что ограничивает размер сегмента. Программа и данные хранятся в памяти фрагментами, каждый из которых расположен в своем сегменте. Различают 3 вида сегментов: кодов (хранится собственно программа), данных (размещаются глобальные переменные и константы), стека (при вызове подпрограмм в стек записывается адрес возврата, в нем размещаются локальные переменные, копии параметров–значений, адреса параметров–переменных и т.п.). В процессе работы сегментные адреса хранятся в специальных сегментных регистрах: CS – адрес базы сегментов кодов; DS – адрес базы сегментов данных; SS – адрес базы сегмента стека. Доступ к конкретным участкам сегмента осуществляется через соответствующие смещения. Для работы с адресами используется специальный тип данных – указатель. Различают указатели двух типов: типизированные и нетипизированные. Типизированные содержат адреса, по которым в памяти размещаются данные определенных типов. Используя эти указатели с данными указанных типов, можно выполнить операции, предусмотренные базовым типом. Например: type tpi = ^integer; {объявляем тип «указатель на целое»} var p: tpi; {объявляем переменную этого типа} Или var p: ^integer; Нетипизированные указатели хранят просто адреса, которые не связаны с данными конкретных типов. Для их объявления используют зарезервированное слово pointer. Например: var p: pointer; … Над значениями указателей возможны следующие операции (рис. 21.3): - присваивание. При выполнении этой операции указателю присваивается значение другого указателя или nil. Например: var p 1, p 2: ^integer; p 3: ^real; p: pointer; … {допустимые операции} p 1:= p 2; p:= p 3; p 1:= p; p 1:=nil; p:= nil; {недопустимые операции} p 3:= p 2; p 1:= p 3; …
- получение адреса. Операция получения адреса – одноместная, ее операнд может иметь любой тип, результатом является типизированный (в соответствии с типом операнда) указатель, содержащий адрес объекта–операнда. Например: var i: integer; p: ^integer; p:=@ i; {указатель p будет содержать адрес переменной i } - доступ к данным по указателю (операция разыменования). Чтобы получить доступ к переменной по указателю, необходимо после переменной–типизированного указателя поставить знак «^». Полученное значение имеет тип, совпадающий с базовым типом указателя. Нетипизированные указатели разыменовать нельзя. Например: J:= p ^; {переменной j присваивается значение целого, расположенного по адресу p } - операции отношения. Из всех возможных операций отношения допускаются проверки равенства(=) и неравенства (< >).
Рис.21.3. Операции с указателями.
|
||
|
Последнее изменение этой страницы: 2016-09-19; просмотров: 843; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.236 (0.009 с.) |