ori

ori

RISC-V Ассемблер Ссылка

lyszt.net охватывает ori и другие инструкции RISC-V более подробно.

Формат кодирования

R
31–25funct7
24–20rs2
19–15rs1
14–12funct3
11–7rd
6–0opcode
I
31–20imm[11:0]
19–15rs1
14–12funct3
11–7rd
6–0opcode
S
31–25imm[11:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:0]
6–0opcode
B
31–25imm[12,10:5]
24–20rs2
19–15rs1
14–12funct3
11–7imm[4:1,11]
6–0opcode
U
31–12imm[31:12]
11–7rd
6–0opcode
J
31–12imm[20,10:1,11,19:12]
11–7rd
6–0opcode

Описание

ori выполняет побитовое ИЛИ с константой. Его связь с or такая же, как у andi с and. Буква i означает immediate — фиксированное значение, закодированное в инструкции. ori выполняет ИЛИ регистра с этой константой, а не ИЛИ двух регистров. Правило ИЛИ не меняется. Битовая позиция в результате равна 1, когда любой из битов на этой позиции равен 1, поэтому константа устанавливает выбранные вами биты. Страница or описывает эту операцию.

Форма ori приведена ниже. Она выполняет ИЛИ значения в rs1 с константой imm и записывает результат в rd.

ori rd, rs1, imm

ИЛИ устанавливает биты и оставляет остальные как были, поэтому ori включает определённые флаги, когда вы знаете, какие из них нужны. Следующая строка включает третий бит справа в t0 и оставляет все остальные биты без изменений. Префикс 0b обозначает двоичную константу.

ori t0, t0, 0b100

Регистры конфигурации, флаги разрешений и слова состояния содержат независимые биты включения и выключения, и ori включает выбранные из них одной инструкцией без регистра маски.

Руководство RISC-V утверждает, что 12-битное непосредственное значение расширяется со знаком до 32 бит перед операцией. Поэтому отрицательная константа имеет все старшие биты установленными, и ori с -1 устанавливает все биты результата.

Константа ограничена 12 битами, как и в случае с andi и addi. Чтобы установить биты вне этого диапазона, загрузите более широкую маску в регистр с помощью li и используйте or.

Пример

li t0, 0
ori t1, t0, 0xf   # t1 = 0xf