Внутренняя память. Тема 1.6 Сегментация и адресация
Внутренняя память Внутренняя память ПК подразделяется на постоянную (ПЗУ) и оперативную (ОЗУ). Минимальной адресуемой единицей памяти является байт. Байты в памяти нумеруются последовательно, начиная с 0, и каждый байт имеет свой уникальный номер-адрес. Структура адресного пространства памяти ПК на примере РС Intel 8086 показана ниже. Таблица – Структура адресного пространства внутренней памяти ПК
Для непосредственного использования прикладными программами доступна большая часть основной оперативной памяти. ПЗУ состоит из специальных чипов, информация из которых, будучи однажды записана, в дальнейшем только считывается. В силу этого свойства, записанные в таких чипах данные и инструкции не могут быть изменены ( в английской транскрипции ПЗУ называется ROM – Read Only Memory, что означает “память только для чтения”). Расширенное ПЗУ включает постоянную BIOS и отвечает за устройства ввода/вывода, такие, как контроллер (устройство управления) винчестера и др. Основное ПЗУ системы обеспечивает самопроверку при включении компьютера, загрузку операционной системы с диска, рисование точек при выводе графики. Когда Вы включаете компьютер, ПЗУ управляет различными проверками и загрузкой специальных данных с диска в ОЗУ (заметим, что для программиста эта память недоступна). ОЗУ доступна программисту в качестве пространства для временного хранения данных и выполнения программ. При включении компьютера часть операционной системы загружается с винчестера в оперативную память. Остальная память из основного ОЗУ может использоваться программистом. Выполняемая прикладная программа находится в этой части ОЗУ и выводит результаты обработки на экран дисплея, принтер или устройства внешней памяти (например, НГМД или винчестер). После завершения одной прикладной программы операционная система может загрузить на ее место другую программу.
Выключение компьютера приводит к потере данных в ОЗУ, но не влияет на ПЗУ. Вот почему требуемые для дальнейшей обработки данные необходимо сохранять в долговременной памяти.
Тема 1. 6 Сегментация и адресация Процессор может обращаться к одному или более байтам памяти. Под словом в процессоре понимается двухбайтовая ячейка памяти. Для уяснения вопроса о размещении данных в ОЗУ, рассмотрим десятичное число 1315, шестнадцатеричный эквивалент которого равен 0529Н. Это значение может быть помещено в слово в ОЗУ. Оно состоит из старшего байта, значение которого равно 05, и младшего байта со значением 29 (привыкайте, что значения в памяти отображаются в шестнадцатеричном виде). Процессор хранит данные в памяти в инверсном виде: младший байт – по младшему адресу, а старший – по старшему, на 1 больше предыдущего. Поскольку дамп памяти (отображение содержимого ячеек памяти) представляется отладчиками ( TD, DEBUG) в порядке увеличения адресов байтов, интерпретировать значения слов или двойных слов надо справа налево. Например, значение 0529Н в памяти компьютера, начиная с адреса 04А26Н, будет храниться следующим образом: значение 29Н в байте с адресом 04А26Н, а 05 – 04А27Н. Нижеприведенный рисунок иллюстрирует размещение слова в памяти и в регистре. При программировании на ассемблере надо ясно представлять себе разницу между адресом ячейки памяти и ее значением. В рассматриваемом нами примере ячейка, имеющая адрес 04А26, хранит значение 29, а ячейка с адресом 04А27 – 05. В описаниях работы и в алгоритмах обработки информации часто адрес называется указателем переменной, а содержимое указателя – значением переменной..
Младший байт Старший байт
Память
Адрес 04А26Н Адрес 04А27Н Рисунок 4. 2 Расположение байтов слова в памяти компьютера и в регистре
Сегменты – это специальные области, определяемые в программе для хранения разных функциональных частей программы: кода программы (алгоритма обработки данных), переменных программы (значений данных), рабочих ячеек для временного хранения промежуточных значений (в программах такая структура называется стеком). Максимальный размер сегмента в реальном режиме может достигать 64К байт, но в каждой программе сегмент занимает столько места в ОЗУ, сколько требуется для размещения команд программы или обрабатываемых программой данных. Начало каждого сегмента (адрес, в который заносится первая команда или первая описываемая переменная) фиксируется (записывается) в сегментном регистре. В реальном режиме используются 3 основные сегмента и соответствующих сегментных регистра: кодовый – CS, данных – DS, стека – SS. Сегментный регистр CS содержит адрес инструкции, к которой обращается ОС для начала выполнения программы. Сегментный регистр DS адресует область переменных и ячеек, зарезервированных для результатов обработки данных. Сегментный регистр SS содержит адрес специальной структуры для временного сохранения данных или данных, используемых программой в собственных “вызываемых” подпрограммах. Сегмент начинается с границы параграфа, т. е. с адреса, кратного 16 (10Н). Поскольку для всех адресов, делящихся нацело на 16, младший шестнадцатеричный разряд равен 0, разработчики компьютера решили не хранить этот разряд в сегментном регистре, уменьшив за счет этого размер регистра на 4 бита. Поэтому адрес сегмента 038Е0Н будет хранится в сегментном регистре как 038ЕН. При необходимости ссылки на физический (фактический) адрес начала сегмента, такой адрес будем записывать в виде 038Е[0]Н.
В программе все ячейки памяти в сегменте нумеруются относительно адреса в соответствующем сегментном регистре. Количество байт от начала сегмента до любого адресуемого в сегменте байта называется смещением (offset). В реальном режиме работы смещение в сегменте размером 64К байт должно изменяться от 0000Н до FFFFH, т. е. для указания смещения в сегменте достаточно 16 двоичных разрядов. Т. о., имея 2 16-битовых регистра для адреса начала сегмента и смещения внутри сегмента, можно адресовать память в 1М байт (не имея сегментации потребовалось бы для адресации ячеек такой памяти 20 двоичных разрядов! ). Чтобы обратиться к любой ячейке памяти в сегменте, процессор определяет физический адрес ячейки, складывая значения в сегментном регистре со смещением, при этом не забывая восстановить “отрезанный” шестнадцатеричный нуль младшего разряда сегментного регистра. Например, если в сегменте с начальным адресом 038Е[0]Н команда программы имеет смещение 0032Н, то физический адрес такой команды в ОЗУ будет 038Е[0]Н+0032Н=03912Н. Эту операцию определения физического адреса в ОЗУ процессор выполняет автоматически. Итак, в компьютере существуют 2 основные схемы адресации: 1) абсолютный или физический адрес, представляющий собой 20-разрядное число, прямо указывающее на определенную ячейку ОЗУ; 2) адрес в системе сегмент: смещение, состоящий из начального адреса сегмента и значения смещения. Каждая составляющая сегмент: смещение представляет собой 16-разрядное число. (Аналогом абсолютной адресации была бы последовательная нумерация всех зданий в городе, а аналогом системы сегмент: смещение является определение адреса по улице и номеру дома на этой улице). Программисты редко имеют дело с абсолютной адресацией и даже редко обращают внимание на начало сегмента ( ОС сама в большинстве случаев записывает в сегментный регистр соответствующие адреса), а вот смещение внутри сегмента часто приходится учитывать в программах обработки
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|