Система команд для микропроцессора

Система команд для микропроцессора Общие сведения о системе команд.

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

MOV dst, scr,

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

scr

в приемник

dst.

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

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

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

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

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

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

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

? К1810

B

М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

вызывает прекращение выполнения программы.

Понравилась статья? Поделиться с друзьями:
Все об энергетике, электротехнике и электронике
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: