Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Неявная (регистровая) адресация



 

Однобайтовая команда 8-разрядного МП – это одна из 256 различных комбинаций 8 бит, образующих машинное слово (байт). Такого количества различных команд достаточно для рассматриваемого нами МП. Однако он располагает 65536 областями памяти, для адресации которых адресная часть команды должна быть больше той, которую может предоставить однобайтовая команда. Неприемлемым в данном случае является и такое решение, когда на месте адресной части размещаются сами данные. Однобайтовые данные нельзя разместить в однобайтовой команде, часть битов которой должна всегда быть предоставлена коду операции.

Каким же образом можно использовать однобайтовую команду для адресации к данным? Ответ таков: 1-байтовые команды не адресуются к данным, расположенным в памяти; они оперируют данными, загруженными в регистр, регистровую пару или данными, хранимыми в области памяти, адрес которой находится в регистровой паре. Например, 1-байтовая команда пересылки данных из регистра А в регистр В состоит из кода операции, адреса источника данных (регистра А) и адреса приемника данных (регистра В). Адреса источника и приемника указаны в команде неявно; иногда говорят, что они «встроены» в команду. Вот почему такая адресация называется неявной.

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

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

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

 

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

Чтобы ответить на вопрос о том, в каких случаях целесообразно использование непосредственной адресации, рассмотрим пример программы загрузки аккумулятора 8-разрядным двоичным числом. Такая загрузка осуществляется при каждом выполнении программы. Указанную программу можно реализовать посредством команды, КОП которой «приказывает» МП загрузить в аккумулятор данные длиной в 1 байт, следующие непосредственно за КОП. Подобную команду называют «Загрузка регистра непосредственная».

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

 

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

 

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

Совместное использование второго и третьего байтов команды позволяет адресоваться к любой из 65536 областей памяти.

Загрузка аккумулятора в память прямая 1-й байт
0016 2-й байт
16 3-й байт

Прямая адресация, как правило, представляется наиболее естественной и простой для понимания. При неявной адресации адрес местоположения данных «встроен» в команду, и программист имеет возможности самостоятельно обращаться к данным по их адресу. При непосредственной адресации данные указываются в самой команде, следуя сразу за КОП. В этом случае программист тоже не может адресоваться к данным. И только при прямой адресации у него есть такая возможность, явным образом задавая адрес необходимых данных. Примером использования такой адресации может служить команда записи содержимого аккумулятора в память по адресу 000Е16. Этот адрес, заданный в шестнадцатеричной форме, занимает второй и третий байт трехбайтовой команды. (Адреса задаются в шестнадцатеричной форме, а содержимое адресуемых областей памяти – в двоичной). Рисунок ниже иллюстрирует, что происходит при выполнении этой команды. Перед выполнением команды (рис.а) содержимое аккумулятора равно 10101010. В области памяти 0003 находится КОП команды записи содержимого аккумулятора в память, а область с адресами 0004 и 0005 содержит информацию о местоположении необходимых данных, т.е. адрес 000Е. После выполнения команды (рис. б) копия содержимого аккумулятора оказывается размещенной в области памяти с адресом 000Е.

 

 

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

 

Первая команда данной программы – очистка аккумулятора – расположена в области памяти 0000. Занимающая три следующих байта памяти вторая команда – это команда загрузки в аккумулятор содержимого области памяти с адресом 000Е, т.е. двоичного числа 01010101. Последняя команда – останов – занимает 1 байт памяти. Содержимому аккумулятора можно было бы присвоить значение 01010101 также и посредством команды загрузки с непосредственной адресацией, но в этом случае загруженные данные должны находится в областях памяти смежных с кодом операции этой команды. И если в дальнейшем эти же данные потребовались бы для другой команды, к ним трудно было бы получить доступ. При прямой адресации таких проблем не возникает, т.к. МП имеет возможность производить обращение к любой области памяти. В последнем примере, благодаря использованию команды с прямой адресацией любое количество команд программы может обращаться к области памяти с адресом 000Е. Проиллюстрируем это, расширив рассмотренную программу добавлением одной команды.

Программа по-прежнему размещается в памяти, начиная с адреса 0000.

 

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

 

 

 

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

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

В некоторых МП используется прямая адресация, реализуемая за три микроцикла. В таких случаях команда имеет длину 2 байт: один – для КОП, другой – для адреса. Но однобайтовый адрес не позволяет адресоваться ко всем областям памяти объемом 65 К. Например, в 8-разрядном МП 8-битовое слово – 2-й байт команды с прямой адресацией – позволяет обращаться только к одной из 256 областей. Специальный КОП информирует, что такая команда имеет однобайтовый адрес. Обычно отсчет этих адресов в памяти начинается в области, адрес которой равен 0.

