русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Сегментация и адресация


Дата добавления: 2015-06-12; просмотров: 846; Нарушение авторских прав


Процессор может обращаться к одному или более байтам памяти. Под словом в процессоре понимается двухбайтовая ячейка памяти. Для уяснения вопроса о размещении данных в ОЗУ, рассмотрим десятичное число 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-разрядное число.

(Аналогом абсолютной адресации была бы последовательная нумерация всех зданий в городе, а аналогом системы сегмент:смещение является определение адреса по улице и номеру дома на этой улице).

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

 



<== предыдущая лекция | следующая лекция ==>
 | ЭЛЕКТРОННЫХ УСТРОЙСТВ


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.818 сек.