§ Набор инструкции
Это учебный процессор с очень ограниченным набором инструкции. Стека нет.- Регистры:
00=A, 01=B, 10=X, 11=Y
- Условия:
00=JNC, 01=JC, 10=JNZ, 11=JZ
§ Таблица инструкции
00 MOVA,A | 01 MOVB,A | 02 MOVX,A | 03 MOVY,A | 04 MOVA,B | 05 MOVB,B | 06 MOVX,B | 07 MOVY,B | 08 MOVA,X | 09 MOVB,X | 0A MOVX,X | 0B MOVY,X | 0C MOVA,Y | 0D MOVB,Y | 0E MOVX,Y | 0F MOVY,Y |
10 MOVA,[A] | 11 MOVB,[A] | 12 MOVX,[A] | 13 MOVY,[A] | 14 MOVA,[B] | 15 MOVB,[B] | 16 MOVX,[B] | 17 MOVY,[B] | 18 MOVA,[X] | 19 MOVB,[X] | 1A MOVX,[X] | 1B MOVY,[X] | 1C MOVA,[Y] | 1D MOVB,[Y] | 1E MOVX,[Y] | 1F MOVY,[Y] |
20 MOV[A],A | 21 MOV[B],A | 22 MOV[X],A | 23 MOV[Y],A | 24 MOV[A],B | 25 MOV[B],B | 26 MOV[X],B | 27 MOV[Y],B | 28 MOV[A],X | 29 MOV[B],X | 2A MOV[X],X | 2B MOV[Y],X | 2C MOV[A],Y | 2D MOV[B],Y | 2E MOV[X],Y | 2F MOV[Y],Y |
30 MOV[A],[A] | 31 MOV[B],[A] | 32 MOV[X],[A] | 33 MOV[Y],[A] | 34 MOV[A],[B] | 35 MOV[B],[B] | 36 MOV[X],[B] | 37 MOV[Y],[B] | 38 MOV[A],[X] | 39 MOV[B],[X] | 3A MOV[X],[X] | 3B MOV[Y],[X] | 3C MOV[A],[Y] | 3D MOV[B],[Y] | 3E MOV[X],[Y] | 3F MOV[Y],[Y] |
40 MOVA,* | 41 MOVB,* | 42 MOVX,* | 43 MOVY,* | 44 MOVA,[*] | 45 MOVB,[*] | 46 MOVX,[*] | 47 MOVY,[*] | 48 MOV[A],* | 49 MOV[B],* | 4A MOV[X],* | 4B MOV[Y],* | 4C MOV[A],[*] | 4D MOV[B],[*] | 4E MOV[X],[*] | 4F MOV[Y],[*] |
50 ADDA,* | 51 ADDB,* | 52 ADDX,* | 53 ADDY,* | 54 CMPA,* | 55 CMPB,* | 56 CMPX,* | 57 CMPY,* | 58 MOV[*],A | 59 MOV[*],B | 5A MOV[*],X | 5B MOV[*],Y | 5C MOV[*],[A] | 5D MOV[*],[B] | 5E MOV[*],[X] | 5F MOV[*],[Y] |
60 RORA,A | 61 RORB,A | 62 RORX,A | 63 RORY,A | 64 RORA,B | 65 RORB,B | 66 RORX,B | 67 RORY,B | 68 RORA,X | 69 RORB,X | 6A RORX,X | 6B RORY,X | 6C RORA,Y | 6D RORB,Y | 6E RORX,Y | 6F RORY,Y |
70 TSTA,* | 71 TSTB,* | 72 TSTX,* | 73 TSTY,* | 74 ORIA,* | 75 ORIB,* | 76 ORIX,* | 77 ORIY,* | 78 ANDA,* | 79 ANDB,* | 7A ANDX,* | 7B ANDY,* | 7C XORA,* | 7D XORB,* | 7E XORX,* | 7F XORY,* |
80 ADDA,A | 81 ADDB,A | 82 ADDX,A | 83 ADDY,A | 84 ADDA,B | 85 ADDB,B | 86 ADDX,B | 87 ADDY,B | 88 ADDA,X | 89 ADDB,X | 8A ADDX,X | 8B ADDY,X | 8C ADDA,Y | 8D ADDB,Y | 8E ADDX,Y | 8F ADDY,Y |
90 SUBA,A | 91 SUBB,A | 92 SUBX,A | 93 SUBY,A | 94 SUBA,B | 95 SUBB,B | 96 SUBX,B | 97 SUBY,B | 98 SUBA,X | 99 SUBB,X | 9A SUBX,X | 9B SUBY,X | 9C SUBA,Y | 9D SUBB,Y | 9E SUBX,Y | 9F SUBY,Y |
A0 ANDA,A | A1 ANDB,A | A2 ANDX,A | A3 ANDY,A | A4 ANDA,B | A5 ANDB,B | A6 ANDX,B | A7 ANDY,B | A8 ANDA,X | A9 ANDB,X | AA ANDX,X | AB ANDY,X | AC ANDA,Y | AD ANDB,Y | AE ANDX,Y | AF ANDY,Y |
B0 XORA,A | B1 XORB,A | B2 XORX,A | B3 XORY,A | B4 XORA,B | B5 XORB,B | B6 XORX,B | B7 XORY,B | B8 XORA,X | B9 XORB,X | BA XORX,X | BB XORY,X | BC XORA,Y | BD XORB,Y | BE XORX,Y | BF XORY,Y |
C0 JNC* | C1 JC* | C2 JNZ* | C3 JZ* | C4 JMPA | C5 JMPB | C6 JMPX | C7 JMPY | C8 JMP* | C9 HLT | CA CLC | CB CMC | CC JMPA,* | CD JMPB,* | CE JMPX,* | CF JMPY,* |
D0 INCA | D1 INCB | D2 INCX | D3 INCY | D4 DECA | D5 DECB | D6 DECX | D7 DECY | D8 RORA,* | D9 RORB,* | DA RORX,* | DB RORY,* | DC RORA,[*] | DD RORB,[*] | DE RORX,[*] | DF RORY,[*] |
E0 | E1 | E2 | E3 | E4 | E5 | E6 | E7 | E8 | E9 | EA | EB | EC | ED | EE | EF |
F0 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | FA | FB | FC | FD | FE | FF |
Перемещения
# Регистр-регистр 0000_ssdd MOV d,s 0001_ssdd MOV d,[s] 0010_ssdd MOV [d],s 0011_ssdd MOV [d],[s] # Регистр-Память 0100_00dd MOV d,u 0100_01dd MOV d,[u] 0100_10dd MOV [d],u 0100_11dd MOV [d],[u] # Память-Регистр 0101_10dd MOV [u],d 0101_11dd MOV [u],[d]Арифметика и логика
0101_00dd ADD d,u -- сложить регистр с операндом 0101_01dd CMP d,u -- сравнить регистр 0110_ssdd ROR d,s -- цикличный вправо сдвиг регистра D на количество шагов S 0111_00dd TST d,u -- операция AND без записи результата 0111_01dd ORI d,u -- операция OR с операндом 0111_10dd AND d,u -- операция AND с операндом 0111_11dd XOR d,u -- операция XOR с операндом 1000_ssdd ADD d,s -- сложить регистр D минус S и поместить в D 1001_ssdd SUB d,s -- вычесть регистр D минус S и поместить в D 1010_ssdd AND d,s -- операция AND над регистрами D,S 1011_ssdd XOR d,s -- операция XOR над регистрами D,S 1101_00dd INC d -- +1 к регистру D 1101_01dd DEC d -- -1 к регистру D 1101_10dd ROR d,u -- Циклический сдвиг регистра на u позиции 1101_10dd ROR d,[u]Переходы
1100_00cc Jcc, метка -- условный переход к метке 1100_01dd JMP d -- переход к метке, которая в регистре D 1100_1000 JMP метка -- безусловный переход 1100_11dd JMP d, метка -- безусловный переход, но в D сохранить PCРазное
1100_1001 HLT -- останов 1100_1010 CLC -- сброс флага CF=0 1100_1011 CMC -- флаг CF = !CFПамять совмещенная, 256 байт на код и данные. Здесь
JMP d, m
работает так же как JMP
, но в регистр d записывается следующий PC.