Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Addr_Введ.doc
Скачиваний:
9
Добавлен:
18.11.2019
Размер:
2.01 Mб
Скачать

2. Адресация данных и переходов на уровне операнда

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

Непосредственная (immediate) адресация данных.

Адресация называется непосредственной, если значение операнда содержится в коде команды.

Следует различать адресацию операнда в формате байт и адресацию в формате два байта – слова (word).

В первом случае, 8-разрядные данные представляются вторым байтом кода команды.

Во втором случае (формат word), 16-разрядные данные представляются вторым и третьим байтами команды.

С труктура машинных кодов команд, адресующих однобайтные операнды показана на рисунке 1, двухбайтные– на рис.2

При непосредственной адресации адресом однобайтного операнда является адрес ячейки программной памяти следующий за первым байтом КК

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

Для анализа особенностей данного типа адресации целесообразно рассмотреть команду MVI r,data.

Команда обеспечивает загрузку непосредственного операнда (data), заданного вторым байтом КК, в любой программно доступный регистр процессора. Формально команда описывается как (r) ←data.

Н а рисунке 3 показано размещение двухбайтного кода рассматриваемой команды в ячейках памяти начиная с адреса КК:.

Р исунок 4 иллюстрирует процедуру реализации команды, использующей непосредственную адресацию операнда в формате байт.

Команда, содержащая непосредственный операнд, реализуется за два цикла — OF и MR.

Цикл OF (Opcode fitch). В этом цикле (4 такта) процессором осуществляются следующие действия.

По адресу команды, содержащемуся в РС, обеспечивается выборка из программной памяти первого байта кода команды.

После выборки байт принимается в Регистр команд (IR).

В первом байте содержится код операции (Коп ,OPcode), который, в свою очередь включает адрес (код) регистра–приемника.

В такте t2 цикла OF инкрементируется программный счетчик, тем самым формируется адрес второго байта КК.

Далее по Коп, принятом в IR в предыдущих тактах процессором осуществляется следующая последовательность действий

  • команда идентифицируется

  • определяется необходимость довыборки второго байта команды – непосредственного операнда

  • определяется имя регистра–приемника непосредственного операнда

Далее процессор переходит к реализации следующего цикла.

Цикл MR (3 такта). В этом цикле осуществляется выборка из программной памяти второго байта КК. Этот байт – непосредственно–адресуемый операнд, который помещается в указанный в Коп регистр–приемник.

Таким образом, очевидны еще две особенности непосредственной адресации.

  • непосредственный операнд является частью программного кода.

  • источником операнда служит программная память.

Непосредственная адресация может быть применена и к двухбайтным операндам.

В качестве примера рассмотрена.

Она обеспечивает загрузку двухбайтного операнда (data) из программной памяти в регистровую пару– приемник (rp).

Команда – трехбайтная и формально описывается как (rp) ←data.

Первый байт – код операции, второй и третий байт непосредственный операнд. (Рис.2). Естественно, что команда занимает в программной памяти три последовательных ячейки. Причем, следует помнить, что младшему байту операнда соответствует младший адрес ячейки памяти, а старшему байту – следующий адрес. Такой способ организации обращения к памяти наз. ПАМЯТЬ С ОБРАТНЫМ ПОРЯДКАМ СЛЕДОВАНИЯ АДРЕСОВ.

Рисунком 5 поясняется процедура реализации командного цикла команды LXI rp,data.

Команда реализуется за три цикла: OF MRMR.

Цикл OF (Opcode fitch). В этом цикле (4 такта) по адресу, содержащемся в РС (Рис.5) обеспечивается выборка из программной памяти первого байта кода команды (КОп). Первый байт фиксируется в Регистре команд (IR) и содержит адрес (код) регистровой пары–приемника непосредственных данных.

По Коп, принятому в IR процессором осуществляется

  • идентификация команды

  • определяется необходимость довыборки второго и третьего байта кода команды т.е. – непосредственного операнда

  • идентифицируются имя регистровой пары–приемника непосредственного операнда.

После дешифрации Коп и инкрементации PC (формирование адреса младшего байта операнда) начинается исполнительная фаза команды.

Фаза образуется двумя последовательно реализуемыми циклами MR (Memory read).

Первый цикл MR (3 такта). В первом цикле MR осуществляется выборка младшего байта шестнадцатиразрядного операнда. Байт фиксируется в младшем байте регистровой пары–приемника (см. Рисунок 5).

