RISC-16 instruction set ¶
Opcode - код операции
| opcode | значение |
|---|---|
| 000 | R-type инструкция (регистр + регистр) |
| 001 | I-type инструкция (регистр + immediate) |
| 010 | S-type инструкция (запись значения регистра в память) |
| 011 | Load - I-type (загрузка значения из памяти в регистр) |
| 100 | B-type (Прыжок с условием) |
| 101 | UJ-type (безусловный прыжок) |
| 110 | Прыжок с записью адреса следующей инструкции в регистр (для возврата из функции) |
| 111 | No operation, reserved |
Регистры: 8 16-битных регистров
| Регистр | Назначение | Двоичный адрес |
|---|---|---|
| x0 | Всегда равен нулю, запись невозможна | 000 |
| x1 | Stack pointer, указатель на область стэка памяти | 001 |
| x2-x7 | General purpose регистры | 010-111 |
R-type ¶
Операции с двумя регистрами с сохранением результата в третий.
| 3 bit | 3bit | 3bit | 4bit | 3bit |
|---|---|---|---|---|
| rd | rs1 | rs2 | funct4 | opcode |
I-type ¶
Операции с одним регистром и непосредственным значением (immediate). Результат сохраняется в регистр.
| 3 bit | 3 bit | 5 bit | 2 bit | 3 bit |
|---|---|---|---|---|
| rd | rs1 | imm | funct2 | opcode |
S-type ¶
| 3 bit | 3 bit | 3 bit | 2 bit | 3 bit |
|---|---|---|---|---|
| imm[4:2] | rs1 | rs2 | imm[1:0] | opcode |
| Записывает значение rs2 по адресу rs1 + смещение imm |
B-type ¶
Условный переход на основе сравнения двух регистров.
| 3 bit | 3 bit | 3 bit | 2 bit | 2 bit | 3 bit |
|---|---|---|---|---|---|
| imm[4:2] | rs1 | rs2 | imm[1:0] | funct2 | opcode |
Переход выполняется, если условие сравнения регистров rs1 и rs2 выполняется. Смещение imm определяет адрес перехода относительно текущего PC.
UJ-type ¶
Безусловный переход с сохранением адреса возврата в регистр rd.
| 3 bit | 10 bit | 3 bit |
|---|---|---|
| rd | imm | opcode |
Адрес следующей инструкции сохраняется в rd, после чего выполняется переход на смещение imm относительно текущего PC.