Команды логических операций предназначены для выполнения следующих операций:
- поразрядное логическое И над содержимым заданного регистра и аккумулятора;
- поразрядное логическое И над содержимым ячейки памяти и аккумулятора;
- поразрядное логическое И над содержимым аккумулятора и константой;
- поразрядное логическое ИЛИ над содержимым заданного регистра и аккумулятора;
- поразрядное логическое ИЛИ над содержимым ячейки памяти и аккумулятора;
- поразрядное логическое ИЛИ над содержимым аккумулятора и константой;
- поразрядное исключающее ИЛИ над содержимым заданного регистра и аккумулятора;
- поразрядное исключающее ИЛИ над содержимым ячейки памяти и аккумулятора;
- поразрядное исключающее ИЛИ над содержимым аккумулятора и константой;
- сдвиг содержимого аккумулятора;
- циклический сдвиг содержимого аккумулятора;
- инвертирование содержимого аккумулятора;
- установка и инвертирование флага переноса;
- сравнение содержимого аккумулятора с содержимым ячейки памяти;
- сравнение содержимого аккумулятора с константой.
Команды логических операций могут состоять из одного или двух байтов. Первый байт содержит код операции, второй – константное значение операнда (если предусмотрено).
Команды логических операций могут изменять содержимое регистра флагов.
Регистр флагов состоит из следующих признаков:
· C (Carry)- признак переноса;
· M (Minus) - признак отрицательного результата (в эмуляторе обозначен как S);
· Z (Zero) - признак нуля;
· P (Parity) - признак паритета/четности;
· AC (Auxiliary Carry) - признак половинного переноса.
Номер пп | Мнемоника | Код | Число циклов | Число тактов | Длина в байтах | Флаги: C, Z, M, P, AC | Содержание операции | Описание операции |
1 | ANA src | 10100SSS | 1 | 4 | 1 | 0+++0 | A <- A & src | Поразрядное логическое И аккумулятора и регистра |
2 | XRA src | 10101SSS | 1 | 4 | 1 | 0+++0 | A <- A ^ src | Поразрядное исключающее ИЛИ аккумулятора и регистра |
3 | ORA src | 10110SSS | 1 | 4 | 1 | 0+++0 | A <- A | src | Поразрядное логическое ИЛИ аккумулятора и регистра |
4 | CMP src | 10111SSS | 1 | 4 | 1 | +++++ | A == src | Сравнение аккумулятора с регистром |
5 | ANA M | A6 | 2 | 7 | 1 | 0+++0 | A <- A & (HL) | Поразрядное логическое И аккумулятора и ячейки памяти с адресом из HL |
6 | XRA M | AE | 2 | 7 | 1 | 0+++0 | A <- A ^ (HL) | Поразрядное исключающее ИЛИ аккумулятора и ячейки памяти с адресом из HL |
7 | ORA M | B6 | 2 | 7 | 1 | 0+++0 | A <- A | (HL) | Поразрядное логическое ИЛИ аккумулятора и ячейки памяти с адресом из HL |
8 | CMP M | BE | 2 | 7 | 1 | +++++ | A == (HL) | Сравнение аккумулятора и ячейки памяти с адресом из HL |
9 | ANI data8 | E6 | 2 | 7 | 2 | 0+++0 | A <- A & data8 | Поразрядное логическое И аккумулятора и константы |
10 | XRI data8 | EE | 2 | 7 | 2 | 0+++0 | A <- A ^ data8 | Поразрядное исключающее ИЛИ аккумулятора и константы |
11 | ORI data8 | F6 | 2 | 7 | 2 | 0+++0 | A <- A | data8 | Поразрядное логическое ИЛИ аккумулятора и константы |
12 | CPI data8 | FE | 2 | 7 | 2 | +++++ | A == data8 | Сравнение аккумулятора с константой |
13 | RLC | 07 | 1 | 4 | 1 | +---- | C<-A7<-A6<-...<-A0<-A7 | Циклический сдвиг влево (выдвигаемый старший разряд записывается во флаг переноса и освобождаемый младший) |
14 | RRC | 0F | 1 | 4 | 1 | +---- | C<-A0<-A1<-...<-A7<-A0 | Циклический сдвиг вправо (выдвигаемый младший разряд записывается во флаг переноса и освобождаемый старший) |
15 | RAL | 17 | 1 | 4 | 1 | +---- | C<-A7<-A6<-...<-A0<-C | Расширенный сдвиг влево (в освобождаемый младший разряд записывается значение флага переноса, затем выдвигаемый старший разряд заноситься во флаг переноса) |
16 | RAR | 1F | 1 | 4 | 1 | +---- | C<-A0<-A1<-...<-A7<-C | Расширенный сдвиг вправо (в освобождаемый старший разряд записывается значение флага переноса, затем выдвигаемый младший разряд заноситься во флаг переноса) |
17 | CMA | 2E | 1 | 4 | 1 | ----- | A <- !A | Поразрядное инвертирование содержимого аккумулятора |
18 | CMC | 3E | 1 | 4 | 1 | +---- | C <- !C | Инвертирование флага переноса |
19 | STC | 37 | 1 | 4 | 1 | 1---- | C <- 1 | Установка флага переноса |
3. Команды передачи управления
Команды передачи управления предназначены для выполнения следующих операций:
- принудительное изменение содержимого регистра команд путем записи в него адреса в виде константы или содержимого регистра HL (безусловный переход);
- переход по заданному адресу в зависимости от состояния флагов (условный переход);
- вызов подпрограммы по заданному адресу;
- вызов подпрограммы по заданному адресу в зависимости от состояния флагов;
- возврат из подпрограммы;
- возврат из подпрограммы в зависимости от состояния флагов;
Команды передачи управления могут состоять из одного или трех байтов. Первый байт содержит код операции, второй и третий – константное значение адреса.
Команды логических операций анализируют состояние регистра флагов, но не изменяют их.
Регистр флагов состоит из следующих признаков:
· C (Carry)- признак переноса;
· M (Minus) - признак отрицательного результата (в эмуляторе обозначен как S);
· Z (Zero) - признак нуля;
· P (Parity) - признак паритета/четности;
· AC (Auxiliary Carry) - признак половинного переноса.
Номер пп | Мнемоника | Код | Число циклов | Число тактов | Длина в байтах | Содержание операции | Описание операции |
1 | PCHL | E9 | 1 | 5 | 1 | PC <- HL | Безусловный переход по адресу из HL |
2 | JMP addr | C3 | 3 | 10 | 3 | PC <- addr | Безусловный переход по адресу addr |
3 | JC addr | DA | 3 | 10 | 3 | if (C) PC <- addr | Условный переход по адресу addr, если C=1 |
4 | JNC addr | D2 | 3 | 10 | 3 | if (!C) PC <- addr | Условный переход по адресу addr, если C=0 |
5 | JZ/JNZ addr | CA/C2 | 3 | 10 | 3 | if (Z/!Z) PC <- addr | Условный переход по адресу addr, если Z=1/Z=0 |
6 | JM/JP addr | FA/F2 | 3 | 10 | 3 | if (M/!M) PC <- addr | Условный переход по адресу addr, если M=1/M=0 |
7 | JPE/JPO addr | EA/E2 | 3 | 10 | 3 | if (P/!P) PC <- addr | Условный переход по адресу addr, если P=1/P=0 |
8 | CALL addr | CD | 3 | 10 | 3 | SP<- SP-2 (SP) <- PC <- addr | Вызов подпрограммы по адресу addr с запоминанием текущего содержимого регистра команд в стеке |
9 | CC/CNC addr | DC/D4 | 3/5 | 11/17 | 3 | if (C/!C) CALL addr | Выполнение команды вызова подпрограммы, если C=1/C=0 |
10 | CZ/CNZ addr | CC/C4 | 3/5 | 11/17 | 3 | if (Z/!Z) CALL addr | Выполнение команды вызова подпрограммы, если Z=1/Z=0 |
11 | CM/CP addr | FC/F4 | 3/5 | 11/17 | 3 | if (M/!M) CALL addr | Выполнение команды вызова подпрограммы, если M=1/M=0 |
12 | CPE/CPO addr | EC/E4 | 3/5 | 11/17 | 3 | if (P/!P) CALL addr | Выполнение команды вызова подпрограммы, если P=1/P=0 |
13 | RET | C9 | 3 | 11 | 1 | PC <- (SP) SP<-SP+2 | Возврат из подпрограммы с восстановлением содержимого регистра команд из стека |
14 | RC/RNC | D8/D0 | 1/3 | 5/11 | 1 | if (C/!C) RET | Выполнение команды возврата из подпрограммы, если C=1/C=0 |
15 | RZ/RNZ | C8/C0 | 1/3 | 5/11 | 1 | if (Z/!Z) RET | Выполнение команды возврата из подпрограммы, если Z=1/Z=0 |
16 | RM/RP | F8/F0 | 1/3 | 5/11 | 1 | if (M/!M) RET | Выполнение команды возврата из подпрограммы, если M=1/M=0 |
17 | RPE/RPO | E8/E0 | 1/3 | 5/11 | 1 | if (P/!P) RET | Выполнение команды возврата из подпрограммы, если P=1/P=0 |
4. Команды арифметических операций
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 |


