Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Адресация данных






Физическая память в компьютерах с традиционной архитектурой имеет линейную организацию, т. е. представляет собой линейный «массив», состоящий из ячеек одинаковой длины. Базовой единицей данных для всех современных процессоров является байт (byte), который представляет собой 8-разрядную ячейку памяти, разряды которой нумеруются справа налево от 0 до 7. При этом правые разряды называются младшими, а левые – старшими. В каждом разряде может быть записано значение 0 или 1, такую величину называют 1 битом (bit). Таким образом 1 байт – это набор из 8 битов, т. е. последовательность из 8 нулей и единиц. Байты (ячейки памяти) нумеруются от 0, и порядковый номер байта называется его адресом.

ПК на базе процессоров Intel позволяют адресовать также слова, двойные слова и квадрослова (для последних процессоров семейства). Слово (word) состоит из двух соседних байтов. Разряды слова также нумеруются справа налево от 0 до 15. Адресом слова считается адрес его младшего байта. Двойное слово (double word) – это уже четыре соседних байта, а разряды в нем нумеруются от 0 до 31. Квадрослова состоят из 8 байтов (64 битов).

Адрес ячейки еще не определяет ее однозначно, так как с одного и того же адреса может начинаться как байт, так и слово, двойное или квадрослово. Поэтому при чтении из памяти или при записи в память тем или иным способом указывается не только адрес ячейки памяти, к которой происходит обращение, но и ее длина. Ячейки памяти различной длины используются для хранения данных различных типов.

Таким образом, доступ к данным в памяти осуществляется по адресу занимаемой ими ячейки памяти. Для всех данных, описанных в программе, отводятся свои ячейки памяти. Для доступа к ним в командах обработки данных в качестве операндов указываются их адреса и длины. Команды также считываются из памяти по задаваемым процессором адресам. Схема взаимодействия ЦП и ОП показана на рис. 4.5.

Рис. 4.5. Схема обмена между процессором и памятью

Большая часть команд процессора работает с кодами данных (операндами). Одни команды требуют входных операндов (одного или двух), другие выдают выходные операнды (чаще один операнд). Входные операнды называются еще операндами-источниками, а выходные называются операндами-приемниками. Все эти коды операндов (входные и выходные) должны где-то располагаться. Они могут находиться во внутренних регистрах процессора (наиболее удобный и быстрый вариант). Они могут располагаться в системной памяти (самый распространенный вариант). Наконец, они могут находиться в устройствах ввода/вывода (наиболее редкий случай). Определение места положения операндов производится кодом команды. Причем существуют разные методы, с помощью которых код команды может определить, откуда брать входной операнд и куда помещать выходной операнд. Эти методы называются методами адресации. Эффективность выбранных методов адресации во многом определяет эффективность работы всего процессора в целом.

Количество методов адресации в различных процессорах может быть различным. Рассмотрим несколько типичных методов адресации операндов, используемых сейчас в большинстве микропроцессоров. Метод адресации определяет способ вычисления адреса операнда в памяти.

Непосредственная адресация (рис. 4.6) предполагает, что операнд (входной) находится в памяти непосредственно за кодом команды. Операнд обычно представляет собой константу, которую надо куда-то переслать, к чему-то прибавить и т.д. Например, команда может состоять в том, чтобы прибавить число 6 к содержимому какого-то внутреннего регистра процессора. Это число 6 будет располагаться в памяти, внутри программы в адресе, следующем за кодом данной команды сложения. Фактически операнд является частью команды, располагается в специально отведенном для него поле в коде программы.

Рис. 4.6. Непосредственная адресация

Рис. 4.7. Прямая адресация

Прямая (или абсолютная) адресация (рис. 4.7) предполагает, что операнд (входной или выходной) находится в памяти по адресу, код которого находится внутри программы сразу же за кодом команды. Например, команда может состоять в том, чтобы очистить (сделать нулевым) содержимое ячейки памяти с адресом 1 000 000. Код этого адреса 1 000 000 будет располагаться в памяти, внутри программы в следующем адресе за кодом данной команды очистки.

