Главная » Просмотр файлов » Основы программирования

Основы программирования (947332), страница 37

Файл №947332 Основы программирования (Иванова Г.С. Основы программирования) 37 страницаОсновы программирования (947332) страница 372013-09-15СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 37)

Для обращения к конкретному байту необходимо знатьего номер, который называют его физическим адресом.Память принято делить на слова, двойные слова и параграфы. Словоимеет длину 2 байта, двойное слово ~ 4 байта, а параграф - 16 байт.При работе с памятью используется адресация по схеме «база + смеще­ние» (рис. 7.1). При этом адрес конкретного байта М определяется как адреснекоторого заданного байта А5 (адрес базы) + расстояние до требуемого бай­та AQ^ (смещение),2127. Программированиес использованием динамической памятиВ микропроцессорах фирмы Intel(начиная с i8086) в качестве адреса базыиспользуют адреса, кратные 16.

Четыре 0 1 2 3 4 5последних бита такого адреса равны О, иМих не хранят, а аппаратно добавляют привычислении физического адреса.Рис. 7.1. Адресация по схемеНепрерывный участок памяти, име­«База + смещение»ющий длину не более 64 КБ и начинаю­щийся с адреса, кратного 16 (0,16,32, ), называют сегментом. Адрес нача­ла сегмента принимают за базу для всего сегмента. Адрес базы сегмента безпоследних четырех бит называют сегментным.Сегментный адрес и смещение имеют размер по 16 бит (слово). Физи­ческий адрес, получаемый при их сложении с учетом отброшенных четырехбит (рис.

7.2), имеет размер 20 бит и может адресовать память объемом 2^^байт или 1 МБ.Максимальное смещение равно 2^^-1, что соответствует 64 КБ памяти.Таким образом, относительно одной базы можно адресовать не более 64 КБпамяти, что ограничивает размер сегмента.Примечание. Современные модели микропроцессоров используют адреса большей дли­ны с отличающейся схемой получения физического адреса, что учитывается версиями Pascal,предназначенным для работы «под Windows», но принцип адресации по схеме «база+смещение» используется и там.Программа и данные хранятся в памяти фрагментами, каждый из кото­рых расположен в своем сегменте. Различают три вида сегментов: кодов,данных и стека. В сегментах кодов хранится собственно программа.

В сег­ментах данных размещаются глобальные переменные и константы. Сегментстека интенсивно используется в процессе выполнения программы: при вы­зове подпрограмм в стек записывается адрес возврата, в нем размещаютсялокальные переменные, копии параметров-значений, адреса параметров-пе­ременных и параметров-констант и т.п. (см. фрейм активации в парагра­фе 5.6).В процессе работы сегментные адреса хранятся в специальных сегмент­ных регистрах:16 битCS - адрес базы сегмента кодов;DS - адрес базы сегмента данных;SS - адрес базы сегмента стека.Сегментный адрес+0000СмещениеФизический адресДоступ к конкретным участ­кам сегмента осуществляется черезсоответствующие смещения.20 битРис.

7.2. Получение физического адреса213Часть 1. Основы алгоритмизации и процедурное программированиеПри записи адреса в память отдельно со­храняются сегментный адрес и смещение(рис. 7.3).В Borland Pascal для работы с адресами ис­пользуется специальный тип данных - указа­тель. Данные этого типа включают два поля ти­па word и хранят соответственно сегментныйСегментныйСмещениеадрес2 байта2 байтаРис. 7.3. Структуразаписи адреса в памятьадрес и смещение.Различают указатели двух типов: типизированные и нетипизированные.Типизированные указатели содержат адреса, по которым в памяти раз­мещаются данные определенных типов. Используя эти указатели с даннымиуказанных типов, можно выполнять операции, предусмотренные базовымтипом.

Синтаксическая диаграмма объявления типизированного указателяприведена на рис. 7.4.Например:Туре tpi=4nteget;Varpi.tpi;{объявляем тип «указатель на целое»}{объявляем переменную этого типа}или без предварительного объявления типа:Varpi: ^integer; {объявляем переменную типа «указатель на целое»}Нетипизированные указатели хранят просто адреса, которые не связа­ны с данными конкретных типов. Для их объявления используют зарезерви­рованное слово pointer. Например:Varр:pointer;...Указатели - единственное исключение из общего правила, согласно ко­торому все ресурсы перед использованием должны быть описаны.

Для нихдопускаются описания вида:Турерр = ^регсоп;{тип person еще не определен!}регсоп = record{определение типа person}пате: string:next: рр;end;...-<АИдентификаторбазового типаРис. 7.4. Синтаксическаядиаграмма <Объявлениетипизированного указателя>214Для указателей, которые не хранят ни­каких адресов, введена константа «нулевойадрес» с именем nil. Константу nil можноприсваивать указателю любого типа.Инициализация указателей. Для объ­явления инициализированных указателейиспользуют типизированные константы, но7. Программирование с использованием динамической памятиединственное значение, которое может быть присвоено указателю при ини­циализации - это значение nil.

