|
41 | 41 |
|
42 | 42 | ### Таблица команд |
43 | 43 | V = Аргумент |
44 | | -F = `Flags` |
45 | 44 | ZF = `Zero flag` |
46 | 45 | CF = `Carry flag` |
47 | 46 |
|
48 | | -| Базовый код | Мнемоника | Аргумент | Влияние на флаги | Влияние на регистры | Действие команды (Порядок сдесь ОЧЕНЬ важен) | |
49 | | -| ----------- | ---------- | -------- | ---------------- | ------------------- | ------------------------------------------------- | |
50 | | -| 0x00 | NOP | Нет | Нет | Нет | Ничего | |
51 | | -| 0x01 | NOT R1 | Нет | ZF, CF | R1 | CF = 0; R1 = ~R1 | |
52 | | -| 0x02 | ADD R1, R2 | Нет | ZF, CF | R1 | R1 += R2; CF = R1 < R2 | |
53 | | -| 0x03 | SUB R1, R2 | Нет | ZF, CF | R1 | CF = R1 < R2; R1 -= R2 | |
54 | | -| 0x04 | AND R1, R2 | Нет | ZF, CF | R1 | R1 &= R2; CF = 0 | |
55 | | -| 0x05 | OR R1, R2 | Нет | ZF, CF | R1 | R1 |= R2; CF = 0 | |
56 | | -| 0x06 | SHL R1 | Нет | ZF, CF | R1 | CF = R1\[11\]; R1 = R1 << 1 | |
57 | | -| 0x07 | SHR R1 | Нет | ZF, CF | R1 | CF = R1\[0\]; R1 = R1 >> 1 (Логический сдвиг) | |
58 | | -| 0x08 | SAR R1 | Нет | ZF, CF | R1 | CF = R1\[0\]; R1 = R1 >> 1 (Арефметический сдвиг) | |
59 | | -| 0x09 | XOR R1, R2 | Нет | ZF, CF | R1 | R1 ^= R2; CF = 0 | |
60 | | -| 0x0A | INC R1 | Нет | ZF | R1 | R1 += 1 | |
61 | | -| 0x0B | DEC R1 | Нет | ZF | R1 | R1 -= 1 | |
62 | | -| 0x0C | CMP R1, R2 | Нет | ZF, CF | Нет | CF = R1 < R2; R1 - R2 | |
63 | | -| 0x0D | CMP R1, V | Да | ZF, CF | Нет | CF = R1 < V; R1 - V | |
64 | | -| 0x0E | LDI R1, V | Да | Нет | R1 | R1 = V | |
65 | | -| 0x0F | MOV R1, R2 | Нет | Нет | R1 | R1 = R2 | |
66 | | -| 0x10 | ST R1, R2 | Нет | Нет | Нет | MEM\[R2\] = R1 | |
67 | | -| 0x11 | LD R1, R2 | Нет | Нет | R1 | R1 = MEM\[R2\] | |
68 | | -| 0x12 | ST R1, V | Да | Нет | Нет | MEM\[V\] = R1 | |
69 | | -| 0x13 | LD R1, V | Да | Нет | R1 | R1 = MEM\[V\] | |
70 | | -| 0x14 | PUSH R1 | Нет | Нет | SP | Помещяет R1 в стек | |
71 | | -| 0x15 | POP R1 | Нет | Нет | SP | Извлекает R1 из стека | |
72 | | -| 0x16 | JZ R1 | Нет | Нет | PC | Если ZF, то PC = R1 | |
73 | | -| 0x17 | JNZ R1 | Нет | Нет | PC | Если !ZF, то PC = R1 | |
74 | | -| 0x18 | JC R1 | Нет | Нет | PC | Если OF, то PC = R1 | |
75 | | -| 0x19 | JNC R1 | Нет | Нет | PC | Если !OF, то PC = R1 | |
76 | | -| 0x1A | JZ V | Да | Нет | PC | Если ZF, то PC = V | |
77 | | -| 0x1B | JNZ V | Да | Нет | PC | Если !ZF, то PC = V | |
78 | | -| 0x1C | JC V | Да | Нет | PC | Если OF, то PC = V | |
79 | | -| 0x1D | JNC V | Да | Нет | PC | Если !OF, то PC = V | |
80 | | -| 0x1E | JMP R1 | Нет | Нет | PC | PC = R1 | |
81 | | -| 0x1F | JMP V | Да | Нет | PC | PC = V | |
82 | | -| 0x20 | CALL R1 | Нет | Нет | PC | Помещяет PC в стек и PC = R1 | |
83 | | -| 0x21 | CALL V | Да | Нет | PC | Помещяет PC в стек и PC = V | |
84 | | -| 0x22 | RET | Нет | Нет | PC | Извлекает PC из стека | |
85 | | -| 0x23 | HLT | Нет | Нет | Нет | Завершает работу процесора | |
86 | | -| 0x24 | PUSHA | Нет | Нет | SP | Помещяет регистры все регистры в стек[^pusha] | |
87 | | -| 0x25 | POPA | Нет | Нет | A, B, C, D, F, SP | Извлекает все регистры из стека[^popa] | |
| 47 | +| Базовый код | Мнемоника | Аргумент | Влияние на флаги | Влияние на регистры | Действие команды (Порядок сдесь ОЧЕНЬ важен) | |
| 48 | +| ----------- | ----------- | -------- | ---------------- | --------------------- | --------------------------------------------- | |
| 49 | +| 0x00 | NOP | Нет | Нет | Нет | Ничего | |
| 50 | +| 0x01 | HLT | Нет | Нет | Нет | Завершает работу процесора | |
| 51 | +| 0x02 | AND R1, R2 | Нет | ZF, CF | R1 | R1 &= R2; CF = 0 | |
| 52 | +| 0x03 | NOT R1 | Нет | ZF, CF | R1 | R1 = ~R1; CF = 0 | |
| 53 | +| 0x04 | OR R1, R2 | Нет | ZF, CF | R1 | R1 |= R2; CF = 0 | |
| 54 | +| 0x05 | XOR R1, R2 | Нет | ZF, CF | R1 | R1 ^= R2; CF = 0 | |
| 55 | +| 0x06 | SHL R1 | Нет | ZF, CF | R1 | CF = R1\[11\]; R1 <<= 1 | |
| 56 | +| 0x07 | SHR R1 | Нет | ZF, CF | R1 | CF = R1\[0\]; R1 >>= 1 (Логический сдвиг) | |
| 57 | +| 0x08 | ADD R1, R2 | Нет | ZF, CF | R1 | R1 += R2; CF = R1 < R2 | |
| 58 | +| 0x09 | SAR R1 | Нет | ZF, CF | R1 | CF = R1\[0\]; R1 >>= 1 (Арефметический сдвиг) | |
| 59 | +| 0x0A | INC R1 | Нет | ZF | R1 | R1 += 1 | |
| 60 | +| 0x0B | DEC R1 | Нет | ZF | R1 | R1 -= 1 | |
| 61 | +| 0x0C | CMP R1, R2 | Нет | ZF, CF | Нет | CF = R1 < R2; R1 - R2 | |
| 62 | +| 0x0D | CMP R1, V | Да | ZF, CF | Нет | CF = R1 < V; R1 - V | |
| 63 | +| 0x0E | MOV R1, R2 | Нет | Нет | R1 | R1 = R2 | |
| 64 | +| 0x0F | LDI R1, V | Да | Нет | R1 | R1 = V | |
| 65 | +| 0x10 | ST R1, R2 | Нет | Нет | Нет | MEM\[R2\] = R1 | |
| 66 | +| 0x11 | ST R1, V | Да | Нет | Нет | MEM\[V\] = R1 | |
| 67 | +| 0x12 | LD R1, R2 | Нет | Нет | R1 | R1 = MEM\[R2\] | |
| 68 | +| 0x13 | LD R1, V | Да | Нет | R1 | R1 = MEM\[V\] | |
| 69 | +| 0x14 | PUSH R1 | Нет | Нет | SP | Помещяет R1 в стек | |
| 70 | +| 0x15 | POP R1 | Нет | Нет | SP | Извлекает R1 из стека | |
| 71 | +| 0x16 | JMP R1 | Нет | Нет | PC | PC = R1 | |
| 72 | +| 0x17 | JMP V | Да | Нет | PC | PC = V | |
| 73 | +| 0x18 | JZ R1 | Нет | Нет | PC | Если ZF, то PC = R1 | |
| 74 | +| 0x19 | JZ V | Да | Нет | PC | Если ZF, то PC = V | |
| 75 | +| 0x1A | JC R1 | Нет | Нет | PC | Если OF, то PC = R1 | |
| 76 | +| 0x1B | JC V | Да | Нет | PC | Если OF, то PC = V | |
| 77 | +| 0x1C | JNZ R1 | Нет | Нет | PC | Если !ZF, то PC = R1 | |
| 78 | +| 0x1D | JNZ V | Да | Нет | PC | Если !ZF, то PC = V | |
| 79 | +| 0x1E | JNC R1 | Нет | Нет | PC | Если !OF, то PC = R1 | |
| 80 | +| 0x1F | JNC V | Да | Нет | PC | Если !OF, то PC = V | |
| 81 | +| 0x20 | PUSHA | Нет | Нет | SP | Помещяет регистры все регистры в стек[^pusha] | |
| 82 | +| 0x21 | POPA | Нет | Нет | A, B, C, D, Flags, SP | Извлекает все регистры из стека[^popa] | |
| 83 | +| 0x22 | CALL R1 | Нет | Нет | PC | Помещяет PC в стек и PC = R1 | |
| 84 | +| 0x23 | CALL V | Да | Нет | PC | Помещяет PC в стек и PC = V | |
| 85 | +| 0x24 | RET | Нет | Нет | PC | Извлекает PC из стека | |
| 86 | +| 0x25 | XCNG R1, R2 | Нет | Нет | R1, R2 | Меняет R1 и R2 местами | |
88 | 87 |
|
89 | 88 | [^pusha]: |
90 | 89 | Регистры помещяются в таком порядке: `Flags`, `D`, `C`, `B`, `A` |
|
0 commit comments