Выполняется инкрементирование РС

Второй цикл MR (3 такта). В этом цикле из программной памяти выбирается старший байт операнда. Процедура аналогична выборке предшествующего байта.

Как и в случае однобайтного операнда, команда непосредственной адресации операнда в формате word имеет следующие особенности.

Первое. Операнды при этом способе адресации должны быть размешены в программной памяти и программным путем изменены быть не могут.

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

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

Однобайтные данные

пересылаются однобайтные инструментальные константы,

табличные данные,

слова–маски

и т.п.

Двухбайтные данные.

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

Прямая адресация данных (direct). При прямой адресации в коде команды содержится не операнд (как при непосредственной адресации), а адрес операнда. Источником операнда всегда является ячейка памяти.

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

Таким образом команды, использующие прямую адресацию – трехбайтные. (Рисунок 4).

На рисунке показана структура кода команды и его расположение в программной памяти. Как и ранее младшая часть адреса предшествует старшей ( ПАМЯТЬ С ОБРАТНЫМ ПОРЯДКАМ СЛЕДОВАНИЯ АДРЕСОВ)..

адресации – трехбайтные (Рисунок 4).

Примеры команд прямой адресации:

LDA 0FA1Ch ; загрузка A ← (FA1C), где (FA1C) ─ содержимое

;ячейки памяти, адрес которой указывается во ;втором и третьем байте КК

STA 032DEh ; сохранение (32DE)A, где (32DE) ─ адрес :ячейки памяти, в которую загружаются данные :из Аcc

Замечание. По формальным признакам (адрес в КК) к методу прямой адресации можно причислить и команды ввода и вывода In port и OUT port. Они выполняют соответственно операции A← (port) и (port) ← А. В этих командах адрес порта (port), в котором находится (принимается) операнд, также прямо указывается во втором байте команды. Однако, внешние устройства не использу­ются для хранения оперативных данных с их последующим использованием в вычислительном процессе (для этого целесообразно использовать оперативную память). Потому, тип адресации команд ввода и вывода In port и OUT port обычно не акцентируют, хотя по формальным признакам – это команды прямой адресации.

Рисунок 8 иллюстрирует метод прямой адресации.

В качестве примера рассмотрена команда LDA addr.

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

Команда реализуется за 4 цикла — OF, MR,MR,MR.

В первом цикле OF(4 такта) по адресу, содержащемся в РС обеспечивается выборка из программной памяти первого байта кода команды (КОп).

Код операции фиксируется в Регистре команд (IR) и дешифрируется.

По коду операции процессором

  • идентифицируется команда

  • определяется необходимость продолжения выборки второго и третьего байта КК (адреса операнда)

  • определяется, что регистром–приемником данных является Асс.

Инкрементирование PC, выполняемое в цикле OF обеспечивает формирование адреса следующего байта КК.

После дешифрации КОп , в последующих двух циклах MR,MR осуществляется выборка из памяти сначала младшего, а затем старшего байта адреса данных. Получаемые при выборке байты адреса последовательно размещаются соответственно в младшем (RAl ) и старшем (RAh ) байтах RA.

Затем реализуется исполнительная фаза команды.

Эта фаза состоит из одного цикла MR. В этом цикле по адресу загруженном в RA из памяти выбираются данные и фиксируются в Асс (регистр–приемник).

Таким образом, команда реализуется за четыре цикла и 13 тактов (4+3+3+3).

Прямая адресация обладает следующими особенностями:

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

  • с помощью команд с прямой адресацией может быть организован обмен в обе стороны т.е. процессор – память и память– процессор

  • прямая адресация является наиболее простой и “естественной”, но и наиболее неэкономичной.

Регистровая адресация данных (register). При такой адресации также как и в командах прямой адресации адреса операндов указываются в коде команды.

Однако, адресуются не ячейки памяти, а внутренние регистры процессора. Они являются либо источником операнда, либо его приемником.

Примеры команд регистровой адресации

MОV C,E ; команда пересылки данных CE. Содержимое

; регистра Е передается в регистр С

MОV B,D ; команда пересылки данных BD. Содержимое

; регистра D передается в регистр B

Известно, что для адресации любого программно–доступного регистра процессора достаточно трех бит (Таблица1).

