Простые программы целесообразно оформлять в виде командных файлов. Первой директивой таких программ является директива ORG 100H, последней – END.
Пример 1. Написать программу сложения содержимого двух 8-разрядных ячеек памяти, которые находятся в сегменте данных со смещениями 1000Н и 1001Н соответственно. Результат разместить в ячейке памяти с адресом 1002H.
В этом примере для простоты не будем учитывать возможность возникновения переносов. Программа имеет вид:
Мнемокод | Операнд(ы) | Комментарии |
ORG | 100H | ; Начало программы |
MOV | A, 1000H | ; A - 1000H ; переслать в 8-разрядный регистр A содержимое ячейки; памяти 1000 в шестнадцатеричном коде (Н) |
ADD | A, 1001H | ; A - A + 1001H ; прибавить к содержимому A содержимое ячейки памяти ; с адресом 1001 в шестнадцатеричном коде |
MOV | 1002H, A | ; 1002H- A ; переслать содержимое A в ячейку 1002H |
END | ; завершение программы |
Пример 2 Написать программу делениясодержимого А на содержимое В. Результат поместить в 8-разрядную ячейку памяти с адресом 1000Н. остатком от деления пренебречь. Если содержимое В=0, то деление не выполнять, а на место результата поместить число FFFFH.
Метка | Мнемокод | Операнд(ы) | Комментарии |
ORG | 100H | ; Начало программы | |
CMP | B,0 | ; сравнить содержимое В с нулем (команда ; влияет на установку флага нуля Z) | |
JZ | M1 | ; если Z=1 (В=0), то переход на метку М1 | |
DIV | B | ; иначе выполнить деление А – А:В | |
JMP | M2 | ; безусловный переход на метку М» | |
М1: | MOV | A, FFFFH | ; занести число FFFFH в А |
М2: | MOV | 1000H, A | ; запомнить А в ячейке с адресом 1000Н |
END | ; завершение программы |
СИСТЕМА КОМАНД 8-РАЗРЯДНОГО ОДНОКРИСТАЛЬНОГО МИКРОПРОЦЕССОРА КР580ВМ80А
№ | Мнемокод | Операция | Содержание команды | Признаки |
Группа команд пересылки | ||||
MOV R1, R2 | (R1) – (R2) | Передать содержимое одного регистра в другой | Все признаки сохраняют свои значения | |
XCHG | (HL) – (DE) | Поменять местами содержимое регистровых пар D, E и H, L | ||
SPHL | (SP) – (HL) | Передать содержимое регистровой пары H, L в указатель стека | ||
MOV R, M | (R) - M (HL) | Передать содержимое регистра в ячейку памяти по адресу, хранящемуся в регистровой паре H, L | ||
MOV M, R | M (HL) – (R) | Передать содержимое ячейки памяти по адресу, хранящемуся в регистровой паре H, L в регистр | ||
LDAX RP’ | (A) – M (RP) | Загрузка аккумулятора содержимым ячейки, адрес которой указан в регистровой паре | ||
STAX RP’ | M (RP) – (A) | Запись содержимого аккумулятора в память по адресу, указанному в регистровой паре | ||
LDA A16 | (A) – M (A16) | Загрузка аккумулятора содержимым ячейки, адрес которой указан во втором и третьем байтах команды | ||
STA A16 | M (A16) – (A) | Запись содержимого аккумулятора в память по адресу, указанному во втором и третьем байтах команды | ||
LHLD A16 | (HL) – M (A16) | Загрузка регистровой пары H, L содержимым ячейки памяти с адресом, указанным во втором и третьем байтах команды | ||
SHLD A16 | M (A16) – (HL) | Запись в память содержимого регистровой пары H, L по адресу, указанному во втором и третьем байтах команды | ||
MVI R, D8 | (R) - D8 | Загрузка регистра вторым байтом команды | ||
LXI RP, D16 | (RP) – D16 | Загрузка регистровой пары вторым и третьим байтом команды | ||
MVI M, D8 | M (HL) – D8 | |||
PUSH RP” | M (SP –1) – (RPH) M (SP – 2) – (RPL) (SP) – (SP) –2 | Запись содержимого регистровой пары в стек | ||
POP RP” | (RPL) – M (SP) (RPH) – M (SP + 1) (SP) – (SP) + 2 | Загрузка регистровой пары из стека | ||
XTHL | M (SP) - - (H) M (SP – 1) - - (L) | Поменять местами содержимое верхней ячейки стека и регистровой пары H, L | ||
IN PORT | (A) – I (PORT) | Ввод | ||
OUT PORT | O (PORT) – (A) | Вывод | ||
Группа команд арифметических операций | ||||
ADD R | (A) – (A) + (R) | К содержимому аккумулятора добавить содержимое регистра | S, Z, AC, P, CY | |
ADC R | (A) – (A) + (R) +CY | К содержимому аккумулятора добавить содержимое регистра с учетом состояния триггера переноса | S, Z, AC, P, CY | |
SUB R | (A) – (A) - (R) | Вычесть из содержимого аккумулятора содержимое регистра | S, Z, AC, P, CY | |
SBB R | (A) – (A) - (R)-CY | Вычесть из содержимого аккумулятора содержимое регистра с учетом состояния триггера переноса (займа) | S, Z, AC, P, CY | |
INR R | (R) – (R) + 1 | Увеличить содержимое регистра на 1 | S, Z, AC, P | |
DCR R | (R) – (R) - 1 | Уменьшить содержимое регистра на 1 | S, Z, AC, P | |
DAD RP | (HL) – (HL) + (RP) | К содержимому регистровой пары H, L прибавить содержимое любой регистровой пары | CY | |
INX RP | (RP) – (RP) + 1 | Увеличить на 1 содержимое любой регистровой пары | - - - - - | |
DCX RP | (RP) – (RP) – 1 | Уменьшить на 1 содержимое любой регистровой пары | - - - - - | |
ADD M | (A) – (A) + M (HL) | К содержимому аккумулятора прибавить содержимое ячейки памяти с адресом, хранящимся в регистровой паре H, L | S, Z, AC, P, CY | |
ADC M | (A) – (A) + M (HL)+CY | К содержимому аккумулятора прибавить содержимое ячейки памяти с адресом, хранящимся в регистровой паре H, L с учетом состояния триггера переноса | S, Z, AC, P, CY | |
SUB M | (A) – (A) - M (HL) | Вычесть из содержимого аккумулятора содержимое ячейки памяти с адресом, хранящимся в регистровой паре H, L | S, Z, AC, P, CY | |
SBB M | (A) – (A) - M (HL) – CY | Вычесть из содержимого аккумулятора содержимое ячейки памяти с адресом, хранящимся в регистровой паре H, L с учетом триггера переносов | S, Z, AC, P, CY | |
INR M | M (HL) – M (HL) + 1 | Увеличить содержимое ячейки памяти с адресом, хранящимся в регистровой паре H, L на 1 | S, Z, AC, P | |
DCR M | M (HL) – M (HL) - 1 | Уменьшить содержимое ячейки памяти с адресом, хранящимся в регистровой паре H, L на 1 | S, Z, AC, P | |
ADI D8 | (A) – (A) + D8 | К содержимому аккумулятора прибавить второй байт команды | S, Z, AC, P, CY | |
ACI D8 | (A) – (A) + D8 + CY | К содержимому аккумулятора прибавить второй байт команды с учетом триггера переносов | S, Z, AC, P, CY | |
SUI D8 | (A) – (A) – D8 | Из содержимого аккумулятора вычесть второй байт команды | S, Z, AC, P, CY | |
SBI D8 | (A) – (A) – D8 – CY | Из содержимого аккумулятора вычесть второй байт команды с учетом триггера переносов | S, Z, AC, P, CY | |
DAA | Десятичная коррекция | S, Z, AC, P, CY | ||
Группа команд логических операций | ||||
ANA R | (A) – (A) AND (R) | Выполнить логическое умножение содержимого аккумулятора и регистра | S, Z, AC, P, CY=0 | |
XRA R | (A) – (A) XOR (R) | Выполнить операцию неравнозначности содержимого аккумулятора и регистра | S, Z, AC=0, P, CY=0 | |
ORA R | (A) – (A) OR (R) | Выполнить логическое сложение содержимого аккумулятора и регистра | S, Z, AC=0, P, CY=0 | |
CMP R | (A) – (R) | Присвоить аккумулятору значение содержимого регистра | S, Z, AC, P, CY | |
RLC | Циклический сдвиг влево | CY – A (7), AC=0 | ||
RRC | Циклический сдвиг вправо | CY – A (0), AC=0 | ||
RAL | Циклический сдвиг влево через A (0) - CY | CY – A (7), AC=0 | ||
RAR | Циклический сдвиг вправо через A (7) - CY | CY – A (0), AC=0 | ||
CMA | (A) – INV (A) | Инвертировать содержимое аккумулятора | - - - - - | |
ANA M | (A) – (A) AND M (HL) | Выполнить логическое умножение содержимого аккумулятора и ячейки памяти с адресом, хранящимся в регистровой паре H, L | S, Z, AC, P, CY=0 | |
XRA M | (A) – (A) XOR M (HL) | Выполнить операцию неравнозначности содержимого аккумулятора и ячейки памяти с адресом, хранящимся в регистровой паре H, L | S, Z, AC=0, P, CY=0 | |
ORA M | (A) – (A) OR M (HL) | Выполнить логическое сложение содержимого аккумулятора и ячейки памяти с адресом, хранящимся в регистровой паре H, L | S, Z, AC=0, P, CY=0 | |
CMP M | (A) – M (HL) | Загрузить в аккумулятор значение ячейки памяти с адресом, хранящимся в регистровой паре H, L | S, Z, AC, P, CY | |
ANI D8 | (A) – (A) AND D8 | Выполнить логическое умножение содержимого аккумулятора и второго байта команды | S, Z, AC, P, CY=0 | |
XRI D8 | (A) – (A) XOR D8 | Выполнить операцию неравнозначности над содержимым аккумулятора и вторым байтом команды | S, Z, AC=0, P, CY=0 | |
ORI D8 | (A) – (A) OR D8 | Выполнить логическое сложение содержимого аккумулятора и второго байта команды | S, Z, AC=0, P, CY=0 | |
CPI D8 | (A) – D8 | Сравнить содержимое аккумулятора и второго байта команды | S, Z, AC, P, CY | |
CMC | (CY) – INV (CY) | Инвертировать содержимое триггера переноса | CY | |
STC | (CY) - 1 | Установить в единицу триггер переноса | CY=1 | |
Группа команд передачи управления | ||||
PCHL | (PCH) – (H) (PCL) – (L) | Передать содержимое регистровой пары в программный счетчик | Все признаки сохраняют свои значения | |
JMP A16 | (PC) – A16 | Безусловный переход | ||
J (COND) A16 | Если условие выполняется, то (PC) – A16, иначе (PC) – (PC) + 1 | Условный переход по единичному значению триггера переноса | ||
CALL A16 | M (SP – 1) – (PCH) M (SP – 2) – (PCL) (SP) – (SP) - 2 (PC) – A16 | Безусловный переход к подпрограмме | ||
C(COND) A16 | Если условие выполняется, то см. предыдущую команду, иначе (PC) – (PC) + 1 | Условный переход | ||
RST N | M (SP) – (PC) (PC) – N*8 | Начальный запуск превышающей программы | ||
RET | (PCL) – M (SP) (PCH) – M (SP + 1) (SP) – (SP) + 2 | Возврат из подпрограммы | ||
R (COND) | Если условие выполняется, то см. предыдущую команду, иначе (PC) – (PC) +1 | |||
Группа специальных команд | ||||
EI | Разрешить прерывание | Все признаки сохраняют свои значения | ||
DI | Запретить прерывание | |||
HLT | Останов | |||
NOP | Пустая операция |