Система программирования микропроцессора серии КР580
На основе МП серии К580 построены малоразрядные микроЭВМ СМ1800, программируемые контроллеры для логического (циклического) управления и программируемые регуляторы для динамического и технологического управления в СЧПУ, которые используются для управления автономными объектами и в качестве фрагментов систем управления ГПС.
Изучив систему программирования МП серии К580, можно легко освоить и программирование других МП и микроЭВМ, так как базовые принципы программирования для всех МП устройств одинаковы.
Способы адресации
Для МП К580 различают четыре вида адресации: непосредственную, прямую, регистровую и косвенную.
При непосредственной адресации необходимые данные содержит сама команда во втором и третьем (если он есть) байтах команды, поэтому она является самой экономичной по объему занимаемой памяти и скорости выполнения операций (рисунок 10).
1 байт | 2 байт | 3 байт |
КО | Данные | Данные |
<В1> | <В2> | <ВЗ> |
Рисунок 10 – Непосредственная адресация
При прямой адресации (рисунок 11) данные содержатся в ячейке ОЗУ, а во втором и третьем байтах команды указывается ее шестнадцатиразрядный адрес (в байте В2 - младшие 8 разрядов адреса, в байте ВЗ - старшие 8 разрядов адреса).
1 байт | 2 байт | 3 байт | ||
КО | Данные | Данные | ||
<В1> | <В2> | <ВЗ> | ||
ОЗУ | ||||
Данные | ||||
Рисунок 11 – Прямая адресация
При регистровой адресации данные хранятся в РОН, а в команде указываются коды этих регистров (разряды 0-2 и 3-5 для пары регистров). В разрядах 6,7 указывается код операции КО. Команда однобайтовая (рис. 12).
КО Коды РОН
РОН | |
Данные | Данные |
Рисунок 12 – Регистровая адресация
При косвенной адресации данные содержатся в ячейках ОЗУ, шестнадцатиразрядные адреса этих ячеек – в паре РОН, а их коды – в команде. Старший бит адреса памяти записан в первом РОН пары, младший – во втором регистре пары РОН. Обычно используется пара регистров HL, иногда ВС и DE. Команда однобайтовая (рис. 13).
КО Коды РОН
РОН | |
В | С |
В | Е |
Адрес | Адрес |
H | L |
ОЗУ |
Данные |
Рисунок 13 – Косвенная адресация
Таблица 6- Данные косвенной адресации
Регистр | Код | Пара регистров | Код |
А | ВС | ||
В | DE | ||
С | HL | ||
D | SP (стек) | ||
Е | 01l | ||
Н | |||
L | |||
М (ОЗУ) |
Система команд
По функциональному признаку все команды могут быть разбиты на пять групп: команды пересылки данных, логические команды, арифметические команды, команды переходов, команды работы со стеком, ввода-вывода и управления МП.
Список основных команд приведен в таблице 7. Полный список команд можно найти в специальной литературе.
Таблица 7 – Список основных команд
Группа команд | Мнемокод команд | Восьмеричный код команды | Содержание команды | Число байт | Признаки результата операций | ||||
Z | S | P | C | AC | |||||
Команды пересылки | MOV D,S | 1DS | (D)(S) | - | - | - | - | - | |
MVI D,d | 0D6 | (D1)d | - | - | - | - | - | ||
LXI rp, d | 0D11 | (D1)D | - | - | - | - | - | ||
LDA a | (A) (a) | - | - | - | - | - | |||
STA a | (a) (A) | - | - | - | - | - | |||
LHLD a | L(a), H(a+1) | - | - | - | - | - | |||
SHLD a | (a)L, (a+1) (H) | - | - | - | - | - | |||
LDAX rp | 0D22 | A(rp) | - | - | - | - | - | ||
STAX rp | 0D23 | ((rp))A | - | - | - | - | - | ||
XCHG | (H)<->(D), (L)<->(E) | - | - | - | - | - | |||
Арифметические команды | ADD S | 20S | (A) (A)+(S) | + | + | + | + | + | |
ADI d | (A) (A)+d | + | + | + | + | + | |||
ADC S | 21S | (A) (A)+(S)+(C) | + | + | + | + | + | ||
ACI d | (A) (A)+d+(C) | + | + | + | + | + | |||
DAD rp | 0D41 | (HL) (HL)+(rp) | - | - | - | + | - | ||
SUB S | 22S | (A) (A)-(S) | + | + | + | + | + | ||
SUI d | (A) (A)-d | + | + | + | + | + | |||
SBB S | 23S | (A) (A)-(S)-(C) | + | + | + | + | + | ||
SBI d | (A) (A)-d-(C) | + | + | + | + | + | |||
INR D | 0S4 | (D) (D)+1 | + | + | + | + | + | ||
INX rp | 0D53 | (rp) (rp)+1 | - | - | - | - | - | ||
DRC D | 0D5 | (D) (D)-1 | + | + | + | - | + | ||
DRC rp | 0D25 | (rp) (rp)-1 | - | - | - | - | - | ||
DAA | Десятичная коррекция | + | + | + | + | + |
Продолжение таблицы 7
Группа команд | Мнемокод команд | Восьмеричный код команды | Содержание команды | Число байт | Признаки результата операций | ||||
Z | S | P | C | AC | |||||
Логические команды | ANA S | 24S | (A)(A)^(S) | + | + | + | + | ||
ANI d | (A)(A)^d | + | + | + | + | ||||
XRA S | 25S | (A)(A)Å(S) | + | + | + | ||||
XRI d | (A)(A) Åd | + | + | + | |||||
ORA S | 26S | (A)(A)V(S) | + | + | + | ||||
ORI d | (A)(A)Vd | + | + | + | |||||
CMP s | 27S | (A)-(S) | + | + | + | + | + | ||
CMI d | (A)-d | + | + | + | + | + | |||
RLC | (An+1) (An), (A0) (A7), (C) (A7) | - | - | - | + | - | |||
RRC | (An+1) (An), (AT) (A0) | - | - | - | + | - | |||
RAL | (An) (An+1), (C) (A7), (A0) (C), | - | - | - | + | - | |||
RAR | (An+1) (An), (C) (A0), (A7) (C), | - | - | - | + | - | |||
STC | (C) 1 | - | - | - | - | ||||
CMC | (C) (OC) | - | - | - | + | - | |||
CMA | (A) (OA) | - | - | - | - | - | |||
Команды переходов | JMP a | (PC) a | - | - | - | - | - | ||
Jc a | (PC) a, если условие ССС в поле С истинно | - | - | - | - | - | |||
CALL a | (РС) а | - | - | - | - | - | |||
Cc a | (РС) а, если условие ССС в поле С истинно | - | - | - | - | - | |||
RET | Возврат из подпрограммы | - | - | - | - | - | |||
Rc | Возврат из одпрограммы, если условие ССС в поле С истинно | - | - | - | - | - | |||
PCHL | (PC) (H,L) | - | - | - | - | - | |||
RST n | 3n7 | Команда повторного старта | - | - | - | - | - | ||
Команды ввода-вывода | IN P | (A) (P) | - | - | - | - | - | ||
OUT P | (P) (A) | - | - | - | - | - | |||
PUSH rp | 3D65 | ((SP)) (rp) | - | - | - | - | - | ||
PUSH PSW | ((SP)) (A) u (Z,S,P,C,AC) | - | - | - | - | - | |||
POP rp | 3D61 | (rp) ((SP)) | - | - | - | - | - | ||
POP PSW | (Z,S,P,C,AC) u (A) ((SP)) | + | + | + | + | + | |||
XTHL | (HL)<->((SP)) | - | - | - | - | - | |||
SPHL | (SP)<->(HL) | - | - | - | - | - | |||
E1 | Разрешение прерывания | - | - | - | - | - | |||
D1 | Запрещение прерывания | - | - | - | - | - | |||
HLT | Остановка | - | - | - | - | - | |||
NOP | Нет операции | - | - | - | - | - |
В таблице 7 приняты следующие обозначения:
rp – регистровая пара;
S – регистр-источник (source);
D – регистр-приемник (destination). Если на позиции S или D стоит 0,1,2,3,4, 5,6,7, то регистрами являются РОН В, С, D, Е, Н, L и М, А соответственно, где М – регистр в памяти (memory), A – аккумулятор;
d – (data) - восьми или шестнадцатибитное данное;
а – (address) - шестнадцатибитный адрес памяти;
(...) – содержимое ячейки памяти РОН МП;
(SP) – содержимое указателя стековой памяти;
((SP)) – содержимое ячейки стековой памяти;
D1 = 0, 2, 4, 6 для соответственных регистров РОН В, D, Н, SP;
D2 = 1, 3 для пар регистров ВС, DE;
D3 = 0, 2 для пар регистров ВС, DE;
D4 = 1, 3, 5, 7 для пар регистров ВС, DE, HL, SP;
D5 = 0, 2, 4, 6 для регистров В, D, Н, HL;
D6 = 0, 2, 4 для пар регистров ВС, DE, HL;
n – номер команды повторного старта, n равно от 0 до 7;
р – (port) - 8-битный адрес ПУ;
С – (condition) - условие;
ССС – трехбитный код признака, используемого в командах передачи (табл.8). Цифры в графе 3, записанные в восьмеричном коде, в программе должны представляться в двоичном коде, т.е. 1=001, 2=010, З=011,…,7=111. Символы V, ^, О, Å - логические операции И, ИЛИ, НЕ, исключающее ИЛИ, AC - перенос 1 из младшей тетрады при сложении, «+» - формируется по результату операции, «-» - не изменяется, «О» -очищается, «1» - устанавливается.
Таблица 8
Код | Признак С | Значение признаков |
ССС | ||
NZ | Z=0, результат не равен 0 | |
Z | Z=1, результат равен 0 | |
NC | С=0, нет переноса | |
Oil | С | С=1, есть перенос |
РО | Р=0, результат четный | |
РЕ | Р=1, результат нечетный | |
Р | S=0, результат положительный | |
М | S=1, результат отрицательный |
Команды пересылки обеспечивают пересылку данных между регистрами или памятью и регистрами, признаков результата не формируют.
Пример 1.
MOV D,S - команда пересылает данные из регистра S - источника в регистр D - приемника.
В качестве S могут выступать следующие РОН: В, С, D, Н, L или аккумулятор А. Формат команды приведен на рисунке 12.
<B1> | D | D | D | S | S | S | MOV D,S |
а)
<B1> | S | S | S | MOV M,S |
KO (M) (S)
в)
Рисунок 14 – Форматы команд MOV D,S, и MOV M,S
Если D и S поставить коды РОН из таблицы 6, получится, например, команда 01 010 001, где 01 – код команды из таблицы 7. (IDS) – 1 в двоичном коде соответствует 01, 010 – код регистра-приемника D, соответствующий РОН D (см. табл. 6), 001 – код регистра источника S, соответствующий РОН С, т.е. восьмеричный код команды 121. Таким образом, по данной команде произойдет пересылка данных из регистра С в регистр D, при этом содержимое С сохраняется.
Пример 2.
MOV MS – команда пересылает данные из регистра S (которым могут быть А, В, С, D, H, L) в ячейку памяти М (код в таблице 6), указанной в регистровой паре HL (рис. 14).
Пример 3.
MOV D,M – команда пересылает данные из ячейки памяти М адрес которой указан в HL, в регистр D, т.е. А и РОН В, С, D, H, L (рисунок 15).
<B1> | D | D | D | MOV D,M |
KO (D) (M)
Рисунок 15 – Формат команды MOV D,M
Арифметические команды служат для выполнения арифметических операций над данными, хранящимися в РОН и ячейках памяти М, при этом она оказывает влияние на состояние признаков ССС (таблица 8), появляющихся в регистрах специального флагового регистра ФР – регистра состояний. Признаки ССС формируются АЛУ.
Пример 1.
ADD S – команда выполняет сложение содержимого регистра S с содержимым регистра-аккумулятора А, результат помещается в А.
В кодах команда записывается как, например, 10 000 001, где 10 000 – код ADD из таблицы 7 (20S) – 2 в двоичной системе соответствует 10, 0 соответствует 000, вместо S стоит 001, т.е. регистр С (рис. 16). Следовательно, при выполнении команды ADD С содержимое С прибавляется к содержимому А. Восьмеричный код команды – 201.
<B1> | S | S | S | ADD S |
KO (S)
(A)+(S)®(A)
Рисунок 16 – Формат команды ADD S
Пример. 2.
SUB S – вычитание (S) из (А) с записью результата в А (рисунок 17).
Команда 10 010 01l в соответствии с кодом из табл. 7 (22S) содержит 10 0102 = 22 – код вычитания, 011г = 3 (РОН Е), т.е. по команде SUB Е из (А) вычитается (Е). Восьмеричный код 223.
<B1> | S | S | S | SUB S |
KO (S)
(A)-(S)®(A)
Рисунок 17 – Формат команды SUB S Пример 3.
SUI2 – вычитание содержимого второго байта В2 из А и помещение результата в А (рис. 18). Команда двухбайтовая.
<B1> | SUI a |
KO
(A)-(<B2>)®(A)
<B2> | Данные S |
Рисунок 18 – Формат команды SUI а
Логические команды реализуют операции И, ИЛИ, НЕ, исключающее ИЛИ, сдвиги влево и вправо и другие команды с формированием признаков ССС.
Операнды хранятся в РОН или ячейках ОЗУ, результат помещается в аккумулятор.
Пример 1.
ANA S – команда выполняет операцию поразрядного логического И над (S) и (А). Например, команда 10 100 100 поразрядно логически умножает (А) и (H), восьмеричный код для команды ANA H -244(рис. 19).
<B1> | S | S | S | ANA S |
KO (S)
(A) & (S)®(A)
Рисунок 19 – Формат команды ANA S
Пример 2.
ANI2 выполняет поразрядно операцию И над содержимым второго байта В2 и (А). Команда двухбайтовая, ее код 346, т.е. в двоичной форме 11 100 110(см. рис. 20)
<B1> | ANI a |
KO
(A) & (<B2>)®(A)
<B2> | Данные S |
Рисунок 20 – Формат команды ANI а
Пример 3.
ORA S аналогична команде ANA S, но выполняет операцию поразрядного логического ИЛИ, т.е. (A)V(S)® (A), код 26S.
Команды переходов служат для организации правильной последовательности выполнения программы, включают команды условного и безусловного переходов, вызова подпрограммы, возвращения в основную программу и др. Все команды на признаки ССС не влияют. Команды безусловного перехода выполняют специальные операции над содержимым СК. Команды условного перехода обеспечивают ветвления по анализу признаков ССС (табл. 8).
Пример 1.
JMP 2 3 – трехбайтовая команда передачи управления по адресу, содержащемуся в В2 и ВЗ путем записи содержимого В2 и ВЗ в PC (PC - шестнадцатиразрядный регистр). Код команды 303 (рис. 21).
<B1> | КО |
<B2> | Младшие разряды адреса S | JMP a |
<B3> | Старшие разряды адреса S |
(ВЗ) (В2) -> (PC), где PC - счетчик команд
Рисунок 21 – Формат команды JMP a
Пример 2.
CALL a – команда безусловного перехода к подпрограмме, трехбайтовая (рис. 22). Восемь старших разрядов адреса следующей команды пересылаются в ячейку памяти, адрес которой на один меньше содержимого указателя стека SP. Восемь младших разрядов адреса следующей команды пересылаются в ячейку памяти, адрес которой на два меньше (SP). Содержимое SP уменьшается на два. Управление передается команде, адрес которой расположен в В2 и ВЗ команды CALL:
((SP) - 1) (РСН);
((SP) - 2) (PCL);
(SP) ((SP) - 2);
(PC) (ВЗ) (В2).
Код команды – 315.
<B1> |
<B2> | Младшие разряды адреса S |
<B3> | Старшие разряды адреса S |
Рисунок 22 – Формат команды CALL a
Пример 3.
RET – однобайтовая команда с кодом 311, по ней содержимое указателя стека увеличивается на два, содержимое ячейки памяти по адресу, хранящемуся в SP, пересылается в СК на место младших восьми разрядов, содержимое ячейки памяти, по адресу на один большему, чем содержимое SP, пересылается в СК на место старших восьми разрядов.
(PCL) (SP);
(РСН) ((SP) + 1);
(SP) ((SP) + 2).
Таким образом, возврат в основную программу происходит при обращении к байту команды, следующему за байтом, используемым командой CALL.
Команды управления, ввода-вывода и работы со стеком служат для управления работой МП, портами ввода-вывода и стеком; на флаги ССС влияния не оказывают.
Пример 1.
XTHL меняет содержимое регистра L на содержимое ячейки памяти по адресу, содержащемуся в указателе стека SP, и наоборот. Содержимое РОН Н меняется на содержимое ячейки памяти по адресу, на один большему, чем (SP) и наоборот. Команда однобайтовая, код -343.
(L)® (SP);
(Н) ® ((SP) + 1).
Пример 2.
IN <B2>, OUT <B2> - двухбайтовые команды, служат для ввода данных от входного порта в А и вывода данных из А в выходной порт, соответственно, имеют коды 333 и 323. Второй байт обеих команд отведен под адрес соответствующего входного и выходного портов (рисунок 23).
<B1> |
IN p
<B2> | Адреса порта S |
(А) (Данные)
Рисунок 23 – Формат команд IN и OUT
Дата добавления: 2019-02-07; просмотров: 1004;