Система команд для микропроцессораОбщие сведения о системе команд. Фиксированный набор команд конкрет­ного микропроцессора называют системой команд. Функциональные способно­сти процессора определяются совокупностью базовых команд с различными кодами операций. Общее число команд (кодов операции) в системе всегда боль­ше числа базовых команд. Например, к базовой команде относится команда 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 вызывает прекращение выполнения программы.


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



Особенности нового ГОСТа по качеству электроэнергии
июнь 16, 2014 4347

Особенности нового ГОСТа по качеству электроэнергии

С начала 2013 года вступил в действие обновлённый стандарт качества ГОСТ Р 54149, в…
рис. 1.141
окт 17, 2016 736

Влияние различных факторов на выходное напряжение операционного усилителя

При практическом использовании операционного усилителя необходимо учитывать, что…
dif1
апр 03, 2017 1914

Дифференциальная защита, диф реле, принцип работы, применение

Дифференциальная защита - одна из самых быстродействующих. Для нее не требуется выдержки…
Последовательный обмен
нояб 11, 2015 1611

Способы и методы последовательного обмена

Принципы обмена. Последовательный обмен (ввод–вывод данных), когда байт данных передается…