.Таблица1 – Коды регистров и регистровых пар

Имена внутренних регистров и регистровых пар

Коды регистров и регистровых пар

В

000

С

001

D

010

E

011

H

100

L

101

A

111

M

110

BC

00

DE

01

HL

10

SP

11


Поэтому для идентификации команды и указания адресов приемника и (или) источника данных достаточно восьми бит.

Команды регистровой адресации – однобайтные. Структура байта КК регистровой адресации очевидна из Рисунка 9.

Код операции (первый и единственный байт), идентифицирующий команду, содержит два трехбитных поля. В этих полях указывается код регистра–источника (sss – source) и код регистра–приемника (ddd– distination) данных. Это обеспечивает адресацию операндов. путем указания в КК кода (адреса) с регистра.

Способ реализации регистровой адресации иллюстрируется на примере команды MOV R1,R2 (Рисунок 9)

Команда обеспечивает пересылку данных (операнда) из внутреннего регистра процессора R2 (источник) во внутренний регистр R1 (приемник).

Команда MOV R1,R2 – однобайтная и реализуется за один удлиненный цикл OF (5тактов). В таком цикле сначала обеспечивается выборка из программной памяти КОп.

После дешифрации Коп

  • команда опознается

  • определяются коды источника и приемника данных

Далее в такте Т4 осуществляется пересылка данных типа R1 R2 т.е. реализуется исполнительная фаза команды. В отличие от ранее рассмотренных команд такая исполнительная фаза не связана с изменением состояния ходя бы одного из внешних выводов процессора. Такой тип цикла называется внутренним.

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

В качестве источника–приемника операнда может быть указан любой внутренний РОН процессора.

Команды регистровой адресации – однобайтные и обеспечивают только внутреннюю пересылку данных процессора (межрегистровые передачи).

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

Достоинство регистровой адресации — компактность командных кодов (одна ячейка в памяти программ). Команды выполняются быстро (пять тактов).

Косвенная регистровая адресация данных.

Адресация операнда наз.косвенной регистровой (indirect) , если его адрес в ячейке памяти определяется содержимым одной из трех 16-разрядных регистровых пар процессора – ВC, DE или НL.

Регистровые пары, содержащие адрес операнда наз. указателями.

Примеры команд косвенной регистровой адресации данных:

LDAX B ; загрузка в Acc содержимого ячейки памяти, адрес

; которой находится в регистровой паре ВС

STAX D ; сохранение содержимого Acc в ячейке памяти, адрес ; которой находится в регистровой паре DE

MOV M, D ; передать содержимое регистра D в ячейку памяти, ад;рес которой находится в регистровой паре HL

MOV B, M ; передать содержимое ячейки памяти, адрес которой ;находится в регистровой паре HL, в регистр B

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

Например, формальное описание вышеприведенных команд имеет соответственно, вид

(A)((BC)); ((DE)) (A); ((HL)) (D); (B)((HL)).

По мнемоническому представлению некоторых команд также можно опознать косвенную регистровую адресацию. Например, аббревиатура М ( Memory) в поле операндов команд типа MOV M, r также однозначно соответствует косвенной адресация операнда.

Особенности данного способа адресации данных целесообразно проиллюстрировать на вышеперечисленных командах.

Команда LDAX B. Команда однобайтная. Команда обеспечивает загрузку в Acc содержимого ячейки памяти, адрес которой находится в указателе BC.

Направление обмена информации память процессор. Приемник – регистр Асс. Перед запуском команды необходимо обеспечить загрузку в регистр–указатель BC адреса операнда. Рисунок поясняет процедуру выполнения данной команды.

Команда реализуется за 2 цикла — OF, MR,

В первом цикле OF(4 такта) по адресу, содержащемся в РС обеспечивается выборка из программной памяти байта кода команды (КОп).

Код операции фиксируется в Регистре команд (IR).

По коду операции идентифицируется

  • команда регистровая пара

  • (ВС) – указатель адреса приемника данных – Acc.

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

После дешифрации Коп, инкрементируется PC.

Затем реализуется исполнительная фаза команды.

Эта фаза состоит из одного цикла MR. В этом цикле по адресу из регистра–указателя ВС (адрес предается через RA) из памяти выбираются данные и фиксируются в Асс (регистр–приемник).

Команда реализуется за два цикла и 7 тактов (4+3).

