РАЗДЕЛ 3 Программное обеспечение микропроцессорных систем 5 страница
Команда называется адресной, если один или несколько ее операндов располагаются в оперативной памяти.
Будем называть такой операнд адресным. Для использования адресного операнда необходимо сформировать его эффективный, или исполнительный, адрес. Таким образом, адресная команда требует дополнительного обращения процессора к памяти для каждого из ее адресных операндов, что удлиняет интервал ее выполнения по сравнению, например, с регистровыми командами, операнды которых находятся в заданных регистрах процессора.
Необходимость формирования эффективного адреса операнда в адресной команде вызывается различными причинами. Одна из причин заключается в том, что из-за ограниченной длины команды в ней нельзя записать полный физический адрес операнда, а можно поместить лишь некоторую величину (например, смещение относительно содержимого некоторого регистра) с помощью, которой вычисляется фактический адрес операнда. Другая причина заключается в необходимости осуществления нескольких различных способов адресации операндов — процедур, или логических схем, позволяющих преобразовать адресную информацию об операнде в эффективные, или физические, адреса операндов в памяти ЭВМ. В дальнейшем способ адресации будем называть режимом адресации.
В МП используется пять различных способов адресации. Рассмотрим каждый из них.
Прямая адресация. При этом способе адресации младшая половина шестнадцатиразрядного адреса содержится во втором байте трехбайтовой команды, а старшая половина – в ее третьем байте. Первый байт используется для размещения кода операции. Например, на рис. 3 показана команда прямой загрузки аккумулятора содержимым ячейки памяти, расположенной по шестнадцатеричному адресу 001А16.
Рис. 3. Пример выполнения команды прямой адресации.
После выполнения команды копия содержимого ячейки по указанному адресу передается в аккумулятор. При этом содержимое ячейки памяти остается неизменным. Это позволяет программе многократно обращаться за данными к одной и той же ячейке памяти.
Являясь наиболее естественной и простой для понимания, прямая адресация имеет существенный недостаток: длина команд с прямой адресацией содержит три байта; поэтому для своего выполнения команда требует три машинных цикла, т. е, больших затрат времени.
Косвенная адресация.При необходимости многократного обращения к какой-либо ячейке памяти ее адрес удобнее хранить не в самой команде, а в одном из внутренних регистров МП. Тогда в команде необходимо указать лишь номер регистра, в котором хранится адрес интересующей ячейки памяти. Такая адресация называется косвенной. Для хранения шестнадцатиразрядного адреса однобайтовые регистры объединяются в регистровые пары, которые именуются по названию первого регистра пары.
Номера регистровых пар кодируются следующим образом:
В первом регистре пары всегда хранится старший байт адреса, а во втором – младший байт.
Естественно, номер регистровой пары, в которой хранится адрес, содержит всего лишь две двоичных цифры и легко размещается в однобайтовой команде вместе с кодом операции. Однобайтовые команды с косвенной адресацией выполняются всего лишь за один машинный цикл и требуют меньших затрат времени, чем команды прямой адресации.
На рис. 4 в качестве примера показано выполнение команды косвенной загрузки аккумулятора содержимым ячейки, адрес которой 001А16 хранится в регистровой паре DE. Команда косвенной загрузки аккумулятора однобайтная и, кроме кода операции, содержит номер 01 регистровой пары DE. Старшая часть адреса ячейки памяти (0016) хранится в регистре D, а младшая часть (1А16)— в регистре Е. Содержимое 001А16 регистровой пары передается в регистр адреса МП, в результате чего происходит обращение к ячейке памяти по адресу 001А16. Содержимое ячейки памяти по указанному адресу копируется в аккумулятор, в котором после выполнения команды загрузки окажется двоичное число 11010111. Поскольку при обращении к ячейке памяти ее содержимое не разрушается, оно может использоваться многократно при выполнении других команд.
Рис. 4. Пример выполнения команды косвенной адресации.
Непосредственная адресация. В командах с непосредственной адресацией данные операнда находятся непосредственно во втором или втором и третьем байтах команды. В первом байте, как обычно, размещается код операции. При использовании такого способа не требуется указание какого-либо адреса памяти. Эти данные берутся непосредственно из команды, куда они заносятся программистом при программировании. В процессе выполнения программы эти данные остаются неизменными, так как вместе с командами размещаются в ПЗУ. Этими данными обычно являются некоторые константы, заранее известные программисту.
Рис. 5. Пример выполнения команды непосредственной адресации.
В качестве примера рассмотрим показанное на рис. 7.15 выполнение команды непосредственной загрузки аккумулятора данными 11010111, хранящимися во втором байте команды. После выполнения указанной команды данные скопируются в аккумулятор. При каждом повторном обращении к этой команде в аккумулятор будут записываться одни и те же данные.
Регистровая адресация. Если обрабатываемые данные размещены во внутренних регистрах МП, то обратиться к ним можно, указав двоичные коды регистров непосредственно в первом байте команды. Такая адресация называется регистровой. Кодирование регистров производится трехразрядными двоичными или одноразрядными восьмеричными кодами:
Рис. 6. Пример выполнения команды пересыпки содержимого регистра В в регистр С.
Рис. 7. Пример выполнения команды пересылки содержимого ячейки памяти М в регистр С.
На рис. 6 показан пример выполнения команды пересылки данных из регистра В в регистр С. Три младших разряда 000 однобитовой команды являются кодом регистра-источника В, а следующее три двоичных разряда представляют код регистра-приемника информации С. После выполнения команды копия содержимого регистра В пересылаются в регистр С. Содержимое регистра В при этом остается неизменным.
Необходимо обратить внимание на то, что среди кодов регистров отсутствует код 110. Наличие этого кода в регистровой команде означает, что необходимо обращться не к одному из перечисленных регистров, а к некоторой ячейке памяти М, адрес которой хранится в регистрах Н и L, причем старшая часть адреса размещается в регистре Н, а младшая — в регистре L. Команды, в которых наряду с регистровой адресацией используется косвенная, называются командами с косвенно-регистровой адресацией.
На рис. 7 дан пример выполнения косвенно-регистровой команды пересылки содержимого ячейки с адресом 001А16, хранящимся в регистрах Н и L, в регистр С, адрес которого 001 указан в команде. Двоичный код 110 в первых трех разрядах команды означает, что источником информации является ячейка М, адрес которой хранится в регистрах Н и L. После завершения команды содержимое ячейки копируется в регистр С.
Стековая адресация. При стековой адресации адрес операнда указывается указателем стека. Указатель стека SP — это шестнадцатиразрядный регистр, содержимое которого определяет текущий адрес ячейки памяти. Следовательно, стековая адресация является косвенной. В отличие от рассмотренных выше способов косвенной адресации необходимость обращения к указателю стека следует непосредственно из кода операции команды работы со стеком.
ТРЕТИЙ ВОПРОС
Из рассмотренных выше отечественных микроЭВМ наиболее развиты режимы адресации в микроЭВМ «Электроника-60». В микроЭВМ «Электроника-60» различают форматы одноадресных и двухадресных команд. В одноадресной команде указывается единственный операнд (рис. 8, а). В разрядах 15—6 записывается код операции КОП. Разряды 5— 3 содержат код метода адресации, причем разряд 3 отведен для признака адресации (прямой или косвенной). В младших разрядах 2—0 может храниться номер регистра общего назначения, участвующего в выполнении команды. В целом разряды 5—0 образуют поле адресации операнда.
В двухадресной команде (рис. 8, б) используются два операнда, левый из которых называется источником, а правый — приемником. Соответственно в формате команды кроме поля кода операции (разряды 15—12) есть два поля адресации операндов: поле адресации источника (разряды 11—6) и поле адресации приемника (разряды 5—0). Структура каждого из этих полей совпадает со структурой поля адресации операнда в одноадресной команде. Ниже в примерах, с помощью которых будут иллюстрироваться режимы адресации, имена регистров записываются в соответствии с правилами языка ассемблера микро-ЭВМ «Электроника-60».
Рис. 8. Формат одноадресной (а) и двухадресной (б) команд микро-ЭВМ «Электроника-60».
Режимы адресации памяти в микро-ЭВМ «Электроника-60» можно разделить на две группы: 1) общие режимы; 2) режимы, основанные на использовании регистра с номером 7 как счетчика команд. К особой группе режимов адресации памяти можно отнести режим, в котором регистр с номером 6 хранит указатель стека.
Дата добавления: 2015-12-08; просмотров: 832;