Флаги и условия¶
Регистр флагов (FL)¶
Регистр FL (адрес 17h) содержит 8 бит состояния:
| Бит | ID | Имя | Описание |
|---|---|---|---|
| 0 | 00h |
C | Перенос (Carry) |
| 1 | 01h |
B | Заимствование (Borrow) |
| 2 | 02h |
S | Знак (Sign) |
| 3 | 03h |
O | Переполнение (Overflow) |
| 4 | 04h |
Z | Ноль (Zero) |
| 5 | 05h |
G | Больше (Greater) |
| 6 | 06h |
E | Равно (Equal) |
| 7 | 07h |
L | Меньше (Less) |
Условия переходов¶
Инструкции JMP, JMA (формат J0) и JMPR (формат J1) используют поле <COND>:
| ID | Код | Логика | Имя | Описание |
|---|---|---|---|---|
00h |
UNC | ALW 1 | Unconditional | Безусловный переход |
01h |
CF | C_OUT | Carry flag | Переход по переносу |
02h |
BF | B_OUT | Borrow flag | Переход по заимствованию |
03h |
SF | SIGN | Sign flag | Переход по знаку |
04h |
OF | OVERFL | Overflow flag | Переход по переполнению |
05h |
ZF | =0 | Equals zero | Переход если ноль |
06h |
NZ | !=0 | Not equals zero | Переход если не ноль |
07h |
GR | > | Greater than | Переход если больше |
08h |
GE | > || = | Greater or equals | Переход если больше или равно |
09h |
LS | < | Less than | Переход если меньше |
0Ah |
LE | < || = | Less or equals | Переход если меньше или равно |
0Bh |
EQ | = | Equals | Переход если равно |
0Ch |
NE | != | Not equals | Переход если не равно |
Маска флагов (FlMask)¶
В таблице инструкций используется 8-символьная маска. Порядок символов в ней - от старшего бита к младшему:
| Позиция | Флаг |
|---|---|
| 0 | L |
| 1 | E |
| 2 | G |
| 3 | Z |
| 4 | O |
| 5 | S |
| 6 | B |
| 7 | C |
-- флаг не изменяется.- Буква - флаг изменяется.
Примеры:
---ZOS-C- изменяются флагиC,S,O,Z.---ZOSB-- изменяютсяB,S,O,Z.LEGZOSB-- изменяются все флаги, кромеC.--------- флаги не изменяются.
Сравнение с микрокодом¶
В MICROCODE_PLA та же маска задана в шестнадцатеричном виде. Например, для ADD:
Здесь FM = 1Dh = 0001 1101b. Если сопоставить биты в порядке L E G Z O S B C, получим:
| L | E | G | Z | O | S | B | C |
|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 |