Система команд для микропроцессораОбщие сведения о системе команд. Фиксированный набор команд конкрет­ного микропроцессора называют системой команд. Функциональные способно­сти процессора определяются совокупностью базовых команд с различными кодами операций. Общее число команд (кодов операции) в системе всегда боль­ше числа базовых команд. Например, к базовой команде относится команда MOV dst, scr, которая обеспечивает функцию пересылки данных из источника scr в приемник dst. Таких команд в системе может быть очень много. Система команд представляется в виде таблицы. Таблица может иметь различную структуру, однако  обычно содержит следующие сведения о команде:

●     мнемоническое обозначение команды, представляющее собой сокращенную запись названия команды. Для этого используются три–четыре латинские бук­вы названия операции, выполняемой командой. Мнемоника является удобной формой представления кода операции команды. Кроме того, она использует­ся при описании команды на языке ассемблера. Программа ассемблера пре­образует мнемоническое обозначение кодов операции в соответствующие двоичные эквиваленты;

 

●     шестнадцатеричные коды команд;

●     влияние выполненной команды на флаги регистра слова состояния программы;

●     число байтов в команде и число машинных циклов и такте, затрачиваемых на выполнение команды;

●     словесное и (или) символьное описание выполняемой командой операции. Часто для удобства систему команд разбивают на отдельные группы по функ­циональному признаку. Например систему команд микропроцессора:

●     КР580ВМ80, содержащую 78 базовых команд, разбивают на пять групп: пере­сылки, логической обработки, арифметической обработки, передачи управ­ления и управления процессором,

●     К1810BМ86, содержащую 113 базовых команд, разбивают на шесть групп: пересылки, логической обработки, арифметической обработки, обработки строк, передачи управления и управления процессором. Ниже на примере процессоров КР580ВМ80 приведено краткое описание функ­циональных особенностей команд каждой группы.

Система команд 8–разрядных процессоров. Рассмотрим систему команд 8–разрядного процессора 8080, в которую входит 78 базовых команд, содержа­щих 111 кодов операций.

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

При описаний–команд используются следующие обозначения:

●     src, dst — 8–разрядные источник и приемник. Источником или приемником мо­жет быть один из 8–разрядных регистров А, В, С, D, E, Н или ячейка памяти М, доступ к которой обеспечивает регистровая пара HL, содержащая адрес пересылаемого байта. В коде операции источник src и приемник dst указаны в виде трехразрядного кода SSS и DDD;

●     RP — двухразрядный код регистровых пар ВС, DE, HL, А + РП (регистр призна­ков) или указателя стека SP;

●     data, data16 — 8– и 16–разрядный операнд;

●     addr, port — 16–разрядный адрес памяти и 8–разрядный адрес порта;

●     (addr), (SP) — содержимое ячейки памяти по указанным адресам;

●     (SP)+, –(SP) — операции постинкремента и предекремента со стеком, описа­ние которых приведено в параграфе 2.6.

Система команд разбивается на пять функциональных групп. Рассмотрим осо­бенности команд каждой группы.

Команды пересылки. Группа содержит наиболее часто встречающиеся в программах команды пересылки данных, источниками и приемниками которых могут быть внутренние регистры процессора, основная память и внешние устройства. Команды не оказывают воздействий на флаги регистра состояния. Мнемоника команды отражает особенности выполняемой операции и способ переадресации. Например, мнемоника MOV, MVI указывает на перемещение (Move) операндов; LDA, LDAX, LXI, LHLD — на загрузку (Load); STA, STAX, SHLD — на сохранение (Save).

Для операций с байтами используется мнемоника MOV, MVI, LDA, STA, LDAX, STAX; для операций со словами — LXI, LHLD, SHLD. Прямая адресация при загруз­ке и сохранении содержимого аккумулятора отражается мнемоникой LDA и STA, косвенная — мнемоникой LDAX и STAX.

Примечание: ВР — двухразрядный код регистровых пар ВС, DЕ, НL, А + РП (регистр при­знаков) или указателя стека SР.

табл 2.8.1

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

●     операцию пересылки данных между источником (src) и приемником (dst), ко­торая записывается в виде dst <— src (команда 1). Источниками и приемниками являются внутренние регистры общего назначения (А, В, С, D, Е, Н) и ячейка памяти M. Допускается любая комбинация и за исключением М <— M, т. е. пе­резагрузка ячейки памяти М не разрешается;

●     загрузку регистров общего назначения и ячейки М вторым байтом В2 (коман­да 2) и регистровых пар ВС, DЕ, HL (в том числе указателя стека SР) вторым В2 и третьим ВЗ байтами (команда 3), причем всегда ВЗ загружается в стар­шие регистры (В, D, Н) пары, В2 — в младшие регистры (С, Е , L);

