or

or

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

lyszt.net охватывает or и другие инструкции 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

Описание

or — это побитовая инструкция, поэтому она работает с 32 битами регистра независимо (страница and это объясняет). В данной битовой позиции результат равен 1, если любой из входных битов равен 1 или оба равны 1. Результат равен 0 только тогда, когда оба входа равны 0. Приведённая ниже форма применяет это ко всем 32 позициям rs1 и rs2 и записывает результат в rd.

or rd, rs1, rs2

OR устанавливает биты. Чтобы включить один бит и оставить остальные как были, нужно выполнить OR значения с маской, у которой 1 стоит только в этой позиции. Настройки и флаги, упакованные в один регистр, включаются именно так.

OR также объединяет значения. Когда два значения сдвинуты в позиции, которые не перекрываются, одно OR объединяет их в один регистр. Отдельные значения красного, зелёного и синего объединяются в один цвет таким же образом.

В руководстве RISC-V or указана среди операций регистр-регистр. Она читает исходные регистры rs1 и rs2, выполняет побитовое логическое OR и записывает результат в регистр назначения rd.

OR может только устанавливать биты в 1. Для сброса бита требуется AND с маской, а для инвертирования бита — XOR. ori — это версия, которая выполняет OR регистра с фиксированной константой.

Пример

li t0, 0b1100
li t1, 0b0011
or t2, t0, t1   # t2 = 0b1111