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