●     пересылку данных между аккумулятором А и основной памятью (команды 4–7), между аккумулятором и внешним устройством (команды 8, 9). При пере­сылке между аккумулятором А и памятью адреса ячеек памяти располагают­ся в регистровых парах ВС, DЕ или в третьем и втором байтах ВЗВ2 команды;

●     пересылку данных между парой регистров HL и памятью (команды 10, 11). При этом операнд из регистра L пересылается в ячейку с адресом ВЗВ2, об­разованным из третьего и второго байта команды, а из регистра Н — по ад­ресу на единицу больше. При обратной пересылке сначала из ячейки с адре­сом ВЗВ2 в регистр L загружается первый операнд, затем из ячейки с адре­сом ВЗВ2 + 1 в регистр Н — второй;

●     пересылку данных между парами регистров, включая пару из аккумулятора А и регистра признаков РП, и стеком (команды 12, 13). При записи в стек со­держимое указателя стека уменьшается на единицу, и по адресу SР – 1 за­гружается первый операнд из регистра В, D, Н или А, затем содержимое ука­зателя стека снова уменьшается на единицу, и по адресу SР – 2 загружается второй операнд из регистра С, Е, L или РП. При выводе из стека сначала за­гружается регистр С, Е, L или РП операндом, хранящимся в ячейке с адресом SР указателя стека. Затем содержимое увеличивается на единицу, из ячейки с адресом SР + 1 второй операнд загружается в регистр В, D, Н или А, и со­держимое указателя стека вновь увеличивается на единицу и принимает зна­чение SР + 2.

Следует отметить, что при загрузке регистровой пары А, РП (ее код RР = 11) из стека изменяется состояние триггеров регистра признаков РП. Это единственная команда (из всех команд пересылки данных), которая влия­ет на признаки;

●     пересылку содержимого пары регистров НL в указатель стека SР и программ­ный счетчик РС (команды 14, 15);

●     обмен данными между парами регистров НL и DЕ, парой регистров НL и сте­ком (команды 16, 17). При обмене содержимое регистровой пары НL поме­щается в пару DЕ или стек, а содержимое регистровой пары DЕ или стека — в пару НL. Операция обмена обозначается символом «↔».

Арифметические команды. Вычислительные возможности микро­процессора ограничены простыми командами сложения и вычитания 8–раз­рядных операндов. Операции умножения и деления реализуются программным способом.

табл 2.8.2

Набор команд (табл. 2.8.2) позволяет выполнить:

    сложение и вычитание 8–разрядных операндов с учетом и без учета переноса (команды 1–8), при этом один из операндов всегда находится в аккумулято­ре, а второй — в одном из регистров общего назначения (ячейке памяти М) или является вторым байтом команды. Команды, учитывающие значение сиг­нала переноса С регистра прививков, используются при сложении и вычита­нии многобайтных чисел. Для этой же цели можно использовать команду 9 сложения содержимого пары регистров НL с 16–разрядным адресуемым ре­гистром;

    арифметическое сравнение содержимого аккумулятора А с содержимым од­ного из регистров общего назначения Rn (ячейкой памяти М) или вторым байтом В2 (команды 10–11). При этом выполняется вычитание А – Rn или А – В2. Результат сравнения определяется по сигналам триггеров регистра признаков: если Z = 1, то А = Rn или А = В2; если S =1, то А > Rn или А > В2. Содержимое аккумулятора не изменяется;

●     увеличение и уменьшение на 1 (инкремент и декремент) содержимого реги­стров и регистровых пар. При программировании часто возникает необходи­мость увеличения или уменьшения на единицу значения операнда. Для этого можно использовать операции сложения А + В2 или вычитания А – В2, запи­сав в программе В2 = 1. Однако в системе команд предусмотрены специаль­ные команды (12–15) инкремента и декремента 8– и 16–разрядных операндов;

●     десятичную коррекцию содержимого аккумулятора после выполнения ариф­метических операций в двоично–десятичном коде 8421 (команда 16). При этом содержимое аккумулятора представляется в виде двух полубайтов, каж­дый из которых соответствует десятичной цифре. Коррекция производится блоком десятичной коррекции по правилам.

табл 2.8.3

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

     двуместные логические операции умножения (И), сложения (ИЛИ) и исключа­ющее ИЛИ над 8–разрядными операндами (команды 1–6). Логические опера­ции являются поразрядными и выполняются независимо для каждого из восьми бит операндов. Неадресуемый операнд находится в аккумуляторе, туда же поступает результат операции. Вторым операндом является содер­жимое одного из регистров общего назначения (ячейки памяти М) или второй байт команды;

●     инвертирование содержимого аккумулятора А (команда 7);