Команда STAX D. Реализация команды STAX D поясняется Рисунком 2.

Команда сохраняет содержимое Acc в ячейке памяти, адрес которой находится в регистровой паре DE

Поэтому, ее отличие от рассмотренной ранее команды LDAX заключается в направлением обмена информацией в исполнительной фазе.

Тип обмена: процессор память. Поэтому исполнительная фаза обеспечивается циклом MW.

. Как и ранее, перед запуском команды необходимо загрузить адрес операнда в регистр–указатель DE.

Команда реализуется за 2 цикла — OF, MW и за 7 (4+3) тактов.

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

Особенности рассмотренных команд LDAX rp и STAX rp состоит в следующем.

Первое. В командах LDAX rp и STAX rp для адресации памяти можно использовать две регистровые пары–указатели – ВC и DE.

Второе. Приемником или источником всегда является аккумулятор.

Использование в качестве указателей двух регистровых пар обеспечивает “гибкость” при программировании. Обмен только через Acc, напротив, затрудняет программирование.

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

Рисунками пояснены процедуры реализации соответственно команд MOV r, M и MOV M, r. Команды различаются направлением обмена между памятью и процессором в исполнительной фазе. Для команды MOV r, M это Mem CPU, для команды MOV M, r это CPU Mem . Каждая из команд реализуется за два цикла, соответственно OF,MR и OF, MW и за 7 тактов(4+3).

Особенности рассмотренных команд MOV M, r и MOV r, M состоят в следующем.

Первое. В командах MOV M, r и MOV r, M в качестве указателя можно использовать только одну регистровую пару HL. Это затрудняет программирование и уменьшает возможности программиста.

Второе. Ранее отмеченный недостаток компенсируется возможностями по выбору любого внутреннего регистра в качестве приемника/источника операнда.

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

Косвенная адресация позволяет “обойти” один из недостатков микропроцессора К1821ВМ85 – отсутствие индексной адресации. В данном режиме исполнительный адрес образуется путем сложения второ­го байта команды, рассматриваемого как целое без знака и называемого смещением, и содержимого внутреннего 16-битного индексного регистра. Индексную адресацию, как и косвенную, удобно применять в цикли­ческих программах. При необходимости ин­дексную адресацию в микропроцессоре К1821ВМ85 можно реа­лизовать программно на основе косвенной, разумеется, за счет непроизводи­тельных потерь времени и увеличения длины программы.

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

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

Особенности команд с неявной адресацией целесообразно рассмотреть на примере команды CMA. . Команда обеспечивает поразрядную инверсию содержимого аккумулятора. Адрес операнда – всегда аккумулятор. Тип преобразования выполняемого над операндом – всегда поразрядная инверсия.

Процедура выполнения команды CMA, поясняется рисунком . Сначала по адресу, содержащемуся в РС выбирается байт КК (цикл OF).

Так как адрес операнда и тип преобразования неизменны, то Коп имеет характер константы – 3Fh.

Код операции после считывания из программной памяти фиксируется в регистре IR.

После дешифрации, команда опознается, идентифицируется операнд и тип преобразования над ним. Исполнительная фаза – внутренняя.

Команда выполняется за один цикл и 4 такта.

К командам неявной адресации также относятся команды циклического сдвига RRC, RLC, RAR, RAL. В этих командах подразумевается, что операндом является содержимое восьмиразрядного аккумулятора. Такое содержимое – операнд в формате байт, а преобразование над ним– сдвиг определенного типа.

Формат неявно адресуемого операнда в командах CMC, STCодин бит.

Преобразованию в таких командах подлежит бит переноса CY регистра флагов процессора. Расположение операнда и тип преобразования предопределены и неизменны. Поэтому Коп имеет характер константы и равны, соответственно –

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

Команд неявной адресации – немного. Выполняемые ими преобразования – специфичны.

Однако, неявная адресация используется очень широко на уровне команды в целом. Например, все команды преобразования операндов используют этот тип адресации.

Стековая адресация данных. Адресация называется стековой, если для сохранения данные/адреса используется специальная область оперативной памяти, адресуемая указателем стека (SP). Указателем служит специальный внутренний 16-ти разрядный регистр – SP.

Такая адресация является частным случаем косвенной регистровой адресации.

Стековая адресация применяется в 1-байтных командах загрузки в стек PUSH PSW и PUSH rp и извлечения из стека POP PSW и POP rp. Кроме того, стековая адресация используется в 3-байтных командах безусловного и условного вызова и возврата.