Регистровая адресация (рис. 4.8) предполагает, что операнд (входной или выходной) находится во внутреннем регистре процессора. Например, команда может состоять в том, чтобы переслать число из нулевого регистра в первый. Номера обоих регистров (0 и 1) будут определяться кодом команды пересылки.

Рис. 4.8. Регистровая адресация

Косвенно-регистровая адресация предполагает, что во внутреннем регистре процессора находится не сам операнд, а его адрес в памяти (рис. 4.9). Например, команда может состоять в том, чтобы очистить ячейку памяти с адресом, находящимся в нулевом регистре. Номер этого регистра (0) будет определяться кодом команды очистки.

Рис. 4.9. Косвенная адресация

Реже встречаются еще два метода адресации.

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

Автодекрементная адресация работает похоже на автоинкрементную, но только содержимое выбранного регистра уменьшается на единицу или на два перед выполнением команды. Эта адресация также удобна при обработке массивов данных. Совместное использование автоинкрементной и автодекрементной адресаций позволяет организовать память стекового типа.

Из других распространенных методов адресации можно упомянуть об базовых и индексных методах, которые предполагают для вычисления адреса операнда прибавление к содержимому регистра заданной константы. Код этой константы располагается в памяти непосредственно за кодом команды, включающим адресные регистры. Эти методы основаны на использовании относительной адресации.

Физическая память организована таким образом, что для адресации размещаемых в ней данных нужно указать номер первого байта, начиная с которого размещается адресуемый объект. Этот адрес – номер байта – называют физическим адресом. Для работы с памятью используется две шины: шина адреса и шина данных (рис. 4.5). Разрядность шины адреса, как уже указывалось выше, определяет размер адресуемой памяти. Именно по шине адреса процессор передает физический адрес адресуемого объекта. По шине данных передается информация (операнды и команды), прочитанная из памяти или записываемая в память. Упрощенная схема взаимодействия процессора и памяти через шины показана на рис. 4.5. Однако программисты при написании программ (за редким исключением) работают не с физическими адресами определяемых ими объектов, а с их символическими именами. При трансляции каждому имени ставится в соответствие определенный адрес.

Ранние языковые процессоры производили объектные программы в форме абсолютных машинных кодов: ячейки памяти, физические адреса, где должны были размещаться программы и данные во время выполнения, определялись на этапе трансляции. Это означало, что в текст программы при трансляции, чтобы избежать конфликтов при распределении памяти, нужно было включать исходные тексты всех библиотечных процедур, невозможно было объединить отдельно оттранслированные программы. Для таких программ выполнялась абсолютная (т.е. по фиксированному, заранее определенному адресу) загрузка.

Эти трудности были преодолены при создании трансляторов, получающих программы в перемещаемой форме, позволяющей выполнять настройку программ на конкретные физические адреса непосредственно перед ее выполнением, при загрузке, а также в ходе выполнения программы. Возможность такой настройки реализуется через использование относительной адресации вместо абсолютных адресов: логические адреса, определяемые для каждого объекта в программе при трансляции, отделяются от физических адресов памяти (рис. 4.10).

Рис. 4.10. Относительная адресация

Значение адреса определяется не относительно начала физической памяти, а относительно начала адресного пространства, используемого программой. Таким образом, логический адрес определяется двумя компонентами: адресом начала выделенной программе области памяти и смещением относительно начала этой области. Смещение – это константа, определяемая при трансляции, а базовый адрес, относительно которого ведется отсчет смещений, определяется при загрузке программы или динамически, при ее выполнении, перед первым обращением к информации из данной области. Схема адресации при использовании базового адреса и смещения показана на рис. 4.10. Физический (абсолютный) адрес A в данном случае вычисляется как сумма базового адреса B и смещения: A = B + Offset.

Для хранения базовых адресов выделенных программе областей памяти удобно использовать специальные адресные регистры.

Смещение может вычисляться различными способами – в зависимости от выбранного режима адресации.

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






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.