СИСТЕМА КОМАНД И СПОСОБЫ АДРЕСАЦИИ
Система команд микропроцессора КР580ИК80А представлена 244 кодами операций, которые могут быть расклассифицированы по разным признакам. Наиболее существенными для ознакомления с особенностями их использования являются следующие три признака: длина команды, или число занимаемых байтов, функциональный признак, или выполняемые командой операции, и способ адресации. Полный перечень команд приведен в приложении 1. В таблице приведены символическая запись (мнемокод) команды, описание выполняемых ею функций, длина в байтах, обозначения изменяемых флагов и число машинных тактов, занимаемых при ее выполнении. Из 256 возможных кодов (при восьми двоичных разрядах) не используются следующие 12 кодовых комбинаций (в восьмеричной записи): 010, 020, 030, 040, 050, 060, 070, 313, 331, 335, 355 и 375. Этим и объясняется количество всех команд: 244. Команды в таблице разбиты на три группы по числу занимаемых байтов: все команды делятся на однобайтовые, двухбайтовые и трехбайтовые. При этом первый байт всегда отводится под код команды, а второй и третий байты содержат либо данные, либо адрес, по которому они находятся в памяти (рис. 4.6).
Восьмеричные коды всех однобайтовых, двухбайтовых и трехбайтовых команд приведены соответственно в табл. 4.1, 4.2 и 4.3. При этом в табл. 4.1 наряду с обычными указаны обобщенные коды, т. е. коды, содержащие кроме восьмеричных цифр кодовые переменные S, D и А. В табл. 4.1 если код команды содержит только цифры, это означает, что существует единственная команда с соответствующим кодом. Некоторые коды кроме цифр содержат буквы: S (первые И команд), D (третья команда) и А (последняя команда). Таким кодам соответствуют множества команд. При этом каждой команде из первых 11 команд, кроме третьей, соответствует группа конкретных команд, мнемокод которых вместо символа г (регистр) содержит обозначения конкретных регистров (В, С, D, Е, Н, L), либо символ памяти (М), либо символ аккумулятора (А). Соответствующий конкретный восьмеричный код команды вместо символа S должен содержать одну из цифр: О, 1, 2, 3, 4, 5, 6, 7 соответственно, т.
е. символу В в мнемокоде соответствует цифра 0 в восьмеричном коде, символу С в мнемокоде — цифра 1 в восьмеричном коде и т. д,. . ., символу М в мнемокоде — цифра 6 в восьмеричном коде и, наконец, символу А в мнемокоде — цифра 7 в восьмеричном коде. Для третьей команды в табл. 4.1 точно такая же аналогия соблюдается для пар символов гь г2
и D, S. Последняя команда таблицы содержит символ А в мнемокоде и в восьмеричном коде. Она соответствует группе из восьми конкретных команд, в каждой из которых символ А принимает одно из значений: О, 1, ... ...,7.
Рис. 4.6. Форматы команд: однобайтовой (а), двухбайтовой (б), трехбайтовой (в)
Таблица 4.1 |
|||||||||||||||
Код |
Команда |
Код |
Команда |
|
|
Код |
Команда |
||||||||
OS4 |
INR |
r |
|
051 |
DAD |
H |
|
370 |
RM |
|
|||||
OS5 |
DCR |
r |
|
071 |
DAD |
SP |
311 |
RET |
|
||||||
1DS |
MOV |
r1r2 |
301 |
POP |
В |
|
007 |
RLC |
|
||||||
20S |
ADD |
r |
|
321 |
POP |
D |
|
017 |
RRC |
|
|||||
21S |
ADC |
r |
|
341 |
POP |
H |
|
027 |
RAL |
|
|||||
22S |
SUB |
r |
|
361 |
POP |
PSW |
037 |
RAR |
|
||||||
23S |
SBB |
r |
|
305 |
PUSH |
В |
|
353 |
XCHG |
||||||
24S |
ANA |
r |
|
325 |
PUSH |
D |
|
343 |
XTHL |
||||||
25S |
XRA |
r |
|
345 |
PUSH |
H |
|
371 |
SPHL |
||||||
26S |
ORA |
r |
|
365 |
PUSH |
PSW |
351 |
PCHL |
|||||||
27S |
CMP |
r |
|
002 |
STAX |
В |
|
166 |
HLT |
|
|||||
003 |
INX |
в |
|
022 |
STAX |
D |
|
000 |
NOP |
|
|||||
023 |
INX |
D |
|
012 |
LDAX |
В |
|
363 |
DI |
|
|||||
043 |
INX |
H |
|
032 |
LDAX |
D |
|
373 |
El |
|
|||||
063 |
INX |
SP |
300 |
RNZ |
|
|
047 |
DAA |
|
||||||
013 |
OCX |
В |
|
310 |
RZ |
|
|
057 |
CMA |
|
|||||
033 |
OCX |
D |
|
320 |
RNC |
|
|
067 |
STC |
|
|||||
053 |
OCX |
H |
|
330 |
RC |
|
|
077 |
CMC |
|
|||||
073 |
DCX |
SP |
340 |
RPO |
|
|
3A7 |
RST |
A |
||||||
011 |
DAD |
В |
|
350 |
RPE |
|
|
|
|
|
|||||
031 |
DAD |
D |
|
360 |
RP |
|
|
|
|
|
|||||
Таблица 4.2 |
|||||||||||||||
Код |
Команда |
Код |
Команда |
||||||||||||
306 |
ADI |
|
<B2> |
|
323 |
OUT |
<B2> |
|
|||||||
316 |
ACI |
|
<B2> |
|
006 |
|
MVI |
В |
<B2> |
|
|||||
326 |
SUI |
|
<B2> |
|
016 |
|
MVI |
С |
<B2> |
|
|||||
336 |
SBI |
|
<B2> |
|
026 |
|
MVI |
D |
<B2> |
|
|||||
346 |
ANI |
|
<B2> |
|
036 |
|
MVI |
E |
<B2) |
|
|||||
356 |
XRI |
|
<B2> |
|
046 |
|
MVI |
H |
<B2> |
|
|||||
366 |
ORI |
|
<B2> |
|
056 |
|
MVI |
L |
<B2> |
|
|||||
376 |
CPI |
|
<B2> |
|
066 |
|
MVI |
M |
<B2> |
|
|||||
333 |
IN |
|
<B2> |
|
076 |
|
MVI |
A |
<B2> |
|
|||||
Таблица 4.3 |
|||||||||||||||
Код |
Команда |
Код |
Команда |
||||||||||||
302 |
JNZ |
<В2><ВЗ> |
344 |
СРО |
<B2><B3> |
||||||||||
312 |
JZ |
<В2><ВЗ> |
354 |
СРЕ |
<B2><B3> |
||||||||||
322 |
JNC |
<В2><ВЗ> |
364 |
СР |
<B2><B3> |
||||||||||
332 |
JC |
<В2><ВЗ> |
374 |
СМ |
<B2><B3> |
||||||||||
342 |
JPO |
<В2><ВЗ> |
315 |
CALL |
<B2><B3> |
||||||||||
352 |
JPE |
<В2><ВЗ> |
001 |
LXIB |
<B2><B3> |
||||||||||
362 |
JP |
<В2><ВЗ> |
021 |
LXI D |
<B2><B3> |
||||||||||
372 |
JM |
<В2><ВЗ> |
041 |
LXIH |
<B2><B3> |
||||||||||
303 |
JMP |
<В2><ВЗ> |
061 |
LXISP |
<B2><B3> |
||||||||||
304 |
CNZ |
<В2><ВЗ> |
062 |
STA |
<B2><B3> |
||||||||||
314 |
CZ |
<В2><ВЗ> |
072 |
LDA |
<B2><B3> |
||||||||||
324 |
CNC |
<В2><ВЗ> |
042 |
SHLD |
<B2><B3> |
||||||||||
334 |
СС |
<В2><ВЗ> |
052 |
LHLD |
<B2><B3> |
||||||||||
Как видно из табл. 4.2, микропроцессор КР580ИК80А может выполнять всего 18 двухбайтовых и 26 трехбайтовых команд, приведенных в табл. 4.3.
Прежде чем переходить к обзору особенностей выполнения различных операций приведенными командами, остановимся на возможных способах адресации. Под способом или режимом адресации подразумевается способ определения данных, участвующих в операциях, или, иначе говоря, способ определения операндов. Для составления программы важно знать особенности процедур, позволяющих преобразовать информацию об адресах команд и данных в физические адреса участков памяти машины.
Для МП КР580ИК80А существуют следующие четыре возможных способа адресации: непосредственная, прямая, регистровая и косвенная.
Непосредственная адресация является наиболее экономичным способом хранения и поиска информации, поскольку необходимые данные содержит сама команда. Эти данные содержатся во втором и третьем байтах трехбайтовой команды или во втором байте двухбайтовой команды. В случае трехбайтовой команды младшие разряды 16-битового числа содержатся во втором байте команды, а старшие - в третьем (рис. 4.7,а).
Менее экономичной, но также довольно простой является прямая адресация. В этом случае во втором и третьем байтах команды содержится полный 16-разрядный адрес памяти. Младшим байтом адреса является <В2>, старшим — <ВЗ) (рис. 4.7,6). Таким способом можно адресоваться к любой ячейке адресного пространства памяти.
При регистровой адресации код команды содержит указание на регистр или пару регистров, в которых содержатся данные. Используемые в регистровой адресации команды являются однобайтовыми (рис. 4.7,в). Возможность указания пары регистров в однобайтовой команде реализуется за счет того, что адреса регистров являются трехразрядными двоичными кодами.
Косвенная адресация отличается от регистровой лишь тем, что в регистровой паре, определяемой кодом команды, содержатся не данные, а полный 16-разрядный адрес ячейки памяти,в которой имеются эти данные (рис. 4.7,г).
Старший байт адреса записывается в первом регистре пары, а младший байт — во втором. Обычно указателем адреса при косвенной адресации являются пара регистров Н, т. е. регистры Н, L, но иногда используются и пары В и D.
При всевозможных пересылках данных из регистров в регистры или из памяти в регистры или обратно различают регистры — источники данных и регистры — приемники данных. Первые обозначаются символом S (source — источник), вторые — символом D (destination — место назначения). В регистровых парах В, С; D, Е и Н, L старшими являются первые регистры пар, т. е. регистры В, D, Н соответственно. Коды регистров общего назначения, пар регистров и флагов строго фиксированы (табл. 4.4).
В табл. 4.4 обозначение условия в мнемокоде команды в зависимости от значения флагов расшифровывается следующим образом: NZ — результат ненулевой; Z — результат нулевой; NC — нет переноса; С — есть перенос; РО - нет четности; РЕ — есть четность; Р — результат положительный (плюс) ; М -результат отрицательный (минус).
Рис. 4.7. Способы адресации: непосредственная (а), прямая (б), регистровая (в) и косвенная (г)
Все команды по функциональному признаку могут быть разбиты на следующие пять групп: группа команд пересылки данных, арифметические команды, логические команды, команды переходов и команды управления и работы со стеком. Рассмотрим работу наиболее типичных представителей этих групп команд, многие из которых вошли в описываемую ниже программу-монитор (см. § 7.4).
4.6.1. ГРУППА КОМАНД ПЕРЕСЫЛКИ ДАННЫХ
В этой группе встречаются команды, пересылающие содержащиеся в них данные в регистры и в память, а также команды пересылки данных между регистрами и между регистрами и памятью. Рассмотрим команды пересылки данных из одного регистра МП в другой, из регистра МП в ячейку ОЗУ и из ячейки ОЗУ в регистр МП. В мнемонике команд, используемых в данной книге, порядок пересылки данных всегда предполагается в направлении от крайнего правого операнда к следующему слева операнду, отделенному от первого запятой.
Команда MOV rt, r2. Эта команда предназначена для пересылки данных из регистра S (источник, или г2) в регистр D (приемник, или rt). В качестве регистра-источника и регистра-прием ника может выступать любой из регистров В, С, D, H, L или аккумулятор А. Содержимое регистра-источника при этом не меняется. В регистре-приемнике просто появляется копия содержимого регистра-источника. На рис. 4.8,а приведен формат этой команды. Чтобы получить конкретную команду, необходимо вместо символов D и S в формате команды рис. 4.8,я проставить из табл. 4.4 коды соответствующих регистров. Например, команда 01 010 000 В пересылает данные из регистра В в регистр D (в регистре D после выполнения команды будут содержаться т© же данные, что и в регистре В). В восьмеричной системе это число (код команды) будет представлено как 120Q (см. список команд в приложении 1).
Команда MOV М, г. Эта команда может быть получена из предыдущей заменой символов D кодом М из табл. 4.4. Команда пересылает данные из регистра-источника в ячейку памяти по адресу, указанному в регистровой паре Н, L. Регистром-источником может служить любой регистр В, С, D, H, L или аккумулятор А. После выполнения команды в ячейке памяти появится копия содержимого регистра-источника. Содержимое самого регистра не изменится. Код конкретной команды получается фиксацией кода регистра-источника (рис. 4.8,6).
Рис. 4.8. Примеры размещения некоторых команд пересылки данных в байтах
Рис. 4.9. Примеры размещения некоторых арифметических команд в байтах
Команда MOV г, М. Команда также получается из первой заменой символов S кодом М из табл. 4.4. Команда пересылает данные из ячейки памяти по адресу, указанному в регистровой паре Н, L, в регистр-приемник, в качестве которого может использоваться любой регистр В, С, D, H, L или аккумулятор А. После выполнения команды в регистре-приемнике появляется копия содержимого ячейки памяти (рис. 4.8,в).
На этом закончим рассмотрение примеров команд этой группы.Отметим лишь, что все команды из группы пересылки данных на значения флагов влияния не оказывают.