●     флаговые команды (8, 9) инвертирования и установки бита С триггера пере­носа регистра признаков;

    два вида циклических сдвигов содержимого аккумулятора влево и вправо (команды 10–13). Первый вид сдвигов (сдвиги без переноса) реализуется пу­тем замыкания в кольцо всех триггеров аккумулятора, при втором виде сдви­гов (сдвиги с переносом, или расширенные сдвиги) в кольцо дополнительно вводится триггер переноса С регистра признаков. Отсутствующие в системе команд логические и арифметические сдвиги в обе стороны можно реализо­вать предварительной установкой бита С в 0 или 1 совместно с расширенным сдвигом.

Команды передачи управления. При передаче управления наруша­ется последовательный ход выборки содержимого ячеек памяти и процессор ад­ресуется в другую область памяти. Следует выделить три вида команд передачи управления: команды перехода по заданному адресу (JMP), вызова подпрограм­мы (CALL) и возврата из подпрограммы (RET). К ним относятся безусловные и ус­ловные команды. Условные команды осуществляют переход, вызов подпрограм­мы и возврат из подпрограммы в зависимости от состояния флага, задаваемого значением сигнала одного из четырех триггеров Z, С, S, Р регистра признаков (или состояния).

табл 2.8.4

В процессоре 8080 используются оба состояния (1 и 0) четырех флагов (Z, С, Р, S), позволяющих получить 8 вариантов каждой команды (табл. 2.8.4). Обозна­чение признака (условия) указывается в мнемонике условных команд J**, С**, R** вместо звездочек (**). Например, признаку NC, для которого условия перехода считаются выполненными при С = 0, соответствует команда JNC.

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

Рассмотрим особенности команд, представленных в табл. 2.8.5.

табл 2.8.5

С помощью трехбайтной команды JMP реализуется безусловная передача уп­равления. При этом второй и третий байты команды (адрес addr продолжения программы) заносятся в счетчик команд РС (содержимое ВЗ в старшие разряды, В2 — в младшие).

Команды условной передачи управления J** реализуют разветвление вычисли­тельного процесса в зависимости от условия. При выполнении условия (ДА) в счетчик РС заносится второй и третий байты команды, в противном случае (НЕТ) содержимое счетчика увеличивается на 3 единицы. Продолжение програм­мы осуществляется по адресу, находящемуся в счетчике команд, т. е. со следу­ющей команды.

Команды безусловного (САLL) и условного (С**) вызовов используются для об­ращения к подпрограммам, хранящимся в другой части основной памяти. Эти ко­манды всегда предусматривают возможность возврата в прерванную основную программу путем сохранения в стеке содержимого программного счетчика РС, для чего используется предекрементный способ адресации. После этой операции:

●     при безусловном вызове или выполнении условия второй и третий байты ко­манды заносятся в программный счетчик РС;

●     при невыполнении условия содержимое программного счетчика увеличивает­ся на 3 единицы.

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

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

Команды возврата являются однобайтными, так как в указателе стека SР хра­нится адрес ячейки стека с адресом возврата в прерванную программу.

табл 2.8.6

Команда РСНL, загружает в программный счетчик РС адрес, хранящийся в ре­гистровой паре HL.

Команды общего управления. Команды этой группы (табл. 2.8.6) ис­пользуются для задания режима работы микропроцессора. Команда RST используется для повторного пуска микропроцессора и при обслуживании прерываний. При ее выполнении:

●     содержимое программного счетчика переносится в стек по адресам SР – 1, SР – 2, формируемым в указателе стека, что обеспечивает возврат к основ­ной программе;

●     в программный счетчик засылается 16–разрядный адрес начала одной из 8 программ обслуживания прерывания.

Команда разрешения прерывания EI устанавливает триггер INTE разрешения прерываний в единичное состояние, при этом микропроцессор реагирует на за­просы прерываний. Команда запрещения прерываний DI устанавливает триггер INTE в нулевое состояние. Пустая команда NOP используется в циклах програм­мируемой задержки. Команда останова HLT вызывает прекращение выполнения программы.


Рекомендуйте эту статью другим!



прерываний в микропроцессорных
нояб 04, 2015 2811

Организация прерываний в микропроцессорных системах

Прерывание в микропроцессорах (interruption) — это событие, вызывающее прекращение…
нояб 17, 2012 9763

Режимы глухого заземления нейтрали в сетях низшего напряжения (0,4 кВ)

Полная реконструкция технологических установок промышленных предприятий, включающая…
Вихревые токи 1
авг 04, 2014 5935

Вихревые токи

В электрических устройствах, приборах, машинах металлические детали способны иногда…
Реклоузеры 4
авг 30, 2015 10482

Реклоузеры - применение, достоинства и недостатки, разновидности

Реклоузер - устройство автоматического управления и защиты воздушных ЛЭП на основе…
Элегазовые высоковольтные выключатели
дек 22, 2013 3140

Элегазовые высоковольтные выключатели

В элегазовых выключателях роль дугогасящей среды выполняет элегаз (гексафторид серы SF6).…