- Методы адресации
- Содержание
- Задача адресации
- Способы адресации
- Подразумеваемый операнд
- Подразумеваемый адрес
- Непосредственная адресация
- Прямая адресация
- Относительная (базовая) адресация
- Укороченная адресация
- Регистровая адресация
- Косвенная адресация
- Адресация слов переменной длины
- Стековая адресация
- Автоинкрементная и автодекрементная адресации
- Индексация
- Способы указания адреса
- Способ для указания адресов
Методы адресации
Методы адресации — в вычислительной технике способы указания на определённую ячейку (ячейки) памяти ЭВМ процессору с целью записи, чтения данных или передачи управления.
Содержание
Задача адресации
Задача адресации заключается в указании на текущую ячейку памяти, к которой происходит обращение процессора. Адрес текущей ячейки как правило записывается в один или несколько регистров процессора. Методы адресации памяти имеют особое значение при программировании на языке низкого уровня (языке ассемблера). Существует два вида адресации: прямая и косвенная.
Способы адресации
Подразумеваемый операнд
В команде может не содержаться явных указаний об операнде; в этом случае операнд подразумевается и фактически задается кодом операции команды.
Подразумеваемый адрес
В команде может не содержаться явных указаний об адресе участвующего в операции операнда или адреса, по которому должен быть размещен результат операции, но этот адрес подразумевается.
Непосредственная адресация
В команде содержится не адрес операнда, а непосредственно сам операнд. При непосредственной адресации не требуется обращения к памяти для выборки операнда и ячейки памяти для его хранения. Это способствует уменьшению времени выполнения программы и занимаемого ею объема памяти. Непосредственная адресация удобна для хранения различного рода констант.
Прямая адресация
Адрес указывается непосредственно в виде некоторого значения, все ячейки располагаются на одной странице. Преимущество этого способа в том, что он самый простой, а недостаток — в том, что разрядность регистров общего назначения процессора должна быть не меньше разрядности шины адреса процессора.
Относительная (базовая) адресация
При этом способе адресации исполнительный адрес определяется как сумма адресного кода команды и базового адреса, как правило хранящегося в специальном регистре — регистре базы.
Относительная адресация позволяет при меньшей длине адресного кода команды обеспечить доступ к любой ячейке памяти. Для этого число разрядов в базовом регистре выбирают таким, чтобы можно было адресовать любую ячейку оперативной памяти, а адресный код команды используют для представления лишь сравнительно короткого «смещения». Смещение определяет положение операнда относительно начала массива, задаваемого базовым адресом.
Укороченная адресация
В адресном поле командного слова содержатся только младшие разряды адресуемой ячейки. Дополнительный указательный регистр.
- Адресация с регистром страницы является примером сокращённой адресации. При этом вся память разбивается на блоки-страницы. Размер страницы диктуется длиной адресного поля.
Регистровая адресация
Регистровая адресация является частным случаем укороченной. Применяется, когда промежуточные результаты хранятся в одном из рабочих регистров центрального процессора. Поскольку регистров значительно меньше чем ячеек памяти, то небольшого адресного поля может хватить для адресации.
Косвенная адресация
Адресный код команды в этом случае указывает адрес ячейки памяти, в которой находится адрес операнда или команды. Косвенная адресация широко используется в малых и микроЭВМ, имеющих короткое машинное слово, для преодоления ограничений короткого формата команды (совместно используются регистровая и косвенная адресация).
Адресация слов переменной длины
Эффективность вычислительных систем, предназначенных для обработки данных, повышается, если имеется возможность выполнять операции со словами переменной длины. В этом случае в машине может быть предусмотрена адресация слов переменной длины, которая обычно реализуется путем указания в команде местоположения в памяти начала слова и его длины.
Стековая адресация
Стековая память, реализующая безадресное задание операндов, особенно широко используется в микропроцессорах и Мини-ЭВМ.
Автоинкрементная и автодекрементная адресации
Поскольку регистровая косвенная адресация требует предварительной загрузки регистра косвенным адресом из оперативной памяти, что связано с потерей времени, такой тип адресации особенно эффективен при обработке массива данных, если имеется механизм автоматического приращения или уменьшения содержимого регистра при каждом обращении к нему. Такой механизм называется соответственно автоинкрементной и автодекрементной адресацией. В этом случае достаточно один раз загрузить в регистр адрес первого обрабатываемого элемента массива, а затем при каждом обращении к регистру в нем будет формироваться адрес следующего элемента массива.
При автоинкрементной адресации сначала содержимое регистра используется как адрес операнда, а затем получает приращение, равное числу байт в элементе массива. При автодекрементной адресации сначала содержимое указанного в команде регистра уменьшается на число байт в элементе массива, а затем используется как адрес операнда.
Автоинкрементная и автодекрементная адресации могут рассматриваться как упрощенный вариант индексации — весьма важного механизма преобразования адресных частей команд и организации вычислительных циклов, поэтому их часто называют автоиндексацией.
Индексация
Для реализуемых на ЭВМ методов решения математических задач и обработки данных характерна цикличность вычислительных процессов, когда одни и те же процедуры выполняются над различными операндами, упорядоченно расположенными в памяти. Поскольку операнды, обрабатываемые при повторениях цикла, имеют разные адреса, без использования индексации требовалось бы для каждого повторения составлять свою последовательность команд, отличающихся адресными частями.
Программирование циклов существенно упрощается, если после каждого выполнения цикла обеспечено автоматическое изменение в соответствующих командах их адресных частей согласно расположению в памяти обрабатываемых операндов. Такой процесс называется модификацией команд, и основан на возможности выполнения над кодами команд арифметических и логических операций.
Источник
Способы указания адреса
Способом адресации операнда называются его различные формы представления в структуре поля команды. Способ адресации зависит от двух факторов:
а) от варианта доступа к данным;
б) от полноты представления адреса.
По варианту доступа к данным различают:
1. Непосредственная адресация (Immediate constants) — поле операнда непосредственно содержит данные, с которыми работает команда. Перед полем операнда (в большинстве случаев) ставится префикс #.
2. Прямая адресация (Direct Addressing) — префикса перед операндом нет. В поле операнда содержится адрес (ad) ячейки памяти, которая содержит данные. Эта адресация используется для внутренней памяти данных.
3. Косвенная адресация (Indirect Addressing) — перед операндом ставится префикс @. В поле операнда содержится адрес указателя — ячейки памяти, содержащей адрес ячейки памяти, которая содержит данные. Данный вид адресации может применяться при обращении к внутренней памяти данных ОЗУ (в качестве указателя могут использоваться регистры R0 и R1), а также к внешней памяти данных и памяти программ (в качестве указателя могут использоваться регистр DPTR).
Полнота представления адреса может быть:
1. Полная — в поле операнда находится либо полный элемент данных, либо полный адрес, которые могут иметь формат 1 или 2 байта.
2. Регистровая (неполная) (Register Instruction) — операнд занимает место в байте, содержащем код операции. Он содержит несколько младших бит (1 или 3) полного адреса ячейки памяти, то есть работа осуществляется с усеченным адресным пространством – регистровым банком. Таким образом, усеченный адрес – это номер регистра. В случае прямой адресации используется 3 бита полного адреса, что соответствует размеру регистрового банка 8 регистров (R0-R7). В случае косвенной адресации используется только 1 бит полного адреса, поэтому возможна работа только с регистрами R0 и R1. Достоинство: повышение быстродействия за счет одновременной выборки из памяти программ кода операции и операнда(ов), поэтому часто регистровый банк называют сверхоперативным запоминающим устройством (СОЗУ).
3. Неявная (Register-Specific Instructions) — операнд представляет собой уникальный регистр, операция осуществляется только с ним. В этом случае нет необходимости включать его адрес в программный код. Например, это операции с аккумулятором А и DPTR.
Читайте также:
|
Адресация | Вариант доступа к данным | |||
непосредственная | прямая | косвенная | ||
Полнота представления | полная | непосредственная полная | прямая полная | отсутствует |
регистровая (неполная) | не существует | прямая регистровая | косвенная регистровая | |
неявная | не существует | прямая неявная | косвенная неявная |
Таким образом, в зависимости от сочетания варианта представления адреса и полноты его указания существуют способы адресации, представленные в таблице 2:
1. Непосредственная полная адресация — когда в поле операнда представлен непосредственно элемент данных, т.е. число над которым выполняется операция, например: команда записи в аккумулятор непосредственного операнда — MOV A, #d (MOV A, #01H), двухбайтовая команда, в которой второй байт представляет непосредственный операнд #d (число 01H).
2. Прямая полная адресация – в поле операнда указывается адрес расположения операнда в памяти, например команда записи в аккумулятор содержимого ячейки памяти данных с прямым адресом — MOV A, ad(MOV A, 21Н), в которой второй байт представляет прямой адрес ad в памяти данных (адрес 21Н).
3. Прямая регистровая адресация – в поле кода операции (!) указывается трехбитный номер регистра rrr = 000÷1112, где расположен операнд. Поле адреса для данного операнда совмещено вместе с кодом операции в одном байте, например: команда инкремента рабочего регистра — INC Rn (00001rrr). Таким образом, изменяя номер регистра rrr, мы можем обращаться к любому из восьми рабочих регистров выбранного банка.
4. Косвенная регистровая адресация — в поле кода операции (!) указывается однобитный номер регистра i = 0÷12, в котором предварительно записан адрес расположения операнда в памяти, т.е. регистр выполняет роль указателя на фактический адрес. Поле адреса для данного операнда совмещено вместе с кодом операции в одном байте, например: команда инкремента ячейки памяти данных адрес которой находится в регистре Ri — INC @Ri (0000011i). Таким образом, изменяя номер регистра i, мы можем использовать регистры R0 и R1 в качестве указателей данных при косвенной адресации.
5. Прямая неявная адресация — код операции команды неявным образом определяет регистр (обычно это аккумулятор А), где находится операнд, например однобайтовая команда инверсии аккумулятора — CPL A.
6. Косвенная неявная адресация — код операции неявным образом определяет регистр (обычно это регистр DPTR, либо сумма (А+ DPTR)), который содержит фактический адрес, например команда относительного косвенного перехода – JMP @A+DPTR.
Длина или формат команды зависит от двух факторов:
а) от количества операндов, участвующих в операции;
б) от полноты представления адреса, т.е. от способа адресации.
В соответствии с этим команды микроконтроллера бывают однобайтовые, двухбайтовые и трехбайтовые, например:
команда сложить содержимое аккумулятора и регистра R3 – формат 1 байт;
команда переместить (копировать) содержимое ячейки памяти программ с косвенным адресом в аккумулятор – формат 1 байт;
команда вычесть с учетом займаиз содержимого аккумулятора содержимое ячейки памяти ОЗУ с прямым адресом 23Н – формат 2 байта;
команда переместить (копировать) в регистр R2 8-разрядное число #02Н – формат 2 байта;
команда переместить (копировать) в ячейку ОЗУ с косвенным адресом содержимое ячейки ОЗУ с прямым адресом – формат 2 байта;
команда переместить (копировать) в ячейку ОЗУ с прямым адресом 20Н содержимое ячейки ОЗУ с прямым адресом 32Н – формат 3 байта;
команда переместить (копировать) в регистр DPTR 16-разрядное число #107FH – формат 3 байта.
Дата добавления: 2015-02-10 ; просмотров: 12 ; Нарушение авторских прав
Источник
Способ для указания адресов
5.1. Способы адресации в командах языка Assembler .
Большинство команд процессора вызываются с аргументами, которые в ассемблере принято называть операндами. Например: команда сложения содержимого регистра с числом требует задания двух операндов – содержимого регистра и числа. Далее рассмотрены все существующие способы задания адреса хранения операндов – способы адресации.
Все имеющиеся способы адресации можно условно разделить на три группы: регистровая, непосредственная и с указанием адреса памяти. При этом адрес памяти можно задавать по-разному: прямым указанием символического обозначения ячейки памяти, указанием регистра, в котором хранится требуемый адрес, или и того и другого. Таким образом, третья группа включает, в сущности, целый ряд способов адресации. Они обычно носят названия: прямая, базовая, индексная, базово-индексная, а также базовая, индексная или базово-индексная со смещением.
5.1.1. Регистровая адресация.
Операнды могут располагаться в любых регистрах общего назначения и сегментных регистрах. Для этого в тексте программы указывается название соответствующего регистра, например: команда, копирующая в регистр АХ содержимое регистра ВХ, записывается как
5.1.2. Непосредственная адресация.
Некоторые команды (все арифметические, кроме деления) позволяют указывать один из операндов непосредственно в тексте программы. Например: команда
помещает в регистр АХ число 2.
5.1.3. Прямая адресация.
В команде указывается символическое обозначение ячейки памяти, над содержимым которой требуется выполнить операцию.
mov DL,meml ;Содержимое байта памяти с символическим именем meml
;пересылается в DL
Если нужно обратиться к ячейке памяти с известным абсолютным адресом, то этот адрес можно непосредственно указать в качестве операнда. Предварительно необходимо настроить какой-либо сегментный регистр на начало того участка памяти, в котором находится искомая ячейка. Пример:
mov AX, 0 ;Настроим сегментный регистр ES на
mov ES,AX ;самое начало памяти (адрес 0)
mov AX,ES:[0] ;АХ=содержимое слова с адресом 0000h:0000h
mov DX,ES:[2] / D Х=содержимое слова с адресом 0000h:0002h
Заметим, что в этом случае сегментный регистр надо указывать обязательно. Все остальные способы адресации относятся к группе косвенной адресации памяти.
5.1.4. Базовая и индексная адресация памяти.
Относительный адрес ячейки памяти находится в регистре, обозначение которого заключается в квадратные скобки. При использовании регистров ВХ или ВР адресацию называют базовой, при использовании регистров SI или DI — индексной. При адресации через регистры ВХ, SI или DI в качестве сегментного регистра подразумевается DS; при адресации через ВР — регистр SS. Таким образом, косвенная адресация через регистр ВР предназначена для работы со стеком. Однако при необходимости можно явно указать требуемый сегментный регистр. Еще раз отметим, что во всех базовых и индексных способах адресации операндом является содержимое ячейки памяти, адрес которой находится в том или ином регистре или вычисляется сложением содержимого двух регистров.
mov AL,[ВХ] ;Сегментный адрес предполагается в DS, смещение в ВХ
mov DL,ES:[ВХ] ;Сегментный адрес в ES, смещение в ВХ
mov DX,[ВР] ;Сегментный адрес в SS, смещение в ВР
mov AL,[DI] ;Сегментный адрес в DS, смещение в DI
5.1.5. Базовая и индексная адресации памяти со смещением.
Относительный адрес операнда определяется суммой содержимого регистра (ВХ, ВР, SI или DI) и указанного в команде числа, которое называют смещением.
mas db 1,2,5,3,7,9,8,3,4 ;Массив символов
mov BX,2 ;ВХ=индекс элемента в массиве
mov D L , mas[BX] ;В D L заносится третий элемент массива
В этом примере относительный адрес адресуемого элемента массива mas вычисляется как сумма содержимого ВХ (2) и значения символического обозначения mas, которое совпадает с относительным адресом начала массива mas. В результате в регистр D L будет загружен элемент массива mas с индексом 2, т.е. число 5. Предполагается, что базовый адрес сегмента, в который входит массив mas, загружен в DS. Такой же результат даст такая последовательность команд:
mov BX,offset mas ;ВХ=относительный адрес ячейки mas
Здесь относительный адрес адресуемого элемента массива mas вычисляется как сумма содержимого регистра ВХ и дополнительного смещения, задаваемого константой 2. Последняя команда может быть записана в следующем виде:
Адресация с помощью регистров SI и DI осуществляется аналогично. При использовании регистра ВР следует помнить, что в качестве сегментного регистра по умолчанию подразумевается регистр SS.
5.1.6. Базово-индексная адресация памяти.
Относительный адрес операнда определяется суммой содержимого базового и индексного регистров.
Допускается использование следующих пар:
Если в качестве базового регистра выступает ВХ, то в качестве сегментного подразумевается DS (первые две команды); при использовании в качестве базового регистра ВР сегментным регистром по умолчанию назначается SS (вторые две команды). При необходимости можно явно указать требуемый сегментный регистр.
mov ВХ,[ВР][SI] ;В ВХ засылается слово из стека(сегментный
;адрес в SS), а смещение вычисляется как
;сумма содержимого ВР и SI
mov BX,ES:[BP][SI] ;В ВХ засылается слово из сегмента, адрес которого
;находится в ES, а смещение вычисляется как
;сумма содержимого ВР и SI
mov ES:[BX+DI],АХ ;В ячейку памяти, сегментный адрес которой
;хранится в ES, а смещение равно сумме
;содержимого ВХ и DI, пересылается содержимое АХ
5.1.7. Базово-индексная адресация памяти со смещением.
Относительный адрес операнда определяется суммой трех величин: содержимого базового и индексного регистров, а также дополнительного смещения. Допускается использование тех же пар регистров, что и в базово-индексном способе; так же действующие правила определения сегментных регистров.
mov mas[ВХ][SI],10 ;Число 10 пересылается в ячейку памяти,
;сегментный адрес которой хранится в DS, а
;смещение равно сумме содержимого
;ВХ и SI и смещения ячейки mas
mov AX,[BP+2+DI] ;В АХ пересылается из стека слово,
;смещение которого равно сумме
;ВР, DI и «добавки» 2
Значительная часть рассмотренных выше способов адресации служит для обращения к ячейкам памяти. Таким образом, один и тот же конечный результат можно получить с помощью различных способов адресации. Например, все три приведенные ниже команды:
mov DL,mas[BX] ;В BХ заранее занесено число 3
mov DL,[SI][ВХ] ;В BХ заранее занесено число 3, а в SI — смещение mas
приведут к загрузке в регистр DL четвертого элемента массива mas (если выполняются описанные в комментариях условия). Однако команды с использованием различных способов адресации занимают различный объем памяти и выполняются за разное время. Так, первая из приведенных выше команд потребует для выполнения 15 машинных тактов, вторая — 18, а третья — 16. Разница невелика, однако при многократном выполнении команд в циклах суммарный эффект может быть значителен. С другой стороны, первые две команды занимают в памяти по 4 байта, а третья — только 2. Таким образом, тщательный выбор способов адресации позволяет в какой- то степени оптимизировать программы по времени выполнения или требуемой памяти, а иногда и по тому и по другому.
Источник