При выполнении команд стековой адресации выполняются следующие принципы.

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

Второе. Оперируют эти команды с двумя байтами данных (словами). В командах PUSH rp и PUSH PSW источником операндов являются регистровые пары ВС, DЕ, НL, А и F, а приемником— ячейки памяти ((SP) – 1) и ((SP) – 2). Декремент указателя стека SP при выполне­нии этих команд производится автоматически. В командах POP rp и POP PSW источником операндов являются ячейки памяти (SP) и {SP)+1, а получателем — пары регистров ВС, DЕ, Н L , А и F.

Третье. При выполнении этих команд инкремент указателя стека SP производится автоматически с установкой окончательного его значения (SP) + 2 или (SP) – 2.

В соответствии с этими принципами стековая адресация называется иногда непрямой с автоиндексацией.

Реализация стековой адресации на примере команды загрузки в стек PUSH rp иллюстрируется рисунком .

Процедура выполнения команды PUSH rp может быть описана как.

В стеке требуется сохранить содержимое BCh, BCl – т.е. старший и младший байт регистровой пары BC.

Для этого выполняются следующие шаги

Шаг1. (SP) ← (SP) –1

Шаг2. ((SP)) ← (BCh)

Шаг3. (SP) ← (SP) –1

Шаг4. ((SP)) ← (BCl)

Указатель стека после выполнения команды содержит адрес (SP)–2.

Более детально процедуру реализации команды PUSH BC можно описать так.

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

В первом машинном цикле OF по адресу, содержащемуся в PC, из программной памяти выбирается КК. Структура КК очевидна из Рис. . В КК в явном виде указан код регистровой пары – источника шестнадцатиразрядного операнда, в неявном – источник адреса стека.

По коду операции процессором осуществляется

  • идентификация команды

  • определяется источник операнда

  • определяется источник адреса вершины стека – (SP)вер.

В следующем цикле MW (исполнительная фаза) реализуются процедуры

Шаг1. (SP) ← (SP)вер –1

Шаг2. ((SP)) ← (BCh)

Таким образом, в ячейке стека с адресом (SP)вер –1 после выполнения цикла MW оказывается записан (загружен) старший байт регистра BC.

В следующем цикле MW реализуются процедуры

Шаг3. (SP) ← (SP) –1

Шаг4. ((SP)) ← (BCl)

Таким образом, в ячейке стека с адресом (SP)вер –2 оказывается записан (загружен) младший байт регистра BC.

Указатель стека после выполнения команды содержит адрес ((SP)вер –2.

Стек “готов” к загрузке новых данных или к извлечению данных, загруженных ранее.

Еще одним примером, иллюстрирующим особенности стековой адресации является команда POP rp.

Программа однобайтная и обеспечивает извлечение, загруженного ранее в стек, содержимого старшего и младшего байта регистровой пары BC. Извлекаемые данные содержаться в последовательных ячейках стека. (источник), Такие ячейки в ходе выполнения команды последовательно адресуются указателем стека.

Команда POP rp выполняется следующим образом.

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

Структура КК очевидна из Рис. . В КК в явном виде указан код регистровой пары –приемника шестнадцатиразрядного операнда, в неявном – источник адреса вершины стека.

По коду операции процессором осуществляется

  • идентификация команды

  • определяется регистровая пара –приемник операнда

  • определяется источник адреса вершины (SP)вер.

В следующем цикле MR (исполнительная фаза) реализуются процедуры

Шаг1. (BCl) ← ((SP)) вер

Шаг2. (SP) ← (SP) +1

Таким образом, из ячейки стека с адресом (SP)вер после выполнения цикла MR извлекается младший байт регистровой пары BC.

В следующем цикле MR реализуются процедуры

Шаг3. (BCh) ← ((SP))

Шаг4. (SP) ← (SP) +1

В результате, из ячейки стека с адресом (SP) вер +2 извлекается старший байт регистра BC.

Указатель стека после выполнения команды содержит адрес (SP)вер +2.

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

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

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

Перед использованием стека необходима его инициализация.

Инициализация заключается в загрузке в SP адреса начальной ячейки стека, которая называется “ основанием стека‘. Для инициализации обычно используется рассмотренная ранее команда LXI SP,data.

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