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