СИСТЕМА КОМАНД МП ТИПА К580ИК80
Микропроцессор работает по программе, хранимой в ячейках памяти. Содержимое одной или нескольких таких ячеек образует команду МП. Команда МП
— это такое двоичное число, которое, будучи воспринято им, заставит МП выполнить определенные действия. МП может выполнять лишь те действия, которые предусматриваются его командами.Существуют команды разного назначения. Большинство из них осуществляет пересылку данных, расположенных в памяти или в одном из внутренних регистров МП. Имеются команды, осуществляющие взаимодействие МП с устройствами ввода
— вывода; есть и другие команды, предназначенные для управления и выполнения некоторых вспомогательных функций МП. Вся совокупность команд, воспринимаемых МП, образует его систему команд.Раньше мы говорили о том, что команды МП могут иметь различную длину и состоять из
1, 2 или 3 байт. Однако код операции, указывающий на то, что должен делать МП при выполнении данной команды, всегда содержится в ее первом байте и при вводе в МП размещается в регистре команд. Этот код дешифруется и управляет дальнейшими действиями МП. Команда должна указывать МП также адрес или месторасположение данных, подлежащих обработке. Например, МП может получить указания о пересылке содержимого ячейки памяти по заданному адресу в один из внутренних регистров или сдвиге содержимого аккумулятора.Из приведенных примеров следует, что команда указывает МП не только, что ему необходимо сделать, но и где хранятся и куда должны быть направлены обрабатываемые данные. Итак, любая команда должна состоять из двух частей: первая часть представляет собой код операции, вторая часть называется адресной. Однако, встречаются так называемые безадресные команды. К ним относится, например, команда останова.
Код операции и адресная часть однобайтных команд размещаются в восьми двоичных разрядах, адресная часть многобайтных команд
— во втором и третьем байтах команды. В этих же байтах могут непосредственно размещаться обрабатываемые Данные, так что в зависимости от кода операции содержимое второго и третьего байтов может восприниматься как адрес или как данные. Число команд в системе команд МП значительно больше, чем число кодов операций, поскольку при формировании команды один и тот же код операции может использоваться при различных способах адресации.1.
Способы адресации МПВ МП используется пять различных способов адресации. Рассмотрим каждый из них.
Прямая адресация. При этом способе адресации младшая половина шестнадцатиразрядного адреса содержится во втором байте трехбайтовой команды, а старшая половина
— в ее третьем байте. Первый байт используется для размещения кода операции. Например, на рис. 7.13 показана команда прямой загрузки аккумулятора содержимым ячейки памяти, расположенной по шестнадцатеричному адресу 001А.6.135
Рис.
7.13. Пример выполнения команды прямой адресацииПосле выполнения команды копия содержимого ячейки по указанному адресу передается в аккумулятор. При этом содержимое ячейки памяти остается неизменным. Это позволяет программе многократно обращаться за данными к одной и той же ячейке памяти.
Являясь наиболее естественной и простой для понимания, прямая адресация имеет существенный недостаток: длина команд с прямой адресацией содержит три байта; поэтому для своего выполнения команда требует три машинных цикла, т. е. больших затрат времени.
Косвенная адресация. При необходимости многократного обращения к какой-либо ячейке памяти ее адрес удобнее хранить не в самой команде, а в одном из внутренних регистров МП. Тогда в команде необходимо указать лишь номер регистра, в котором хранится адрес интересующей ячейки памяти. Такая адресация называется косвенной. Для хранения шестнадцатиразрядного адреса однобайтовые регистры объединяются в регистровые пары, которые именуются по названию первого регистра пары.
Номера регистровых пар кодируются следующим образом:
ВС—,00
В первом регистре пары всегда хранится старший байт адреса, а во втором
— младший байт.Естественно, номер регистровой пары, в которой хранится адрес, содержит всего лишь две двоичных цифры и легко размещается в однобайтовой команде вместе с кодом операции. Однобайтовые команды с косвенной адресацией выполняются всего лишь за один машинный цикл и требуют меньших затрат времени, чем команды прямой адресации.
На рис.
7.14 в качестве примера показано выполнение команды косвенной загрузки аккумулятора содержимым ячейки, адрес которой OOlA^e хранится в регистровой паре DE. Команда косвенной загрузки аккумулятора однобайтная и, кроме кода операции, содержит номер 01 регистровой пары DE. Старшая часть адреса ячейки памяти (00ig) хранится в регистре D, а младшая часть (lAie)— в регистре Е. Содержимое OOlAig регистровой пары передается в регистр адреса МП, в результате чего происходит обращение к ячейке памяти по адресу 001А,о. Содержимое ячейки памяти по указанному адресу копируется в аккумулятор, в котором после выполнения команды загрузки окажется двоичное число 11010111. Поскольку при обращенииРис.
7.14. Пример выполнения команды косвенной адресациик ячейке памяти ее содержимое не разрушается, оно может использоваться многократно при выполнении других команд.
Непосредственная адресация. В командах с непосредственной адресацией данные операнда находятся непосредственно во втором или
втором и третьем байтах команды. В первом байте, как обычно, раз-мэщается код операции. При использовании такого способа не требуется указание какого-либо адреса памяти. Эти данные берутся непосредственно из команды, куда они заносятся программистом при программировании. В процессе выполнения программы эти данные остаются неизменными, так как вместе с командами размещаются в ПЗУ. Этими данными обычно являются некоторые константы, заранее известные программисту.
В качестве примера рассмотрим показанное на рис.
7.15 выполнение команды непосредственной загрузки аккумулятора данными 11010111, хранящимися во втором байте команды. После выполнения указанной команды данные скопируются в аккумулятор. При каждом повторном обращении к этой команде в аккумулятор будут записываться одни и те же данные.Регистровая адресация. Если обрабатываемые данные размещены во внутренних регистрах МП, то обратиться к ним можно, указав двоичные коды регистров непосредственно в первом байте команды. Такая адресация называется регистровой. Кодирование регистров производится трехразрядными двоичными или одноразрядными восьмеричными кодами:
Регистр |
В- |
-000- |
-Os |
” |
С- |
-001- |
-Is |
” |
D- |
-010- |
-2g |
” |
Е- |
-011- |
-3s |
Регистр |
H- |
-100- |
-4g |
” |
L- |
- 101- |
-5s |
Аккумулятор |
A- |
-111- |
-7s |
Рис.
7.17. Пример выполнения команды пересылки содержимого ячейки памяти М в регистр СНа рис.
7.16 показан пример выполнения команды пересылки данных из регистра В в регистр С. Три младших разряда 000 однобайтовой команды являются кодом регистра-источника В, а следующие три двоичных разряда представляют код регистра-приемника информации С. После выполнения команды копия содержимого регистра В пересылаются в регистр С. Содержимое регистра В при этом остается неизменным.Читатель, вероятно, уже обратил внимание на то, что среди кодов регистров отсутствует код
110. Наличие этого кода в регистровой команде означает, что необходимо обратиться не к одному из перечисленных регистров, а к некоторой ячейке памяти М, адрес которой хранится в регистрах Н и L, причем старшая часть адреса размещается в регистре Н, а младшая—в регистре L. Команды, в которых наряду с регистровой адресацией используется косвенная, называются командами с косвенно-регистровой адресацией.На рис.
7.17 дан пример выполнения косвенно-регистровой команды пересылки содержимого ячейки с адресом OOlA^g, хранящимся в регистрах Н и L, в регистр С, адрес которого 001 указан в команде. Двоичный код 110 в первых трех разрядах команды означает, что источником информации является ячейка М, адрес которой хранится в регистрах Н и L. После завершения команды содержимое ячейки копируется в регистр С.Стековая адресация. При стековой адресации адрес операнда указывается указателем стека. Указатель стека
SP — это шестнадцатиразрядный регистр, содержимое которого определяет текущий адрес ячейки памяти. Следовательно, стековая адресация является косвенной. В отличие от рассмотренных выше способов косвенной адресации необходимость обращения к указателю стека следует непосредственно из кода операции команды работы со стеком.2.
Команды МПВ зависимости от назначения команды МП делятся на пять групп:
1)
команды пересылки (выполняют обмен данными между регистрами МП или между регистрами и памятью);2)
арифметические команды (производят операции сложения, вычитания, инкрементирования или декрементирования данных в регистрах и ячейках памяти);3)
логические команды (выполняют операции “И”, “ИЛИ”, “ИЛИ—НЕ”, сравнения, сдвига или дополнения данных в регистрах и ячейках памяти);4)
команды ветвления (производят операции условного и безусловного переходов по программе, вызова подпрограммы и возврата к основной программе);5)
команды управления и операций со стеком, устройствами ввода — вывода (выполняют операции ввода—вывода, управляют указателем стека и признаками состояний).Всего система команд МП насчитывает
111 разных команд. Неко" торые из них поддаются модификации. Описание всех команд дано в табл. 7.3. В таблице и при дальнейшем изложении использованы следующие сокращения и условные обозначения:А
— аккумуляторМ
—ячейка памяти, адрес которой хранится в паре регистров Н и L Гр, Гс—регистр-приемник и регистр-источник информации (один из регистров В, С, D, Е, Н, L) DDD — трехразрядный двоичный адрес, адресующий один из приемниковинформации
SSS—
трехразрядный двоичный адрес, адресующий один из регистров-источников информации(Bz),
(В.ч) — содержимое второго и третьего байтов команды Л,—t-й разряд шины адреса PC — шестнадцатиразрядный счетчик команд PCL — младший байт счетчика команд РСН — старший байт счетчика команд SP — шестнадцатиразрядный указатель стека Гь—старший регистр в паре г; — младший регистр в паре Z — признак нуля S — признак знака Р—признак четности CY — признак переноса AC — признак переноса из третьего разряда (г), (М) — содержимое регистров или ячейки памяти (А) — содержимое аккумулятора§
Таблица 7.3. Мнемонические обозначения и система команд МП
|
Операнды |
о СП |
|
Флаги |
|
|
|||||
|
|
1- |
|
|
|
|
|||||
|
|
и |
|
|
|
|
|||||
Л^немоника |
|
|
?= |
Код операции |
|
|
|
|
|
Код |
Описание операции |
|
|
|
s о |
|
|
|
|
|
|
|
|
|
1-й |
2-й |
ч &о '" |
|
CY |
p |
s |
z |
AC |
|
|
|
|
|
^s |
|
|
|
|
|
|
|
|
Однорегистровые команды |
|||||||||||
WR |
R |
— |
1 |
0 0 X X X 1 0 0 |
|
4- |
+ |
+ |
+ |
XX |
Содержимое регистра увеличивается на 1 |
DCR |
R |
— |
1 |
1 О О Х Х Х 0 1 |
|
+ |
+ |
+ |
+ |
XX |
Содержимое регистра уменьшается на 1 |
СМА |
— |
— |
1 |
00101111 |
|
|
|
|
|
2F |
Инверсия аккумулятора |
DAA |
— |
— |
1 |
00100111 |
+ |
+ |
+ |
+ |
+ |
27 |
Десятичное преобразование аккумулятора |
NOP |
— |
— |
1 |
00000000 |
|
|
|
|
|
00 |
Нет операции |
Команды передачи данных
MOV |
Rl |
R2 |
1 |
0 1 D D D S S S |
|
|
|
|
|
XX |
Пересылка байта данных из регистра R2 |
|
|
|
|
|
|
|
|
|
|
|
в регистр Rl |
STAX |
RP |
— |
1 |
0000/10010 |
|
|
|
|
|
02,, |
Содержимое А записывается по адресу: |
|
|
|
|
|
|
|
|
|
|
|
если 0, то в ВС; если 1, то в DE |
LDAX |
RP |
— |
1 |
0000/1 1010 |
|
|
|
|
|
oa,a |
Содержимое памяти записывается в А из |
|
|
|
|
|
|
|
|
|
|
|
адреса: если 0, то в ВС; если 1, то в DE |
ADD |
R |
— |
1 |
0000/1 1010 |
|
|
|
|
|
8Х |
Содержимое регистра прибавляется к ак |
|
|
|
|
|
|
|
|
|
|
|
кумулятору |
ADC |
R |
— |
1 |
1 0 0 0 1 S S S |
+ |
4- |
+ |
4- |
4- |
8Х |
Содержимое регистра складывается с А и |
|
|
|
|
|
|
|
|
|
|
|
с флагом CY |
SUB |
R |
— |
1 |
1 0 0 1 0 S S S |
t Т |
+ |
+ |
4- |
4- |
9Х |
Содержимое регистра вычитается из со |
|
|
|
|
|
|
|
|
|
|
|
держимого А |
SBB |
R |
— |
1 |
1 0 0 1 1 S S S |
+ |
4- |
-)-• |
4- |
4- |
9Х |
К содержимому регистра прибавляется CY |
|
|
|
|
|
|
|
|
|
|
|
и вычитается из А |
ANA |
R |
— |
1 |
1 0 1 0 0 S S S |
|
+ |
+ |
4- |
|
AX |
Поразрядное логическое умножение А с со |
|
|
|
|
|
|
|
|
|
|
|
держимым регистра |
XRA |
R |
— |
1 |
1 0 1 0 1 S S S |
+ |
+ |
+ |
|
|
AX |
Сложение по mod2 содержимого А с ре |
|
|
|
|
|
|
|
|
|
|
|
гистром |
OR A |
R |
— |
1 |
101 1 0 S S S |
+ |
+ |
-i- |
4- |
|
ВХ |
Поразрядное логическое сложение А с со |
|
|
|
|
|
|
|
|
|
|
|
держимым регистра |
смх |
R |
|
1 |
1 0 1 1 1 S S S |
4- |
4- |
4- |
4- |
4- |
ВХ |
Сравнение А с регистром: если А == R, то Z = 1; если А Ф R, то Z = 0. Если R> А, |
|
|
|
|
|
|
|
|
|
|
|
то CY = 1, а если А > R, то CY = 0 |
Команды сдвига аккумулятора |
|||||||||||
RLC |
|
|
1 |
000001 1 1 |
4- |
|
|
|
|
07 |
Циклический сдвиг влево. Флаг CY принимает значение 7рА, ОрА=7рА |
RRC |
—— |
—— |
1 |
00001111 |
4- |
|
|
|
|
OF |
Циклический сдвиг вправо. Флаг CY принимает значение ОрА, 7рА-ОрА |
RAL |
^ |
|
1 |
000101 11 |
4- |
|
|
|
|
17 |
Сдвиг влево через “перенос” CY = 7рА; OpA=CY |
RAR |
— |
— |
1 |
0001111 |
4- |
|
|
|
|
IX |
Сдвиг вправо через “перенос” С У == UpA, 7рА = CY |
|
|
|
|
Кома |
нды с прямой адресацией |
||||||
STA |
ADRESS |
3 |
001 10010 |
|
|
|
|
|
32 |
Содержимое А записывается в ячейку памяти по ADRESS |
|
LDA |
To же |
3 |
00111010 |
|
|
|
|
|
ЗА |
В А записывается содержимое ячейки памяти по ADR-ESS |
|
SHLD |
” |
3 |
00100010 |
|
|
|
|
|
22 |
Содержимое HL записывается по ADRfc^b: L-^ADR, H-^ADR4-1 |
|
LHLD |
” |
3 |
00101010 |
|
|
|
|
|
2А |
Содержимое по адресу ADRESS записывается в HL- ADR-^L, ADR4-1-^H |
|
CMC |
— |
1 |
00111111 |
4- |
|
|
|
|
3F |
Инверсия флага переноса |
|
Команды с парами регистров |
|||||||||||
PUSH |
RP |
—— |
1 |
1 1 R P 0 1 0 1 |
|
|
|
|
|
Х5 |
Запись содержимого пары регистров в память по адресу в SP |
POP |
RP |
|
1 |
1 1 R P 0 0 0 1 |
|
|
|
|
|
XI |
Запись в пару регистров из памяти по ад- |
DAD |
RP |
|
1 |
0 0 R P 1 0 0 1 |
4- |
|
|
|
|
Х9 |
Сложение пары регистров с HL. Результат HL |
INX |
RP |
|
1 |
0 0 R P 0 0 1 1 |
|
|
|
|
|
X3 |
Содержимое пары регистров увеличивается на 1 |
DCX |
RP |
~ |
1 |
0 0 R P 1 0 1 1 |
|
|
|
|
|
ХВ |
Содержимое пары регистров уменьшается на 1 |
Продолжение табл.
7.3
|
Операнды |
о ЕП |
|
Флаги |
|
|
|||||
|
|
t~ |
|
|
|
|
|||||
|
|
и |
|
|
|
|
|||||
Мнемоника |
|
|
S ° 3 0 |
Код операции |
|
|
|
|
|
Код |
Описание операции |
|
1-й |
2-й |
§" |
|
LY |
р |
S |
Z |
AC |
|
|
|
|
|
•^ё |
|
|
|
|
|
|
|
|
XCHG |
|
|
1 |
11101011 |
|
|
|
|
|
i ЕВ |
Обмен содержимых регистров HL с DE |
XTHL |
— |
— |
1 |
11100011 |
|
|
|
|
|
! ЕЗ |
Обмен стека с HL: L-^SP, H^:SP4- 1 |
SPHL |
— |
— |
1 |
11111001 |
|
|
|
|
|
F9 |
Запись содержимого HL в стек |
PCHL |
|
|
1 |
11101001 |
|
|
|
|
|
Е9 |
Запись содержимого HL в PC: L - в млад |
|
|
|
|
|
|
|
|
|
|
|
ший байт, Н —в старший |
Команды с непосредственным заданием данных
LXI |
RP |
DAT |
3 |
0 0 R P 0 0 0 1 |
|
|
|
|
|
XI |
Содержимое третьего байта загружается |
|
|
|
|
|
|
|
|
|
|
|
в первый регистр, содержимое второго |
MVI |
DAT |
— |
2 |
0 0 X X X 1 10 |
|
|
|
|
|
XX |
байта — во второй регистр Байт данных DAT загружается в память |
|
|
|
|
|
|
|
|
|
|
|
или регистр |
ADI |
DAT |
— |
2 |
11000110 |
+ |
+ |
t, |
+ |
+ |
С6 |
Байт данных DAT прибавляется к аккуму |
|
|
|
|
|
|
|
|
|
|
|
лятору |
ACI |
DAT |
— |
2 |
11001110 |
+ |
+ |
+ |
+ |
+ |
СЕ |
Сложение с переносом: А + DAT + CY |
SUI |
DAT |
— |
2 |
11010110 |
+ |
+ |
+ |
+ |
+ |
D6 |
Байт данных DAT вычитается из аккуму |
|
|
|
|
|
|
|
|
|
|
|
лятора |
SBI |
DAT |
— |
2 |
11011110 |
+ |
+ |
+ |
-1- |
+ |
DE |
В ычитание с заемом: А — (DAT -)- CY) |
ANI |
DAT |
— |
2 |
11100110 |
1 |
|
|
+ |
|
ЕВ |
Поразрядное логическое умножение байта |
|
|
|
|
|
|
|
|
|
|
|
DAT с А |
XRI |
DAT |
— |
2 |
11101110 |
+ |
+ |
+ |
+ |
|
ЕЕ |
Сложение по mod? байта данных DAT с А |
ORI |
DAT |
|
2 |
11110110 |
+ |
+ |
+ |
+ |
|
F6 |
Поразрядное логическое сложение байта |
|
|
|
|
|
|
|
|
|
|
|
DAT с А |
CPI |
DAT |
|
2 |
1 1 1 i 1 1 1 0 |
+ |
+ |
+ |
+ |
+ |
FE |
Сравнение А с байтом DAT. Если А < |
|
|
|
|
|
|
|
|
|
|
|
<DAT, то СУ==1;если А > DAT, то |
|
|
|
|
|
|
|
|
|
|
|
CY=0 |
Команды ввода — вывода и обработки прерываний |
|||||||||||
IN |
HOM |
— |
2 |
1 1 0 1 ! 0 1 1 |
|
|
|
|
|
DB |
Байт данных читается из устройсгва в А |
OUT |
HOM |
|
2 |
11010011 |
|
|
|
|
|
D3 |
Байт данных выводится из А в устройство |
El |
|
|
1 |
! 1 1 1 1 0 1 1 |
|
|
|
|
|
FB |
Разрешение прерываний |
DI |
— |
— |
1 |
11110011 |
|
|
|
|
|
F3 |
Запрет прерываний |
HLT |
— |
— |
1 |
01110110 |
|
|
|
|
|
76 |
Останов |
RST |
ADRESS |
2 |
1 1 N NN 1 1 1 |
|
|
|
|
|
XX |
Перезапуск |
|
STC |
— |
—— |
1 |
00110111 |
+ |
|
|
|
|
37 |
Установка флага переноса |
Переход |
Выход из подпрограммы |
Переход на подпрограмму |
|
||||||
|
|
|
|
|
|
|
|
|
Условия |
|
|
|
Мнемо |
|
|
|
|
|
|
Мнемоника |
Код |
Б |
ника |
Код |
Б |
Мнемоника |
Код |
Б |
|
JMP |
сз |
3 |
RET |
C9 |
1 |
CALL |
CD |
3 |
Без условий |
JNZ |
С2 |
3 |
RNZ |
CO |
1 |
CNZ |
C4 |
3 |
Выполнение, если Z = 0; в противном слу' |
|
|
|
|
|
|
|
|
|
чае — пропуск |
J2 |
СА |
3 |
RZ |
C8 |
1 |
CZ |
CC |
3 |
Выполнение, если Z == 1; в .противном слу |
|
|
|
|
|
|
|
|
|
чае — пропуск |
JNC |
D2 |
3 |
RNC |
DO |
1 |
CNC |
D4 |
3 |
Выполнение, если CY ==0; в противном |
|
|
|
|
|
|
|
|
|
случае — пропуск |
JC |
DA |
3 |
RC |
D8 |
1 |
CC |
DC |
3 |
Выполнение, если CY=1; в противном |
|
|
|
|
|
|
|
|
|
случае — пропуск |
JPO |
Е2 |
3 |
RPO |
EO |
1 |
CPO |
E4 |
3 |
Выполнение, если Р == 0; в противном слу |
|
|
|
|
|
|
|
|
|
чае — пропуск |
JPE |
ЕА |
3 |
RPE |
E8 |
1 |
CPE |
EC ^ |
3 |
Выполнение, если Р == 1; в противном слу |
|
|
|
|
|
|
|
|
|
чае — пропуск |
JP |
F2 |
3 |
RP |
FO |
1 |
CP |
F4 |
3 |
Выполнение, если S = 0; в противном слу |
|
|
|
|
|
|
|
|
|
чае — пропуск |
JM |
FA |
3 |
RM |
F8 |
1 |
CM |
FC |
3 |
Выполнение, если S =-= 1; в противном слу |
|
|
|
|
|
|
|
|
|
чае — пропуск |
[SPj —
содержимое ячейки памяти по адресу, хранящемуся в указателе стека—>- —
оператор пересылки <-> — оператор обменаА
— —
вычитание в дополнительном коде—Х-
— умножение /\ — логическое И V — логическое ИЛИ ф — сложение по кодулю 2 NNN — трехразрядный двоичный код вектора прерыванияВ табл.
7.3, кроме того, приведены мнемонические обозначения, двоичные и шестнадцатеричные коды команд, число байтов, содержащихся в команде. Для каждой команды показано ее воздействие на биты признаков условий. Знаком “плюс” отмечены те биты признаков, на которые влияет данная команда.3.
Пояснения к некоторым командамМнемоническая форма записи команд наиболее удобна для запоминания и работы программиста. Однако МП “понимает” лишь команды, представленные в виде двоичных кодов.
В целях облегчения записи первый байт любой команды, содержащий код операции, может быть представлен в виде трехразрядиого восьмеричного кода, как показано, например, на рис.
7.18, а для команды пересылки MOVC, В содержимого регистра В в регистр С. Поскольку два старших разряда первого байта команды преобразуются в старший разряд восьмеричного кода, значение этого восьмеричного разряда не может превышать цифры 3g.Для сокращения числа строк табл.
7.3 некоторые однотипные .команды объединены в группы. Так, все команды пересылки данных между регистрами объединены одним мнемоническим обозначением MOVrdrs, где га означает название регистра-приемника, a rs — название регистра-источника информации. В поле адреса регистра-источника записан условный трехразрядный двоичный код SSS, а в поле адреса регистра-приемника — условный код DDD, как показано на рис. 7.18, б. В частном случае, при пересылке содержимого регистра В в регистр С SSS == 000, а DDD =001.Рис.
7.18. Команды пересылки данных между конкре-шы.ми регистрами В и С (а) и между условными регистрами г, и г^ (б)Рсс.
7.19. Команды пересылки содержимого регистра г^ в ячейку памяти М, адрес которой хранится в регистрах Н и L (а), и содержимого ячейки памяти М в регистр г^ (б)Ранее мы отмечали, что условная ячейка памяти М, адрес которой хранится в регистрах Н и
L, имеет код 110. Если в команде пересылки этот код расположен на месте регистра-приемника (рис. 7.19, а), то выполняется команда MOVMrs, пересылки в память из регистра Гз.Если код
110 находится на месте регистра-источника, то происходит пересылка информации из ячейки памяти М в регистр га по команде MOVrd, М (рис. 7.19, б).Особенностью арифметических команд является то, что результат выполнения команды всегда хранится в аккумуляторе.
К числу арифметических команд относятся команды инкремента
INR и декремента DCR, команды сложения и вычитания содержимого аккумулятора и регистра, команды сравнения содержимого аккумулятора А с содержимым регистра Гэ или ячейки памяти М. При выполнении операций сравнения изменяются соответствующие разряды регистра признаков. Содержимое аккумулятора при этом остается неизменным.При выполнении логических команд результат также передается в аккумулятор. Во всех командах, предусматривающих логические сложение, умножение, суммирование по модулю
2, отрицание, действия производятся параллельно над всеми битами операндов. Так, при выполнении команды ORA М производится поразрядное логическое сложение содержимого аккумулятора и содержимого ячейки памяти М. Если до начала команды (А) = 11000010, а (М) == 11011000, то после ее выполнения содержимое аккумулятора будет 11011010.Операции сдвига также выполняются командами логической группы. Различают две разновидности команд сдвига: сдвиг циклический и сдвиг с переносом. Примером команды первого типа служит команда
RLC — сдвиг циклический влево. Она производит сдвиг содержимого аккумулятора А на один разряд влево. При этом бит младшего разряда устанавливается в состояние бита старшего разряда аккумулятора; бит признака переноса CY также устанавливается в состояние старшего разряда аккумулятораПримером команды второго типа является команда
RAL — сдвиг влево с переносом. При выполнении этой команды производится сдвиг влево содержимого аккумулятора на один разряд. При этом бит пере-
я
5 -Рис.
7.20. Команды сдвига циклического влево (а) и сдвига влево с переносом (б)Рис.
7.21. Условные команды перехода (а), вывода (б) и возврата (а)носа устанавливается в состояние бита старшего разряда аккумулятора, а бит младшего разряда
— в состояние бита переноса (рис. 7.20, б):A,-^A,^;(CV)->A<„ A,-.(CY).
Команды ветвления служат для изменения хода вычислительного процесса в соответствии с программой. Они подразделяются на безусловные и условные. Примером безусловной команды передачи управления служит команда
JMP. Эта команда трехбайтная. При ее появлении в программе, происходит безусловный переход по адресу, указанному во втором и третьем байтах:<Вз)<В,)-^(РС).
В счетчик команд заносится содержимое второго и третьего байтов, причем содержимое второго байта
— в младшие разряды счетчика:(Вз)-^(РСН),
а содержимое третьего байта
— в старший разряд счетчика:<B,)-^(PCL).
Дальнейшее продолжение программы происходит, начиная с адреса, указауного в счетчике
PC.Условная команда передачи управления либо осуществляет, либо не осуществляет изменение хода вычислительного процесса в зависимости от состояния одного из разрядов регистра условий. Все условные команды имеют одинаковую трехбайтную структуру, показанную на рис.
7.2L Код условия выполнения команды задается полем ССС кода операции этой команды.Каждое условие имеет мнемоническое обозначение, которое входит в состав мнемонического обозначения команды. В табл.
7.4 приведе-ны мнемонические обозначения Таблица
7.4. Соответствие поля условных переходов и соответ- ССС признакам условий_______
Обозначение признака условий |
Поле ССС |
Состояние разряда признаков для выполнения условий |
NZ |
000 |
2=0 ' |
Z |
0 0 1 |
Z= 1 |
NC |
0 1 0 |
с==о |
С |
0 1 1 |
С== 1 |
РО |
1 0 0 |
Р=0 |
РЕ |
1 0 1 |
р= 1 |
Р |
1 1 0 |
S= 1 |
М |
1 1 1 |
S== 1 |
ствующие им значения поля ССС. Мнемоническое обозначение команды получается объединением символа перехода
J — (JMP) с обозначением одного из условий. Так, команда условного перехода JNZ по нулевому значению признака Z образуется объединением символа J с мнемоническим обозначением условия NZ.Если заданное полем ССС команды условие выполняется, что
проверяется по значению соответствующего разряда в регистре признаков, то управление передается команде, адрес которой в памяти определяется вторым и третьим байтами команды, т. е. содержимое второго и третьего байтов команды заносится в программный счетчик команд
PC:(В^(РСН);
<B,)-^(PCL).Если заданное полем ССС команды условие не выполняется, то ЦП переходит к выполнению следующей по порядку команды, для чего содержимое счетчика команд просто увеличивается на три единицы:
(РС)+3-^(РС).
Команды безусловного и условного вызовов
(CALL и CALL IF) используются для обращения к подпрограммам, расположенным вне рабочей зоны основной памяти. Мнемоническое обозначение команды условного вызова подпрограмм получается объединением символа С — (CALL) — “вызов” с одним из мнемонических обозначений признаков условий, приведенных в табл. 7.4. Например, команда условного вызова подпрограммы CZ по единичному значению признака Z образуется объединением символа С с мнемоническим обозначением условия Z так же, как это делалось для команд условного перехода.В отличие от рассмотренных выше команд условного или безусловного перехода эти команды всегда предусматривают возможность возврата в прерванную основную программу. Для этого любая команда вызова программы прежде, чем передавать управление команде по указанному адресу, заносит в стек адрес возврата к основной программе. Содержимое старшего разряда программного счетчика (РСН) заносится в стек по адресу
(SP) — 1, а младший полуадрес (PCL ) — в стек по адресу (SP) — 2. Содержимое указателя стека при этом уменьшается на две единицы:(SP)—2->
(SP).Если условие, заданное полем ССС, выполняется, то в дальнейшем происходит переход по адресу, записанному во втором и третьем бай-
тах аналогично тому, как это делается при операциях условного перехода. Если же условие, заданное полем ССС, не выполняется, то ЦП переходит к выполнению следующей по порядку команды, для чего содержимое программного счетчика
(PC) увеличивается на три единицы:(РС)+3->(РС).
Любая подпрограмма всегда должна заканчиваться командой безусловного возврата
RET или командой возврата по условию RET IF.Команды условного или безусловного возвращения к выполнению основной программы передают из стека адрес очередной записанной там команды основной программы в счетчик команд
(PC). При этом старший полуадрес (РСН) считывается из стека по адресу (SP) — 1, а младший полуадрес (PCL) — по адресу (SP). Содержимое указателя стека увеличивается на две единицы:(sp) -> (PCL); (SP) — 1
-^ (РСН); (SP) + 2 -> (SP).Если условие возврата, заданное полем ССС, не выполняется, то происходит переход к выполнению команды по следующему очередному адресу:
(РС)+1-^(РС).
Содержимое указателя стека остается при этом неизменным.
Мнемоническое обозначение команды условного возврата получается объединением символа
R — (RETURN) — “возврат” с мнемоническим обозначением одного из признаков условий, показанных в табл. 7.4. Например, команда возврата RNC по нулевому значению признака переноса (CY = 0) обозначается объединением символа R с мнемоническим обозначением признака NC.Заметим, что команда возврата, в отличие от других команд ветвления, однобайтная, поскольку адрес возврата имеется в ячейке стековой области памяти, обращение к которой происходит по содержимому указателя стека.
Команда
RST осуществляет повторный пуск МП и используется в операциях с вектором прерываний NNN. При поступлении запроса на прерывание МП необходимо сообщить начальный адрес подпрограммы, обслуживающей прерывание данного типа. Этот адрес формируется с помощью команды RST.Команда
RST — однобайтная. Ее код показан на рис. 7.22, а. При выполнении команды RST содержимое счетчика команд засылается в стек. При этом старший полуадрес последующей команды из счетчика команд (PC) переносится по адресу (SP) — 1, а младший полуадрес — в стековую область памяти по адресу (SP) — 2. Содержимое стека при этом уменьшается на две единицы:(SP)—2-^(SP).
Указанные действия обеспечивают возврат к основной программе после завершения прерывающей программы. После выполнения команды
RST содержимое программного счетчика (PC) формируетсяРис.
7.22. Формирование кода NNN команды RST:о—команда
RST; б—адрес следующей команды после выполнения команды RST; в—запросы от устройств на прерываниев виде шестнадцатиразрядного адреса, содержащею поле
NNN, как показано на рис. 7.22, б. Этот адрес и является началом программы обслуживания прерывания данного типа.Трехразрядное поле NNN обеспечивает возможность формирования начальных адресов для восьми различных программ обслуживания прерываний. Например, для программы прерывания номер три, имеющей код NNN = 01 Ig = Зщ, начальный адрес сформируется в виде 0000 0000 0001 lOOOg (или 0018J.
При появлении запроса ка прерывание команда
RST 4юрмируется автоматически. Поэтому указанные восемь кодовых комбинаций нельзя использовать для каких-либо других целей, кроме задания начальных адресов подпрограмм обслуживания прерываний.Формирование команды
RST происходит следующим образом. При поступлении запроса на прерывание от одного из внешних устройств контроллер прерываний (рис. 7.22, е) посылает на вход INT МП запрос на прерывание. Если прерывание разрешено, то МП ответит сигналом IN Т А подтверждения запроса прерывания. По сигналу IN Т А контроллер посылает на шину данных код NNN, который указывает номер устройства, вызвавшего прерывание. В это же время данные с шины данных вводятся в регистр команд МП. Повходамшины данных, подключенным к контроллеру прерываний, в регистр команд передается код NNN. Все остальные входы шины данных находятся в отключенном состоянии, поэтому в соответствующие разряды регистра команд будут записаны единицы. В результате в регистре команд сформируется код команды, показанный на рис. 7.22, а.Команда DAA осуществляет десятичную коррекцию аккумулятора. По этой команде к нему подсоединяется схема десятичной коррекции результата, которая восьмиразрядное двоичное число в аккумуляторе преобразует в два десятичных числа, кодированных двоично-десятичным кодом. Наличие десятичного корректора позволяет обрабатывать двоично-десятичные числа. Для этого после каждой арифметической команды посылается команда коррекции DAA. Под ее воздействием результат двоичной команды может рассматриваться как результат десятичной арифметики.
Команды ввода IN и вывода OUT используются для взаимодействия МП с внешними устройствами. Обе команды являются двухбайтными. По команде IN информация из порта ввода по шинам данных передается в аккумулятор. По команде OUT происходит обратная передача данных из аккумулятора в устройство вывода. Адрес устройств ввода—вывода определяется содержимым второго байта команд (в табл. 7.3 указан как НОМ).
Каждый МП имеет ряд команд, которые не передают и не обрабатывают информацию, а используются лишь для управления работой МП. К таким командам относится, например, команда останова HLT. При ее появлении текущая программа останавливается до тех пор, пока не появится запрос на прерывание. При поступлении запроса на прерывание, если оно разрешено, МП переходит к выполнению первой команды программы, обслуживающей данное прерывание. Разрешение или запрет прерывания можно осуществить программным путем. Если, например, в программе появляется команда DI (запрет прерывания), то МП игнорирует запросы на прерывание до тех пор, пока в программе не появится команда EI (прерывание разрешено).
Если после подачи команды DI (прерывание запрещено) поступит команда HLT, то МП должен остановиться, пока не поступит запрос на прерывание. Однако вследствие того, что прерывание запрещено, запрос на прерывание проигнорируется. МП может быть пущен вновь только сигналом RESET (сброс). При этом счетчик команд обнуляется и выполнение команды начинается сначала. Следует иметь в виду, что при подаче сигнала RESET сброс триггеров регистра признаков не происходит и они остаются в том состоянии, в котором их застал сигнал сброса.