---
title: RISC-16 instruction set
url: https://share.jotbird.com/spicy-brilliant-wash
updated_at: 2026-10-27T10:26:49.947758+00:00
---

# 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`.