Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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



Прямая адресация: адрес операнда содержится в коде команды и обычно следует за кодом операции (рис. 1.5). Прямая адресация используется при работе с простыми переменными и константами, местоположение которых в памяти не меняется в процессе выполнения задачи. При прямой адресации Aи = Ак.

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

Непосредственная адресация позволяет задавать фиксированные значения операнда (Оп) непосредственно в адресной части команды (рис. 1.6). Собственно адресация при этом отсутствует, т. е. Оп = Ак, и при обращении к операнду нет необходимости обращаться к памяти. Непосред-ственная адресация удобна при работе с константами. Естественно, что непосредствен-ный операнд может быть задан только как операнд-источник и его формат не может превышать разрядность операционного блока МП. Недостатком непосредственной адресации является необходимость расширения формата команд за счет указания самого операнда в адресном поле команды.

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

Косвенная адресация — эффективный и важный способ адресации, при ко­тором адрес, указываемый в команде, является указателем ячейки, содер­жащей исполнительный ад­рес операнда в памяти. Фактиче­ски при кос­венной адресации в команде ука­зы­вается адрес ад­реса. Для обозна­чения косвен­ной адре­сации исполь­зуется запись вида Aи = (Ак). Частным случаем кос­венной адресацииявляется реги­стровая косвенная адреса­ция, при которой адрес, ука­зы­ва­емый в команде, определяет об­щий ре­гистр процессора с раз­ме­щенным в нем адресом операнда в памяти. Способ обращения к операнду с ис­поль­зованием косвенной адресации показан на рис. 1.7. С точки зрения затра­чива­емых разрядов для представления адреса,регистровая косвенная адреса­ция оказывается много эффективнее прямой адресации, поскольку при ее исполь­зовании в адресном поле команды указывается только адрес общего ре­ги­стра, а он много короче полного адреса операнда в памяти. Неслучайно кос­вен­ная адресация широко применяется в ВМ с коротким машинным словом. Од­на­ко регистровая косвенная адресация требует предварительной загрузки реги­стра косвенным адресом памяти и на это расходуется дополнительное время.

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

y = xi

Нетрудно заметить, что алгоритм вычисления суммы может быть представлен в виде циклической процедуры, повторяемой n раз. В каждом цикле, наряду с выполнением операции суммирования содержимого какого‑либо регистра, например аккумулятора, с последовательно выбираемыми из памяти элементами массива, необходимо осуществлять модификацию адреса для выбора следующего элемента массива и контролировать окончание цикла. Блок-схема алгоритма циклической обработки приведена на рис. 1.8.

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

Вход в цикл

                     
 
   
Инициализация параметров цикла
 
   
 
   
 
   
 
 
   
Рис. 1.8. Алгоритм циклической обработки


Развитием и модификацией метода косвенной адресации является относительная адресация или базирование. Это обобщенное название ряда методов адресации, обеспечивающих вычисление исполнительного адреса операнда в памяти в виде суммы базового значения адреса и «смещения» disp, указываемого в команде (рис. 1.9). Поскольку вычисление исполнительно-го адреса Аи связано с потерей времени, часто для определения адреса Аи операцию суммирования заменяют опе-рацией конкатенации (приписывания разрядов). В этом случае базовый адрес содержит старшие, а смещение — младшие разряды исполнительного адреса. При использовании конкатенации, в отличие от суммирования, базовый адрес может задавать не любую ячейку памяти, а только ячейки, адреса которых содержат нули в младших разрядах.

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

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

Собственно название относительная адресация закрепилось за способом адресации команд программной памяти, при котором базовый адрес размещается в счетчике команд (СК), а смещение disp, указываемое в команде, определяет адрес перехода относительно текущего значения счетчика команд

Аи = (СК) + disp.

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

Относительную адресацию также часто используют для адресации специальных структур данных таких, как массивы однотипных переменных, элементы записей и других. Базовые адреса операндов при использовании относительной адресации обычно размещаются в регистрах процессора (специальных или общего назначения). Так как одна из составляющих исполнительного адреса находится в адресуемом в команде регистре, относительную адресацию данных иногда называют модифицированным способом косвенной адресации или косвенной адресацией со смещением. В зависимости от способа использования адресуемого в команде регистра различают два вида косвенной адресации со смещением — базовую адресацию и индексную адресацию. Регистры, адресуемые в команде, которые соответ-ствуют этим способам адресации, называют базовыми B и индексными I.

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

Аи = (I) + disp.

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

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

Аи = (В) + disp.

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

Запись бывает простой и указываемой. В простой записи положение любого элемента зафиксировано, и к нему можно обратиться, используя прямую адресацию. По существу, простая запись совпадает с простой переменной. В указываемой записи положение элемента записи зависит от указателя (содержимого адресуемого в команде базового регистра).

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

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

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





Дата публикования: 2014-11-02; Прочитано: 3681 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...