Диапазон значений, охватываемый такими 1-байтовыми адресами, принято называть нулевой страницей памяти. Так, адреса первых 256 областей памяти 8-разрядного МП принадлежит диапазону десятичных значений от 0 до 255 (двоичных – от 00000000 до 11111111, шестнадцатеричных – от 00 до FF). При адресации 2-байтовым словом диапазон подобных десятичных значений простирается от 0 до 65535 (00000000000000002 – 11111111111111112, 000016-FFFF16). На рис. схематически изображены два описываемых диапазона адресов –1- и 2-байтовый.

Преимущество команд с 1-байтовыми адресами по сравнению с 2-байтовыми заключается в меньших затратах времени на их выполнение, поскольку при этом экономится один микроцикл. Команды с 1-байтовыми адресами целесообразно применять в тех случаях, когда требуется многократно обращаться к сравнительно небольшому количеству байтов данных, размещающихся в первых 256 областях памяти.

В 16-разрядном МП с памятью объемом 65К прямая адресация предполагает использование только одного 16-битового слова, т.к. оно позволяет адресоваться к любой области указанной памяти. Набор команд 16-разрядного МП состоит из команд длиной в одно или два слова.

Поскольку в 8-разрядном МП применяются команды с прямой адресацией, имеющей длину в два или три слова памяти, возникает проблема их идентификации. Обычно такие команды различной длины имеют разные мнемонические имена, т.е. разные мнемонические обозначения КОП. Так 2-байтовые команды с прямой адресацией называют иногда командами прямой адресации или командами адресации нулевой страницы, а 3-байтовые – командами расширенной прямой адресации.

 

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

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

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

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

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

2. Загрузка аккумулятора данными из порта ввода-вывода с номером 01. Выполняется соответствующей командой ввода данных.

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

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

5. переход к повторению загрузки аккумулятора очередными данными из порта ввода-вывода (возврат к блоку 2). Осуществляется после того, как регистр указывает адрес области памяти, «ожидающей» очередные данные. Содержимое регистра увеличивается каждый раз на 1. Если бы регистр перезагружался, механизм единичных приращений был бы нарушен и новые данные записывались бы в одну и ту же область.

 

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

 

На рисунке представлена видоизменённая структурная схема 8-разрядного МП. На этой схеме вместо регистровой пары ВС используется 16-разрядный индексный регистр. Очевидно, что схема стала немного проще.

 

 

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

 

Адрес i-того операнда в массиве определяется как сумма начального адреса массива операнда, задаваемого смещением S, и индекса I, записанного в одном из регистров регистровой памяти, называемым индексным регистром.

Адрес индексного регистра задается в команде полем адреса индекса Аи.

В каждом i-том цикле содержимое индексного регистра изменяется на постоянную величину, как правило, это 1.

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

Индексный регистр применяется для реализации адресации с индексированием. Такой способ адресации осуществляется посредством сложения 2-го байта команды с содержимым индексного регистра. Полученная при этом сумма используется в качестве адреса области памяти. По существу, это- команда, при выполнении которой используется адресация по регистру и последующее вычисление адреса области памяти. Фактически путем сложения определяется новой 16-разрядный номер области.

Прибавляемая к содержимому индексного регистра 8-разрядная величина может принимать значения в диапазоне от 00 до FF. Эту величину называют смещением. Смещение может иметь любое значение в диапазоне 010-25510. Следовательно, при некотором содержимом индексного регистра, выбирая значение смещения, можно адресовать 256 областей памяти.

Этот способ адресации может использоваться в каждой команде. Если, например, в МП вместо косвенной адресации по регистру используется адресация с индексированием, то команда ADI (Сложение Аккумулятора с Областью Памяти При Косвенной Адресации По Регистру) заменяется командой ADD A, X (Сложение с Индексированием). Команда ADD A, X занимает в памяти 2 байт и выполняется за 5 циклов. Обычно, для выполнения команд при использовании адресации с индексированием требуется большое число микроциклов, чем для выполнения аналогичных команд с использованием косвенной адресации по регистру.

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

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

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

 

Относительная адресация

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

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

- суммирование кодов составляющих адреса

И = Б + С; АИ - И + С; АИ = Б + И + С);

- совмещение (конкатенация) кодов составляющих адреса

(например АИ = Б/С).

 

 

ВОПРОС 17

 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-07-14; Просмотров: 1173; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.036 с.)
Главная | Случайная страница | Обратная связь