Обозначения, используемые при описании команд

При описании команд микроЭВМ СМ-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