ЛЕКЦИЯ 13-14. СИСТЕМА КОМАНД МП КР580 ИК 80 А
Все множиство команд рассматриваемого МП можно разделить
на 7 групп: пересылки, арифметические, логические,
передачи
управления, команды ввода вывода, обращение к
стеку и управления процессором. В таблице 2.2.
приведена вся система команд
МП, приведено краткое описание, указана длина
команд в байтах,
длительность исполнения в машинных циклах,
возможность управления признаками результата
операции. В таблице принята следующая система
обозначений: Д, S - приемник (destination)
или источник (source) информации, в качестве которых
используются регистры МП В, С, D, Е, Н, L, аккумулятор А и ячейки памяти М
(memory); data - 8
или 16-ти битные слова
данных; аddr - 16-ти битный адрес памяти ; - содержимое ячейки памяти или
регистра МП; (SP) - содержимое указателя стекавой памяти ; port - 8-битный
адрес периферийного
устройства; rp
- регистровая пара ВС, DE, HL или
указатель стека sp; ССС - 3 битный код признака,
используемого в командах передачи управления; n- номер команды
повторного старта, n=0-7.
Команды, выполняемые ЭBM, представляют собой двоичные
числа, которые МП выбирает из памяти, затем
декодирует их и
выполняет требуемые операции. Представленный в
таблице
мнемонические обозначения команды
"непонятно" для МП, но удобно и понятно
программисту.
Программа, написанная с
использованием мнемонических обозначений для
использования ее в ЭBМ должна быть переведена в
двоичный код. Для этой цели используется
специальная программа,
которая носит название ассемблер. Однако, не все
микро-ЭВМ
снабжаются ассемблерами, в некоторых случаях
можно обойтись
и без нее, но не вводить программу в двоичном
коде, а использовать шестнадцатеричный код. Для
облегчения процедуры перевода
можно воспользоваться таблицей 2.3. Для определения кода
необходимо найти горизонталь, на которой
находится кодируемая
команда, а затем вертикаль. Например,
шестнадцатеричный код
команды останов HLT - 76Н (по горизонтали
- строка с цифрой
7, а по вертикали с цифрой 6).
Таблица 2.2.
Группа команд |
Мнемоника команды |
Описание команды |
Число байт |
Число машинных тактов |
Признаки результат операции (флаги) |
||||
P |
C |
AC |
|||||||
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
Команды пересылки кодов |
MOV D,S |
(D) (S) |
1 |
5 |
- |
- |
- |
- |
- |
MVI D,data |
(D) (data) |
2 |
7 |
- |
- |
- |
- |
- |
|
LXI rp, data |
(D) (data) |
3 |
10 |
- |
- |
- |
- |
- |
|
LDA addr |
(A) (addr) |
3 |
13 |
- |
- |
- |
- |
- |
|
STA addr |
(addr) (A) |
3 |
13 |
- |
- |
- |
- |
- |
|
LHLD addr |
L ¬ (addr),H¬ (addr+1) |
3 |
16 |
- |
- |
- |
- |
- |
|
SHLD addr |
(addr) ¬ L,(addr+1) ¬ H |
3 |
16 |
- |
- |
- |
- |
- |
|
LDAX rp |
A¬ (rp) |
1 |
7 |
- |
- |
- |
- |
- |
|
STAX rp |
((rp)) ¬ A |
1 |
7 |
- |
- |
- |
- |
- |
|
XCHG |
(H) ¬ (D), (L) ¬ (E) |
1 |
4 |
- |
- |
- |
- |
- |
|
Команды арифметической Обработки |
ADD S |
(A) ¬ (A)+(S) |
1 |
4 |
+ |
+ |
+ |
+ |
+ |
ADI data |
(A) ¬ (A)+data |
2 |
4 |
+ |
+ |
+ |
+ |
+ |
|
ADC S |
(A) ¬ (A)+(S)+(C) |
1 |
4 |
+ |
+ |
+ |
+ |
+ |
|
ACI data |
(A) ¬ (A)+data+(C) |
2 |
7 |
+ |
+ |
+ |
+ |
+ |
|
DAD rp |
(H,L) ¬ (H,L)+(rp) |
1 |
10 |
- |
- |
- |
- |
- |
|
SUB S |
(A) ¬ (A)-(S) |
1 |
4 |
+ |
+ |
+ |
+ |
+ |
|
SUI data |
(A) ¬ (A)-data |
2 |
7 |
+ |
+ |
+ |
+ |
+ |
|
SBB S |
(A) ¬ (A)-(S)-(C) |
1 |
4 |
+ |
+ |
+ |
+ |
+ |
|
SBI data |
(A) ¬ (A)-data- (C) |
2 |
7 |
+ |
+ |
+ |
+ |
+ |
|
INR D |
(D) ¬ (D)+1 |
1 |
5 |
+ |
+ |
+ |
+ |
+ |
|
INX rp |
(rp) ¬ (rp)+1 |
1 |
5 |
- |
- |
- |
- |
- |
|
DCR D |
(D) ¬ (D)-1 |
1 |
5 |
+ |
+ |
+ |
+ |
+ |
|
DCX rp |
(rp) ¬ (rp)-1 |
1 |
5 |
- |
- |
- |
- |
- |
|
DAA |
Десятичная коррекция |
1 |
4 |
+ |
+ |
+ |
+ |
+ |
|
Команды логической обработки
Логической обработки
|
ANA S |
(A) ¬ (A)^(S) |
1 |
4 |
+ |
+ |
+ |
0 |
+ |
ANI data |
(A) ¬ (A)^data |
2 |
7 |
+ |
+ |
+ |
0 |
+ |
|
XRA S |
(A) ¬ (A)+(S) |
1 |
4 |
+ |
+ |
+ |
0 |
0 |
|
XRI data |
(A) ¬ (A)+data |
2 |
7 |
+ |
+ |
+ |
0 |
0 |
|
ORA S |
(A) ¬ (A)^(S) |
1 |
4 |
+ |
+ |
+ |
0 |
0 |
|
ORI data |
(A) ¬ (A)^data |
2 |
7 |
+ |
+ |
+ |
0 |
0 |
|
CMP S |
(A) ¬ (S) |
1 |
4 |
+ |
+ |
+ |
+ |
+ |
|
CPI data |
(A) ¬ data |
2 |
7 |
+ |
+ |
+ |
+ |
+ |
|
RLC |
(An+1) ¬ An9(A0) ¬ (A7) (C) ¬ (A7) |
1 |
4 |
- |
- |
- |
+ |
- |
|
RRC |
(An) ¬ (An+1), (A7) ¬ (A0) (C) ¬ (A0) |
1 |
4 |
- |
- |
- |
+ |
- |
|
RAL |
(An+1) ¬ An, (C) ¬ (A7) (A0) ¬ (C) |
1 |
4 |
- |
- |
- |
+ |
- |
|
RAR |
(An) ¬ (An+1), (C) ¬ (A0) (A7) ¬ (C) |
1 |
4 |
- |
- |
- |
+ |
- |
|
STC |
(C) ¬ 1 |
1 |
4 |
- |
- |
- |
1 |
- |
|
CMC |
(C) ¬ (C) |
1 |
4 |
- |
- |
- |
+ |
- |
|
CMA |
(A) ¬ (A) |
1 |
4 |
- |
- |
- |
- |
- |
|
Команды передачи управления |
JMP addr |
(PC) ¬ (addr) |
3 |
10 |
- |
- |
- |
- |
- |
Jcond addr |
(PC) ¬ (addr), если условие ССС в поле истино |
3 |
10 |
- |
- |
- |
- |
- |
|
CALL |
((SP)) ¬ (PC), (PC) ¬ (addr вызов подпрограммы) |
3 |
17 |
- |
- |
- |
- |
- |
|
Сcond addr |
(PC) ¬ (addr), ели условие ССС в поле истино |
3 |
11/17 |
- |
- |
- |
- |
- |
|
RET |
Возврат из подпрограммы (PС) ¬ ((SP)) |
1 |
10 |
- |
- |
- |
- |
- |
|
Rcond |
Возврат из подпрограммы, если условие ССС в поле истино |
1 |
5/11 |
- |
- |
- |
- |
- |
|
PCHL |
(PC) ¬ (H,L) |
1 |
5 |
- |
- |
- |
- |
- |
|
RSTn |
Команда повторного старта |
1 |
11 |
- |
- |
- |
- |
- |
|
Команды ввода вывода |
IN port |
(A) ¬ (port) |
2 |
10 |
- |
- |
- |
- |
- |
OUT port |
(port) ¬ (A) |
2 |
10 |
- |
- |
- |
- |
- |
|
Команды работы со стеком |
PUSH rp |
(SP) ¬ (rp) |
1 |
11 |
- |
- |
- |
- |
- |
PUSH PSW |
(SP) ¬ (A) и флаговый регистр (Z, S, P, C, AC) |
1 |
11 |
- |
- |
- |
- |
- |
|
POP rp |
(rp) ¬ ((SP)) |
1 |
10 |
- |
- |
- |
- |
- |
|
POP PSW |
Востановление флагового регистра I, Z, S, P, C, AC) и (A) ¬ ((rp)) |
1 |
10 |
+ |
+ |
+ |
+ |
+ |
|
XTHL |
(H, L) ¬ (SP) |
1 |
18 |
- |
- |
- |
- |
- |
|
SPHL |
(SP) ¬ (H, L) |
1 |
5 |
- |
- |
- |
- |
- |
|
Команды управления МП |
EI |
Разрешение прерывания |
1 |
4 |
- |
- |
- |
- |
- |
DI |
Завершение прерывания |
1 |
11 |
- |
- |
- |
- |
- |
|
HLT |
Останов |
1 |
7 |
- |
- |
- |
- |
- |
|
NOP |
Пустая команда |
1 |
4 |
- |
- |
- |
- |
- |
2. MOV B, A
По этой команде в регистр В посылается содержимое аккумулятора. Команда имеет длину один байт.
3. LDA 4220H.
По этой команде из ячейки 2042Н читается
второй операнд
и загружается в аккумулятор.
4. ADD В
По этой команде к содержимому аккумулятора прибавляется содержимое регистра В. Команда имеет длину один байт.
5. S ТА 4320Н
По этой команде содержимое
аккумулятора посылается в
ячейку 2043Н. Команда имеет длину три байта.
6. HLT
Эта команда является последней и
останавливает процесс.
Команда LDA и SТА требуют задания 16-битного адреса,
в МП К580 младшие 8 бит адреса помещаются в первой
ячейке,
а старшие 8 бит - во второй ячейке.
Пример 2. Разделение слова на части для выделения из одного байта двух шестнадцатеричных чисел, одно число в старшем полубайте, второй в младшем полубайте.
Программа должна из исходного
восьмиразрядного двоичного плова выделить
четыре младших разряда и отправить их в
ячейку 2041, а старшие разряды помещаются на место
младших
и затем в ячейку 2042. Задача решается следующим
образом:
Шаг 1. Прочитать в аккумулятор чисел из ячейки
2040Н.
Шаг 2. Выполнить логическую операцию, "U" над содержимым аккумулятора и
двоичной константой 00001111. В результате младшие
четыре бита исходного слова сохраняются без
изменений (поскольку 0^1=0 и 1^1=1),а старшие биты станут
равными нулю, (поскольку 0^0=0 и 1^0=0).
Шаг 3. Послать содержимое аккумулятора
в ячейку 204IH.
Шаг 4. Вновь прочитать число из ячейки 2040Н.
Шаг 5. Произвести сдвиг содержимого аккумулятора
на 4
бита вправо, с тем чтобы старшие разряды
оказались на месте
младших.
Шаг 6. Выполнить логическую операцию "U" над содержимым аккумулятора и двоичной константой 00001111.
Шаг 7. Послать содержимое аккумулятора
в ячейку 2042.
В виду того, что для размещения исходного числа и
результатов преобразования используются
смежные ячейки, отличающиеся
адресом на "I" , для обращения к ним можно использовать
регистр HL,
как регистр косвенно-регистровой адресации.
Программа имеет следующий вид:
LXI Н,4020Н; Загрузить в
аккумулятор исходные данные;
MOV А,М
MOV В, А;
Запомнить данные в РОН для последующей обработки
ANI OF H; Замаскировать
следующую цифру
INX Н;
Записать в ячейку 2041 младшую
MOV M,А; 16-ричную цифру
MOV А,В; Четырехкратный циклический сдвиг
RRC; вправо
исходного числа, которое хранилось в регистре В
RRC;
RRC
RRC
ANI OFH;
Замаскировать младшую цифру, которая находите я после сдвига на месте старшей
IMX Н; Запомнить старшую
цифру в ячейке; 2042
MOV М,А
HLT
В программе на шаге 1 после чтения исходное число
запоминается в регистре В РОН. Это позволяет на
шаге 4 не
производить повторного чтения исходного числа
из памяти.
Га с смотренные примеры простых программ позволяют отметить следующие особенности в программировании для Ш К680:
1. Основная часть операций по обработке
информации производится над содержимым
аккумулятора. Программа начинается с
загрузки исходных данных из памяти в аккумулятор
и завершается запоминанием результата в ЗУ.
2. При составлении программ следует стремиться к сокращению числа обращений к памяти для чего необходимо запоминать промежуточные данные в РОН.
3. Число обращений к памяти может быть
уменьшено за
счет косвенной адресации с помощью пар регистров HL, DЕ,
ВС. Для чего следует исходные данные и результаты
размещать
в смежных ячейках памяти. Косвенная адресация
позволяет использовать короткие команды
например, команда MOV А,М-
однобайтовая.
3. С помощью команды ЛОГИЧЕСКОЕ И можно обнулять некоторые разряды обрабатываемых слов, что дает возможность работать с данными, имеющими длину, меньшую длины ячейки памяти.
4. С помощью команды сдвига можно осуществлять перемещение данных из одних разрядов в другие в целях их обработки.
В реальных технических системах таких,
как например, узлы
коммутации задача обработки выполняется не над
отдельными данными, а требуют обработки большим
массивов данных или отдельных
элементов, которые занимают несколько ячеек
памяти.
Программы в этом случае должны
выполнять одну и туже
операцию над содержимым нескольких ячеек или
элементов данных. Такое многократное выполнение
операции осуществляется с
помощью программных циклов, числом повторений
цикла управляет
счетчик, а указатели показывают, какой элемент
данных или
фрагмент многословного данного обрабатывается в
данный проход.
Все циклы имеют стандартную конструкцию, которая приведена в виде блок-схемы на рис. 2.6.
Пример 3. Необходимо разместить нули в
шестнадцати ячейках, начиная с адреса 2040, а по
адресу 2040 + F
записать
число FFH.
Процесс заполнения памяти выполняется следующим образом.
Шаг 1. Очистить аккумулятор, установить
указатель в
начало массива ячеек.
Шаг 2. Записать 0 в указанную указателем ячейку памяти.
Шаг 3. Модифицировать указатель и счетчик числа обнуляемых ячеек памяти.
Шаг 4. Проверить, не выполнен ли цикл
заданное число
раз. Если нет, то повторить шаг 2.
Шаг 5. Записать в ячейку число FF и закончить выполнение программы.
Риc. 2.6 .Стандартна я блок-схема циклической программы.
Для выполнения описанной последовательности можно пользоваться следующей программой :
XRA А ; Очистить аккумулятор
LXI H, 4020H; Установить
указатель на адрес; 2040
MVI В, OFH ;Установить
счетчик числа обнуляемых ячеек памяти
LOO: MOV М,А
;Записать "0" в ячейку памяти
IMX H, ; Модификация указателя и счетчика
DCR В
JNZ, LOO ;Проверить завершение записей 0 в ЗУ
MVI M, FFH
;Записать в ЗУ число FF
может быть выполнен следующим образом:
Шаг 1. Установить указатели начала
массива передаваемых
данных и начала области памяти, куда
производится пересылка. Установить счетчик
числа передаваемых байт.
Шаг 2. Прочитать байт из одной области памяти и записать в другую.
Шаг 3. Произвести модификацию указателей и счетчика переданных байт.
Шаг 4. Проверить не завершена ли
передача данных. Если
не завершена перейти к шагу 2. В противном случае
закончить
процесс.
Ниже приводится программа,
составленная по указанному
алгоритму :
LXI Н,2040Н;
Установить указатели массивов
LXI D.2240H;и
счетчик пересылаемых байт
MVI В, OFH
LOO: MOV А, М; Прочитать байт из памяти и запи сать его по новому адресу
SТАХ D
INX Н; Модифицировать указатели и счетчик переданных байт
INX D
DCR
ВJNZ LOO
HLT
Во многих областях применения
микропроцессорам приходится производить
обработку символической информации. Такая
задача встречается при организации работы с
клавишными пультами,
телетайпами, печатающими устройствами,
цифровыми линиями связи,
измерительными приборами и т.д. При связи со стандартными цифровыми
устройствами используются специальные коды, например КОИ-7, который
является национальным вариантом,
стандартногокода обмена информацией. Для
представления алфавитноцифровых
и служебных символов используется семиразрядный
двоичный код.
В таблице 2.4. приведен код КОЙ-7 и указано
соответствие его
цифрам и буквам латинского и русского алфавита.
Для кодирования этих символов в таблице
приведены двоичные и шестнадцатеричные коды.
Таблица 2.4. представляет собой матрицу с 16