Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 512; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.32.7 (0.009 с.) |