ori
lyszt.net охватывает ori и другие инструкции RISC-V более подробно.
Формат кодирования
Описание
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
