Способ для указания адресов

Методы адресации

Методы адресации — в вычислительной технике способы указания на определённую ячейку (ячейки) памяти ЭВМ процессору с целью записи, чтения данных или передачи управления.

Содержание

Задача адресации

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

Способы адресации

Подразумеваемый операнд

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

Подразумеваемый адрес

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

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

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

Прямая адресация

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

Относительная (базовая) адресация

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

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

Укороченная адресация

В адресном поле командного слова содержатся только младшие разряды адресуемой ячейки. Дополнительный указательный регистр.

  • Адресация с регистром страницы является примером сокращённой адресации. При этом вся память разбивается на блоки-страницы. Размер страницы диктуется длиной адресного поля.

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

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

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

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

Адресация слов переменной длины

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

Стековая адресация

Стековая память, реализующая безадресное задание операндов, особенно широко используется в микропроцессорах и Мини-ЭВМ.

Автоинкрементная и автодекрементная адресации

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

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

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

Читайте также:  Ненадлежащий способ правовой защиты

Индексация

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

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

Источник

Способы указания адреса

Способом адресации операнда называются его различные формы представления в структуре поля команды. Способ адресации зависит от двух факторов:

а) от варианта доступа к данным;

б) от полноты представления адреса.

По варианту доступа к данным различают:

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.

Читайте также:
  1. B.6.4.1. Способы выделения текста.
  2. I. ОБЩИЕ УКАЗАНИЯ.
  3. II. Методические указания по проведению занятия.
  4. IV-1. МЕТОДИЧЕСКИЕ УКАЗАНИЯ ПО ВЫПОЛНЕНИЮ ДОМАШНЕЙ КОНТРОЛЬНОЙ РАБОТЫ №1.
  5. URL-адреса
  6. V. Способы и методы обеззараживания и/или обезвреживания медицинских отходов классов Б и В
  7. VII.2.2) Способы приобретения права собственности.
  8. XII. Способы оплаты труда
  9. Адреса отправителя и получателя
  10. Адресация в Internet
Адресация Вариант доступа к данным
непосредственная прямая косвенная
Полнота представления полная непосредственная полная прямая полная отсутствует
регистровая (неполная) не существует прямая регистровая косвенная регистровая
неявная не существует прямая неявная косвенная неявная

Таким образом, в зависимости от сочетания варианта представления адреса и полноты его указания существуют способы адресации, представленные в таблице 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. Таким образом, тщательный выбор способов адресации позволяет в какой- то степени оптимизировать программы по времени выполнения или требуемой памяти, а иногда и по тому и по другому.

Источник

Читайте также:  Калий магний свинец медь способ электролиза
Оцените статью
Разные способы