Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
gosi.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
528.21 Кб
Скачать

13 Способы адресации операндов и команд.

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

Непосредственная адресация позволяет задавать фиксированное значение операнда непосредственно в адресной части команды.

Собственная адресация при этом отсутствует, т.к. ОП=Aк. Непосредственно адресация удобна при работе с константами. Расширение формата команд за счет указания самого операнда в адресных кодах команд.

Неявная адресация – способ адресации, при котором в команде не содержатся явные указания об адресе операнда. При неявной адресации код операции определяет адрес операнда, при этом в адресной части команды не указывается, но этот адрес подразумевается. Неявно адресуемыми операндами могут быть отдельно адресуемые регистры процессора, например, аккумулятор, индексный и базовый регистры, указатель стека и др.

Косвенная адресация – это эффективный и важный способ адресации, при котором адрес, указываемый в команде, является указателем ячейки, содержащей исполнительный адрес операнда в памяти. Фактически, при косвенной адресации в команде указывается адрес адреса. Для обозначение косвенной адресации используют запись вида:

Аи = Ак

Частым видом косвенной адресации явл. Регистровая косвенная операция, при которой исходный адрес команды адресует общий регистр процессора, содержащий адрес операнда в памяти.

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

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

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

Базирование или относительная адресация широко применяется для адресации памяти, представленной виде блока фиксированного или произвольного размера. Блоки фиксированного размера называют страницами, а произвольного – сегментами. Соответственно различают память со страничной организацией и сегментированную память. Полная информация, необходимая для определения физического адреса произвольной ячейки памяти подобной организации содержит указатель адреса, который включает в себя идентификатор базового адреса блока и смещения внутри блока. Для определения базового адреса блока (сегмента или страницы) используют различные способы идентификации. Чаще всего базовые адреса блоков хранятся в специальных таблицах, а идентификатор указателя адреса служит индексом или номером строки такой таблицы. Разрядность базового адреса, в общем случае, определяет максимальное число адресуемых блоков памяти, а число бит в смещении задает максимальный размер блока. Исполнительный или физический адрес операнда образуется в результате суммирования базового адреса блока и смещения внутри блока. Важной особенностью базирования или относительной адресации является то, что при изменении базовых адресов блоков их содержимое не меняется и блоки можно свободно перемещать в пределах всего адресного пространства памяти. Благодаря этому свойству, базирование обеспечивает очень важную функцию операционных систем, так называемую перемещаемость программы.

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

Аи = (СК) +disp (32)

Относительную адресацию часто используют в командах условной и безусловной передачи управления и для адресации специальных структур данных таких как массивы, структуры и т.д. Базовые адреса операндов, при использовании относительной адресации обычно размещаются в регистрах процессора. Т.к. одно из составляющих исполнительного адреса находится в адресуемом команде регистре, относительную адресацию данных иногда называют модифицированным способом косвенной адресации или косвенной адресацией со смещением. В зависимости от способа использования адресуемого в команде регистра различают два вида косвенной адресации со смещением:

- базовую адресацию

- индексную адресацию

Регистры, используемые в команде, которые соответствуют этим способам адресации, называют базовыми и обозначают В и индексными I.

Индексная адресация

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

Аи =(I) + disp

И.а. применяется если надо считать список данных из последовательных ячеек данных не подряд, а с некоторым шагом, указанном в индексе. Например, когда элементы матрицы, записанные по строкам необходимо прочитать по столбцам. Данный способ адресации особенно эффективен если в процессе используется механизм автоматического приращения или уменьшения содержимого индексного регистра при каждом обращении к нему. В целом, индексная адресация является развитием метода косвенной адресации.

Базовая адресация

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

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

Аи = (В)+disp

Базово-индексная адресация

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]