xori

xori

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

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

Описание

xori выполняет побитовое XOR с константой. Вместе с andi и ori она дополняет логические инструкции с непосредственным операндом. Буква i означает immediate (непосредственный): фиксированное значение, закодированное в инструкции, поэтому второй регистр не нужен. XOR даёт 1 в позиции бита, когда два бита различаются (см. страницу xor). При заданной константной маске 1 в маске инвертирует соответствующий бит, а 0 оставляет этот бит без изменений.

Синтаксис xori приведён ниже. Она выполняет XOR значения в rs1 с константой imm и записывает результат в rd.

xori rd, rs1, imm

andi очищает выбранные биты, ori устанавливает их, а xori инвертирует их. Двойная инверсия возвращает исходное значение.

xori также предоставляет инструкцию not. Инвертирование всех битов значения означает XOR с маской из всех 1, а not — это сокращение для строки ниже, потому что -1 в битах — это все 1. В RISC-V нет выделенной инструкции, которая инвертирует каждый бит.

xori rd, rs, -1

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

Обычное небольшое применение переключает значение да или нет, хранимое как 0 или 1. Следующая строка переключает его в другое состояние при каждом выполнении.

xori t0, t0, 1

Константа ограничена 12 битами. Для более широких шаблонов загрузите маску в регистр и используйте xor.

Пример

li t0, 0
xori t1, t0, -1   # t1 = -1 (every bit flipped)