Обозначения, используемые при описании команд
При описании команд микроЭВМ СМ-1800 используются следующие обозначения регистров:
R – обозначение одного из однобайтных регистров макропроцессора из следующего набора: A,B,C,D,E,H,L;
F – регистр флагов (однобайтный), пять из восьми битов которого используется для фиксации следующих признаков результата операции:
Таблица 1 – Назначение флагов
Разряд в регис-тре F | Обозначение бита | Содержание признака | Состояние бита | |
«1» | «0» | |||
CY | перенос из 7-го разряда | есть перенос | нет переноса | |
AC | перенос из 3-го разряда | есть перенос | нет переноса | |
Z | нулевой результат | результат равен нулю | результат не равен нулю | |
S | знак результата | отрицатель-ный (минус) | положитель-ный (плюс) | |
P | оценка коли-чества единиц в коде результата | чётное | нечётное |
SP – указатель стека (двухбайтовый регистр);
PC – программный счетчик (двухбайтовый регистр);
M – символ, используемый для обозначения ячейки оперативной памяти, причем адрес этой ячейки указывается косвенно – он содержится в паре регистров H, L.
Система команд содержит команды выполнения логических операций, для обозначения которых используются индексы:
Ù - логическое умножение – «И»;
Ú - логическое сложение – «ИЛИ»;
" - сложение по модулю 2 – исключающее «ИЛИ».
Конкретный код команд ADD, ADC, ANA, CMP, DCR, INR, MOV, MVI, ORA, SBB, SUB, XRA определяется подстановкой кода регистра-источника данных (SSS) или кода регистра-приемника данных (DDD). Приняты следующие коды для обозначения регистров:
Имя регистра | Код регистра |
B | |
C | |
D | |
E | |
H | |
L | |
M (память) | |
A (аккумулятор) |
Примеры.
1. Команда ADD R(код 1000 0SSS) осуществляет сложение содержимого аккумулятора и регистра R. Если в конкретном случае регистром R является регистр С, код которого SSS=001, то код команды записывается так:
1000 0001 или 81h в шестнадцатеричной системе.
2. Команда MOV R1,R2 (код 01DDDSSS) осуществляет пересылку содержимого из регистра-источника R2 в регистр-приемник R1.Если в конкретном случав регистром-источником является регистр E (SSS=011), а регистром-приемником регистр В (DDD=010), то код команды: 0101 0011=53h.
В описании команд циклического сдвига содержимого аккумулятора (RAL, RAR, RLC, RRC) использовано обозначение АМ -бит М регистра А (аккумулятора), причем А0 и А7-соответственно младший и старший (знаковый) биты аккумулятора.
При чтении описания команд следует учитывать следующие обозначения при записи:
B2 - второй байт команды ( в командах ADI, АСI, АNI, CPI, MVI, ORI, SBI, SUI, XRI – это непосредственные данные, в командах IN и OUT – адрес порта),
ВЗ – третий байт команды, обычно самостоятельно не выступающий,
→ направление передачи данных (...из...в...),
( ) - содержимое байта (команда, регистра, памяти). Следует читать:
(H) - содержимое регистра Н,
(В) - содержимое регистра В,
(В2)- содержимое второго байта команды,
(М) - содержимое ячейки оперативной памяти, адрес которой помещен в паре регистров Н, L, т.е. адресом является (Н, L).
При описании команд вызова (безусловного САLL и восьми по условию), требующих запоминания адреса возврата из подпрограммы в стековой памяти, а также команд извлечения содержимого регистров из стека (РОР) и засылки содержимого регистров в стек (РUSН) использованы квадратные скобки для обозначения адреса ячейки стека.
Например, запись [SР-1] [SР-2] ß (РС) следует читать так: поместить содержимое программного счетчика РС (два байта) в две ячейки стековой памяти, адреса которых определяются как уменьшенное соответственно на единицу и на два содержимое указателя стека SР.
Для команд условного вызова подпрограмм и возврата по условию в их описании даны два значения количества машинных циклов в команде: первое, если условие не выполнено и далее выполняется очередная команда программы, а второе – если условие выполнено и происходит вызов подпрограммы или возврат. Время выполнения одного цикла команды от 1 до 5 машинных циклов.
ЗАМЕЧАНИЕ:
Все команды преобразования данных (арифметические, логические) модифицируют пять описанных в таблице 1 флагов. В результате выполнения любой логической операции флаг СY сбрасывается в 0. Операция инкремента и декремента коротких (байтовых) регистров (INR_R, DCR_R) модифицируют все флаги кроме CY. Команды INX R и DCХ R значения флагов не изменяют.
1.2 Список команд
Таблица 2 – Список команд
Мнемоника ассемблера | Байты | Циклы | Коды | Описание | |
двоичные | Нex | ||||
ADD R | 10000SSS | (A)←(A)+(R) | |||
ADD M | (A)←(A)+(M) | ||||
ADI (B2) | C6 | (A)←(A)+ (B2) | |||
ADC R | 10001SSS | (A)←(A)+(R)+(CY) | |||
ADC M | 8E | (A)←(A)+(M)+(CY) | |||
ACI (B2) | CE | (A)←(A)+(B2)+(CY) | |||
ANA R | 10100SSS | (A)←(A)Ù(R) | |||
ANA M | A6 | (A)←(A)Ù(M) | |||
ANI B2 | E6 | (A)←(A)Ù(B2) | |||
CALL (B2)(B3) | CD | [SP-1][SP-2]←(PC), (SP)=(SP)-2, (PC)←(B3)(B2) | |||
CC (B2)(B3) | 3/5 | DC | Если CY=1, то [SP-1][SP -2]← (PC) (SP)=(SP)-2, (PC) ← (B3)(B2) иначе (PC)=(PC) + 3 | ||
CNC (B2)(B3) | 3/5 | D4 | Если CY=0, то [SP-1][SP-2]←(PC) (SP)=(SP)-2, (PC)← (B3)(B2) иначе (PC)=(PC) + 3 | ||
CZ (B2)(B3) | 3/5 | CC | Если Z=1, то [SP-1][SP-2]←(PC) (SP)=(SP)-2, (PC)← (B3)(B2) иначе (PC)=(PC) + 3 | ||
CNZ (B2)(B3) | 3/5 | C4 | Если Z=0, то [SP-1][SP-2]←(PC) (SP)=(SP)-2, (PC)← (B3)(B2) иначе (PC)=(PC) + 3 | ||
CM (B2)(B3) | 3/5 | FC | Если S=1, то [SP-1][SP-2]←(PC) (SP)=(SP)-2, (PC)← (B3)(B2) иначе (PC)=(PC) + 3 | ||
CP (B2)(B3) | 3/5 | F4 | Если S=0, то [SP-1][SP-2]←(PC) (SP)=(SP)-2, (PC)← (B3)(B2) иначе (PC)=(PC) + 3 | ||
CPE (B2)(B3) | 3/5 | EC | Если P=1, то [SP-1][SP-2]←(PC) (SP)=(SP)-2, (PC)← (B3)(B2) иначе (PC)=(PC) + 3 | ||
CPO (B2)(B3) | 3/5 | E4 | Если P=0, то [SP-1][SP-2]←(PC) (SP)=(SP)-2, (PC)← (B3)(B2) иначе (PC)=(PC) + 3 | ||
CMA | 2F | (A)←Ā | |||
CMC | 3F | CY←CY | |||
CMP R | 10111SSS | (A) – (R) | |||
CMP M | BE | (A) – (M) | |||
CPI (B2) | FE | (A) – (B2) | |||
DAA | Преобразование сумматора | ||||
DAD B | (H)(L)←(H)(L) + (B)(C) | ||||
DAD D | (H)(L)←(H)(L) + (D)(E) | ||||
DAD H | (H)(L)←(H)(L) + (H)(L) | ||||
DAD SP | (H)(L)←(H)(L) + (SP) | ||||
DCR R | 00DDD101 | (R)←(R) - 1 | |||
DCR M | (M)←(M) - 1 | ||||
DCX B | 0B | (B)(C)←(B)(C) - 1 | |||
DCX D | 1B | (D)(E)←(D)(E) - 1 | |||
DCX H | 2B | (H)(L)←(H)(L) - 1 | |||
DCX SP | 3B | (SP)←(SP) - 1 | |||
DI | F3 | Запрещение системного прерывания | |||
EI | FB | Разрешение системного прерывания | |||
HLT | Останов | ||||
IN (B2) | DB | (A)←(порт ввода) | |||
INR R | 00DDD100 | (R)←(R) + 1 | |||
INR M | (M)←(M) + 1 | ||||
INX B | (B)(C)←(B)(C) + 1 | ||||
INX D | (D)(E)←(D)(E) + 1 | ||||
INX H | (H)(L)←(H)(L) +1 | ||||
INX SP | (SP)←(SP) + 1 | ||||
JMP (B2)(B3) | C3 | (PC)← (B3)(B2) | |||
JC (B2)(B3) | DA | Если CY=1, то (PC)← (B3)(B2) иначе (PC)=(PC) + 3 | |||
JNC (B2)(B3) | D2 | Если CY=0, то (PC)← (B3)(B2) иначе (PC)=(PC) + 3 | |||
JZ (B2)(B3) | CA | Если Z=1, то (PC)← (B3)(B2) иначе (PC)=(PC) + 3 | |||
JNZ (B2)(B3) | C2 | Если Z=0, то (PC)← (B3)(B2) иначе (PC)=(PC) + 3 | |||
JM (B2)(B3) | FA | Если S=1, то (PC)← (B3)(B2) иначе (PC)=(PC) + 3 | |||
JP (B2)(B3) | F2 | Если S=0, то (PC)← (B3)(B2) иначе (PC)=(PC) + 3 | |||
JPE (B2)(B3) | EA | Если P=1, то (PC)← (B3)(B2) иначе (PC)=(PC) + 3 | |||
JPO (B2)(B3) | E2 | Если P=0, то (PC)← (B3)(B2) иначе (PC)=(PC) + 3 | |||
LDA (B2)(B3) | 3A | (A)←[(B3)(B2)] | |||
LDAX B | 0A | (A)←[(B)(C)] | |||
LDAX D | 1A | (A)←[(D)(C)] | |||
LHL D (B2)(B3) | 2A | (L)← [(B3)(B2)] (H)← [(B3)(B2) + 1] | |||
LXI B, (B2)(B3) | (C)← (B2), (B)←(B3) | ||||
LXI D, (B2)(B3) | (E)← (B2), (D)←(B3) | ||||
LXI H, (B2)(B3) | (L)← (B2), (H)←(B3) | ||||
LXI SP, (B2)(B3) | (SP)L← (B2), (SP)H←(B3) | ||||
MOV R1,R2 | 01DDDSSS | (R1)←(R2) | |||
MOV R,M | 01DDD110 | (R)←(M) | |||
MOV M,R | 01110SSS | (M)←(R) | |||
MVI R, (B2) | 00DDD110 | (R)← (B2) | |||
MVI M, (B2) | (M)← (B2) | ||||
ORA R | 10110SSS | (A)←(A) Ú (R) | |||
ORA M | B6 | (A)←(A) Ú (M) | |||
ORI (B2) | F6 | (A)←(A) Ú (B2) | |||
OUT (B2) | D3 | (Порт вывода)←(A) | |||
PCHL | E9 | (PC)←(H)(L) | |||
POP B | C1 | (C)←[SP], (B)←[SP+1], (SP)=(SP)+2 | |||
POP D | D1 | (E)←[SP], (D)←[SP+1], (SP)=(SP)+2 | |||
POP H | E1 | (L)←[SP], (H)←[SP+1], (SP)=(SP)+2 | |||
POP PSW | F1 | (F)←[SP], (A)←[SP+1], (SP)=(SP)+2 | |||
PUSH B | [SP-1]←(B), [SP-2]←(C), (SP)=(SP-2) | ||||
PUSH D | D5 | [SP-1]←(D), [SP-2]←(E), (SP)=(SP-2) | |||
PUSH H | E5 | [SP-1]←(H), [SP-2]←(L), (SP)=(SP-2) | |||
PUSH PSW | F5 | [SP-1]←(A), [SP-2]←(F), (SP)=(SP-2) | |||
RAL | AM+1←AM, A0←CY, CY←A7 | ||||
RAR | 1F | AM←AM+1, A7←CY, CY←A0 | |||
RLC | AM+1←AM, A0←A7, CY←A7 | ||||
RRC | 0F | AM+1←AM, A7←A0, CY←A0 | |||
RET | C9 | (PC)←[SP][SP+1], (SP)=(SP)+2 | |||
RC | 1/3 | D8 | Если CY=1, то (PC)←[SP][SP+1], (SP)=(SP)+2 иначе (PC)=(PC) + 1 | ||
RNC | 1/3 | D0 | Если CY=0, то (PC)←[SP][SP+1], (SP)=(SP)+2 иначе (PC)=(PC) + 1 | ||
RZ | 1/3 | C8 | Если Z=1, то (PC)←[SP][SP+1], (SP)=(SP)+2 иначе (PC)=(PC) + 1 | ||
RNZ | 1/3 | C0 | Если Z=0, то (PC)←[SP][SP+1], (SP)=(SP)+2 иначе (PC)=(PC) + 1 | ||
RM | 1/3 | F8 | Если S=1, то (PC)←[SP][SP+1], (SP)=(SP)+2 иначе (PC)=(PC) + 1 | ||
RP | 1/3 | F0 | Если S=0, то (PC)←[SP][SP+1], (SP)=(SP)+2 иначе (PC)=(PC) + 1 | ||
RPE | 1/3 | E8 | Если P=1, то (PC)←[SP][SP+1], (SP)=(SP)+2, иначе (PC)=(PC) + 1 | ||
RPO | 1/3 | E0 | Если P=0, то (PC)←[SP][SP+1], (SP)=(SP)+2, иначе (PC)=(PC) + 1 | ||
RST | 11AAA111 | [SP-1][SP-2]←(PC), (SP)=(SP)-2, (PC)←(00000000 00AAA000) | |||
SBB R | 10011SSS | (A)←(A) – (R) – заем | |||
SBB M | 9E | (A)←(A) – (M) – заем | |||
SBI (B2) | DE | (A)←(A) – (B2) – заем | |||
SUB R | 10010SSS | (A)←(A) – (R) | |||
SUB M | (A)←(A) – (M) | ||||
SUI (B2) | D6 | (A)←(A) – (B2) | |||
SHLD (B2)(B3) | [(B3)(B2)]←(L), [(B3)(B2)+1]←(H) | ||||
SPHL | F9 | (SP)←(H)(L) | |||
STA (B2)(B3) | [(B3)(B2)]←(A) | ||||
STAX B | [(B)(C)]←(A) | ||||
STAX D | [(D)(E)]←(A) | ||||
STC | CY←1 | ||||
XRA R | 10101SSS | A←(A) " (R) | |||
XRA M | AE | A←(A) " (M) | |||
XRI (B2) | EE | A←(A) " (B2) | |||
XCHG | EB | (H)↔(D), (E)↔(L) | |||
XTHL | E5 | (L)↔[SP], (H)↔[SP+1] |
Кратное описание команд
Таблица 3 – Описание команд
Обозначение | Описание |
ADD R | Сложение содержимого регистра R с содержимым аккумулятора |
ADD M | Сложение содержимого ячейки памяти с содержимым аккумулятора |
ADI (B2) | Сложение непосредственных данных (В2) с содержимым аккумулятора |
ADC R | Сложение содержимого регистра R, аккумулятора и флага CY |
ADC M | Сложение содержимого ячейки памяти, аккумулятора и флага CY |
ACI (B2) | Сложение непосредственных данных (В2) с содержимым аккумулятора и содержимым флага CY |
ANA R | Логическое умножение («И») содержимого регистра R и аккумулятора |
ANA M | Логическое умножение («И») содержимого ячейки памяти и аккумулятора |
ANI B2 | Логическое умножение («И») содержимого непосредственных данных (В2) и аккумулятора |
CALL (B2)(B3) | Вызов безусловный, т.е. переход к команде, адрес которой содержится во втором и третьем байтах команды |
CC (B2)(B3) | Вызов по условию: при наличии переноса CY=1 – (по переносу) |
CNC (B2)(B3) | Вызов по условию: при отсутствии переноса CY=0 – (нет переноса) |
CZ (B2)(B3) | Вызов по условию: результат равен нулю Z=1 – (по нулю) |
CNZ (B2)(B3) | Вызов по условию: результат не равен нулю Z=0 – (нет нуля) |
CM (B2)(B3) | Вызов по условию: результат отрицателен S=1 – (по минусу) |
CP (B2)(B3) | Вызов по условию: результат положителен S=0 (по плюсу) |
CPE (B2)(B3) | Вызов по условию: сумма единиц в коде результата четная P=1 – (по четности) |
CPO (B2)(B3) | Вызов по условию: сумма единиц в коде результата нечетная P=0 – (по нечетности) |
CMA | Инвертирование содержимого аккумулятора |
CMC | Инвертирование содержимого флага переноса CY |
CMP R | Сравнение содержимого регистра R и аккумулятора |
CMP M | Сравнение содержимого ячейки памяти и аккумулятора |
CPI (B2) | Сравнение непосредственных данных (В2) и аккумулятора |
DAA | Преобразование содержимого аккумулятора в BDD (двоично-десятичном коде) |
DAD B | Сложение (В,С) с (H,L) |
DAD D | Сложение (D,E) с (H,L) |
DAD H | Сложение (H,L) с (H,L) |
DAD SP | Сложение указателя стека (SP) с (H,L) |
DCR R | Отрицательное приращение R |
DCR M | Отрицательное приращение содержимого ячейки памяти |
DCX B | Отрицательное приращение (В,С) |
DCX D | Отрицательное приращение (D,E) |
DCX H | Отрицательное приращение (H,L) |
DCX SP | Отрицательное приращение содержимого указателя стека (SP) |
DI | Запрещение системного прерывания |
EI | Разрешение системного прерывания |
HLT | Останов |
IN (B2) | Ввод данных в аккумулятор из порта, адрес которого определяется содержимым второго байта команды (В2) |
INR R | Положительное приращение (R) |
INR M | Положительное приращение содержимого ячейки памяти |
INX B | Положительное приращение (B,C) |
INX D | Положительное приращение (D,E) |
INX H | Положительное приращение (H,L) |
INX SP | Положительное приращение содержимого указателя стека (SP) |
JMP (B2)(B3) | Переход безусловный к команде, адрес которой содержится во втором и третьем байтах команды |
JC (B2)(B3) | Переход по условию: CY=1 – (по переносу) |
JNC (B2)(B3) | Переход по условию: CY=0 – (нет переноса) |
JZ (B2)(B3) | Переход по условию: Z=1 – (по нулю) |
JNZ (B2)(B3) | Переход по условию: Z=0 – (нет нуля) |
JM (B2)(B3) | Переход по условию: S=1 – (по минусу) |
JP (B2)(B3) | Переход по условию: S=0 (по плюсу) |
JPE (B2)(B3) | Переход по условию: P=1 – (по четности) |
JPO (B2)(B3) | Переход по условию: P=0 – (по нечетности) |
LDA (B2)(B3) | Загрузка аккумулятора содержимым ячейки памяти, адрес которой содержится во втором и третьем байтах команды |
LDAX B | Загрузка аккумулятора содержимым ячейки памяти, адрес которой содержится в регистрах B,C |
LDAX D | Загрузка аккумулятора содержимым ячейки памяти, адрес которой содержится в регистрах D,E |
LHLD (B2)(B3) | Загрузка регистров H,L содержимым ячейки памяти, адрес которой содержится во втором и третьем байтах команды |
LXI B, (B2)(B3) | Загрузка непосредственных данных В2,В3 в регистры B,C |
LXI D, (B2)(B3) | Загрузка непосредственных данных В2,В3 в регистры D,E |
LXI H, (B2)(B3) | Загрузка непосредственных данных В2,В3 в регистры H,L |
LXI SP, (B2)(B3) | Загрузка непосредственных данных В2,В3 в указатель стека SP |
MOV R1,R2 | Пересылка содержимого регистра R2 в регистр R1 |
MOV R,M | Пересылка содержимого ячейки памяти в регистр R |
MOV M,R | Пересылка содержимого регистра R в ячейку памяти |
MVI R, (B2) | Пересылка непосредственных данных В2 в регистр R |
MVI M, (B2) | Пересылка непосредственных данных В2 в ячейку памяти |
ORA R | Логическое сложение («ИЛИ») содержимого регистра R и аккумулятора |
ORA M | Логическое сложение («ИЛИ») содержимого ячейки памяти и аккумулятора |
ORI (B2) | Логическое сложение («ИЛИ») содержимого непосредственных данных (В2) и аккумулятора |
OUT (B2) | Вывод данных из аккумулятора в порт, адрес которого содержится во втором байте команды В2 |
PCHL | Засылка (H,L) в программный счетчик PC |
POP B | Извлечение содержимого регистров B,C из стека |
POP D | Извлечение содержимого регистров D,E из стека |
POP H | Извлечение содержимого регистров H,L из стека |
POP PSW | Извлечение содержимого аккумулятора А и регистра F из стека |
PUSH B | Засылка содержимого регистров B,C в стек |
PUSH D | Засылка содержимого регистров D,E в стек |
PUSH H | Засылка содержимого регистров H,L в стек |
PUSH PSW | Засылка содержимого аккумулятора А и регистра F в стек |
RAL | Циклический сдвиг содержимого аккумулятора влево на один разряд CY в А0,А7 в CY |
RAR | Циклический сдвиг содержимого аккумулятора вправо на один разряд CY в А7,А0 в CY |
RLC | Циклический сдвиг содержимого аккумулятора влево на один разряд А7 в А0,А7 в CY |
RRC | Циклический сдвиг содержимого аккумулятора вправо на один разряд А0 в А0, А7 в CY |
RET | Возврат безусловный к команде с адресом, помещенным последним в стек |
RC | Возврат по условию: CY=1 – (по переносу) |
RNC | Возврат по условию: CY=0 – (нет переноса) |
RZ | Возврат по условию: Z=1 – (по нулю) |
RNZ | Возврат по условию: Z=0 – (нет нуля) |
RM | Возврат по условию: S=1 – (по минусу) |
RP | Возврат по условию: S=0 (по плюсу) |
RPE | Возврат по условию: P=1 – (по четности) |
RPO | Возврат по условию: P=0 – (по нечетности) |
RST | Пуск по результатам обработки прерывания |
SBB R | Вычитание из аккумулятора содержимого регистра R с заёмом |
SBB M | Вычитание из аккумулятора содержимого ячейки памяти с заёмом |
SBI (B2) | Вычитание из аккумулятора непосредственных данных В2 с заёмом |
SUB R | Вычитание из аккумулятора содержимого регистра R |
SUB M | Вычитание из аккумулятора содержимого ячейки памяти |
SUI (B2) | Вычитание из аккумулятора непосредственных данных В2 |
SHLD (B2)(B3) | Запись (H,L) в память с адресом, который содержится во втором и третьем байтах команды |
SPHL | Засылка (H,L) в указатель стека SP |
STA (B2)(B3) | Запись содержимого аккумулятора в ячейку памяти, адрес которой содержится во втором и третьем байтах команды |
STAX B | Запись содержимого аккумулятора в ячейку памяти, адрес которой содержится в регистрах В,С |
STAX D | Запись содержимого аккумулятора в ячейку памяти, адрес которой содержится в регистрах D,E |
STC | Установка флага переноса в состояние «1» |
XRA R | Сложение по модулю («Исключающее ИЛИ») содержимого регистра R и аккумулятора |
XRA M | Сложение по модулю («Исключающее ИЛИ») содержимого ячейки памяти и аккумулятора |
XRI (B2) | Сложение по модулю («Исключающее ИЛИ») непосредственных данных В2 и аккумулятора |
XCHG | Обмен содержимым между регистрами D,E и H,L |
XTHL | Обмен содержимым между верхними ячейками стека и регистрами H,L |