истема, процессор, который имеет небольшое количество инструкции. Особенность моего процессора:
Задача подобного процессора заключается в том, чтобы сделать достаточно простой набор инструкции, с помощью которого можно что-то программировать. Он немного посложнее базового процессора ARM, но со своими особенностями. Например, это не RISC, инструкции могут быть крайне длинными, особенно инструкция PUSH и POP, количество операндов которое варьируется от 0 до 255.
Набор флагов: O — Overflow, S — Sign, Z — Zero, C — Carry. Всего лишь 4 флага, которые устанавливаются после выполнении операции АЛУ и сдвигов.
Перемещения |
---|
OPC | Мнемоника | Операнды | Циклов | Описание |
---|
00 | MOV | AA ** | 6 | Поместить непосредственное значение двойного слова в регистр A |
---|
01 | MOV | BB AA | 3 | Скопировать регистр B в регистр A |
---|
02 | MOVB A, [B] | BB AA | 5 | Извлечь байт из памяти и запись в A с очисткой старших 24 бит в 0 |
---|
03 | MOVW A, [B] | BB AA | 6 | Извлечь слово из памяти и запись в A с очисткой старших 16 бит в 0 |
---|
04 | MOVD A, [B] | BB AA | 8 | Извлечь двойное слово из памяти в регистр A |
---|
05 | MOVB [A], B | BB AA | 5 | Запись младших 8 бит регистра B в память A |
---|
06 | MOVW [A], B | BB AA | 6 | Запись младших 16 бит регистра B в память A (little endian) |
---|
07 | MOVD [A], B | BB AA | 8 | Запись регистра B в память A (little endian) |
---|
1E | MOVS | AA ** | 3 | Помещение знакорасширенного значения байта в регистр A |
---|
Вычисление |
---|
OPC | Мнемоника | Операнды | Циклов | Описание |
---|
08 | MUL | BB CC AA RR | 5 | Беззнаковое умножение B x C с записью младшего результата в A, старшего в R |
---|
09 | DIV | BB CC AA RR | 38 | Беззнаковое деление B на C с результатом в A и остатком в R |
---|
Процедуры |
---|
OPC | Мнемоника | Операнды | Циклов | Описание |
---|
0C | CALL | ** | 5 | Вызов процедуры, запись в стек следующего за CALL адреса PC |
---|
0D | RET | | 3 | Возврат из процедуры |
---|
Стек |
---|
OPC | Мнемоника | Операнды | Циклов | Описание |
---|
0E | PUSH | nn ... | 4+ | Запись nn регистров в стек, номера их следуют за параметром nn |
---|
0F | POP | nn ... | 3+ | Извлечение из стека nn регистров, номера их следуют за параметром nn |
---|
АЛУ |
---|
OPC | Мнемоника | Операнды | Циклов | Описание |
---|
10 | ADD | AA BB CC | 4 | Сложение A + B с записью в C |
---|
11 | ADC | AA BB CC | 4 | Сложение с учетом переноса A + B с записью в C |
---|
12 | SUB | AA BB CC | 4 | Вычитание A - B с записью в C |
---|
13 | SBC | AA BB CC | 4 | Вычитание с учетом переноса A - B с записью в C |
---|
14 | AND | AA BB CC | 4 | Логическое A and B с записью в C |
---|
15 | XOR | AA BB CC | 4 | Логическое A xor B с записью в C |
---|
16 | OR | AA BB CC | 4 | Логическое A or B с записью в C |
---|
17 | CMP | AA BB | 4 | Вычитание A - B без записи в регистр, только флаги |
---|
Сдвиги |
---|
OPC | Мнемоника | Операнды | Циклов | Описание |
---|
18 | ROL | AA BB | 4 | Циклический сдвиг регистра A налево |
---|
19 | ROR | AA BB | 4 | Циклический сдвиг регистра A вправо |
---|
1A | SHL | AA BB | 4 | Логический сдвиг регистра A влево |
---|
1B | SHR | AA BB | 4 | Логический сдвиг регистра A вправо |
---|
1C | RCL | AA BB | 4 | Сдвиг регистра A влево, заполняя младшие биты значением CF |
---|
1D | RCR | AA BB | 4 | Сдвиг регистра A вправо, заполняя старшие биты значением CF |
---|
1F | SAR | AA BB | 4 | Сдвиг регистра A вправо, заполняя старшие биты значением старшего 31-го бита |
---|
Переход |
---|
OPC | Мнемоника | Операнды | Циклов | Описание |
---|
70 | JR | b8 | 2 | Короткий переход -128..127 |
---|
71 | JP | ** | 5 | Перейти по 32-х битному адресу |
---|
72 | JC | b8 | 1-2 | Короткий переход если CF=1 |
---|
73 | JNC | b8 | 1-2 | Короткий переход если CF=0 |
---|
74 | JZ | b8 | 1-2 | Короткий переход если ZF=1 |
---|
75 | JNZ | b8 | 1-2 | Короткий переход если ZF=1 |
---|
76 | JBE | b8 | 1-2 | Короткий переход если CF=1 AND ZF=1 |
---|
77 | JA | b8 | 1-2 | Короткий переход если CF=0 OR ZF=0 |
---|
78 | JS | b8 | 1-2 | Короткий переход если SF=0 |
---|
79 | JNS | b8 | 1-2 | Короткий переход если SF=1 |
---|
7A | JP | AA | 3 | Перейти на адрес, указанный в регистре A |
---|
7C | JL | b8 | 1-2 | Знаковое сравнение и если A < B, переход |
---|
7D | JNL | b8 | 1-2 | Знаковое сравнение и если A >= B, переход |
---|
7E | JLE | b8 | 1-2 | Знаковое сравнение и если A <= B, переход |
---|
7F | JG | b8 | 1-2 | Знаковое сравнение и если A > B, переход |
---|