Например:Constp:^real=nil;...Операции над указателями. Над значениями указателей возможныследующие операции.Присваивание, При выполнении этой операции указателю присваивает­ся значение другого указателя или nil. Допускается присваивать указателютолько значение того же или неопределенного типа.Например:Varр1, р2: ^integer;рЗ: ^real;р: pointer;{допустимые операции}pJ:=p2; р:=рЗ; р1:=р; pl:=nil; р:=пП;(недопустимые операции}рЗ:=р2; pJ:=p3;,..Получение адреса.

Это унарная операция, которая строится из знакаоперации - символа @ (коммерческое а) и одного операнда - переменнойлюбого типа. Результат операции - указатель типа pointer, который можноприсвоить любому указателю.Например:Var i.integer;pi: ^integer;...pi:=@i; {указатель pi будет содержать адрес переменной i}Доступ к данным по указателю (операция разыменования). Чтобы по­лучить доступ к переменной по указателю, необходимо после переменной типизированного указателя поставить знак «'^».

Полученное значение имееттип, совпадающий с базовым типом указателя. Нетипизированные указателиразыменовывать нельзя.Например:j:=pi^; {переменной] присваивается значение целого, расположенно­го по адресу pi}pi^:=pi^-^2; {целое значение, расположенное по адресу pi, увеличива­ется на 2}В табл. 7.1 показано, как выполняются операции с указателями.215Часть 1. Основы алгоритмизации и процедурное программированиеТ а б л и ц а 1ЛРезультатоперацииФрагментпрограммыОписание операцииpiConst i:integer=];Var pi: ^integer;Т 11?^1 ^ 1Создается инициализированнаяпеременная i и указатель на це­лое pipi\1pi:=@i;N'1pi^:^pi^j^2;Указателю pi присваивается ад­рес переменной i1 1pi\1\ .Значение, адрес которого нахо­дится в pi, увеличивается на 21 3 1pi:-nil;pi0 1\|Запись в pi константы «нулевойадрес»I ^1Операции отношения.

Из всех возможных операций отношения допус­каются только операции проверки равенства (=) и неравенства (< >). Этиоперации проверяют соответственно равенство и неравенство адресов. На­пример:sign:=pl=p2; {переменная sign логического типа получает значениеtrue или false в зависимости от значений указателей}илиifplonilthen ... {проверка адреса}Поскольку в качестве базового типа типизированного указателя можетбыть использован любой тип, допустимо определять «указатель на указа­тель». Например, если переменную ppi описать и инициализировать следую­щим образом:2167.

Программирование с использованием динамической памятиConst i:integer^ 1;Var pi: integer;ppi: ""pi;ppi\\pipi:=@i;ppi:=@pi; ...\\i1Рис. 7.5. Указатель науказательTO будет реализована схема, изображенная нарис. 7.5.Для получения значения переменной i не­обходимо дважды применить операцию разы­менования. В нашем случае ppi^^ имеет типinteger и равно 1.Процедуры и функции, работающие с указателями. Для работы суказателями в Паскале предусмотрены стандартные функции, облегчающиеи упрощающие выполнение часто встречающихся операций.1.

Функция ADDR(x): pointer - возвращает адрес объекта х, в качествекоторого может быть указано имя переменной, функции, процедуры. Выпол­няет те же действия, что и операция «@».2. Функция SEG(x): word - возвращает сегментный адрес указанногообъекта.3. Функция OFS(x): word- возвращает смещение указанного объекта.4. Функция CSEG: word- возвращает текущее значение сегментного ре­гистра CS - сегментный адрес сегмента кодов.5. Функция DSEG: word- возвращает текущее значение сегментного ре­гистра DS - сегментный адрес сегмента данных.6. Функция PTR(seg,ofs:word):pointer - возвращает значение указателяпо заданным сегментному адресу seg и смещению ofs.Преобразование типов данных с использованием типизированныхуказателей.

Как отмечалось ранее, типизированный указатель связываетсяс некоторым типом данных и адресует вполне определенную область памя­ти, соответствующую длине внутреннего представления своего типа. Еслиуказателям разного типа присвоить один и тот же адрес, то каждый из них бу­дет рассматривать содержимое области в соответствии с внутренним пред­ставлением своего типа. Эта особенность указателей позволяет использоватьих для неявного преобразования типа.Необходимо помнить, что для присвоения разнотипным указателям од­ного и того же адреса следует использовать нетипизированные указатели, ли­бо задавать абсолютное значение требуемого адреса.Например:Var L:longint;{длинное целое число}Р1:^аггау[1..4] of byte; {указатель на область длиной 4 байта}k:byte;217Часть J.

Характеристики

Тип файла
PDF-файл
Размер
13,06 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6352
Авторов
на СтудИзбе
311
Средний доход
с одного платного файла
Обучение Подробнее