xor

xor

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

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

Описание

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

xor rd, rs1, rs2

Две особенности делают XOR полезным. Значение, подвергнутое XOR с самим собой, даёт 0, поскольку каждый бит совпадает сам с собой, поэтому следующая строка обнуляет регистр.

xor t0, t0, t0

XOR с маской инвертирует биты там, где в маске стоит 1, и оставляет остальные без изменений. Двойная инверсия восстанавливает исходное значение. На этом основаны простое шифрование и проверки ошибок.

XOR также проверяет равенство. После приведённой ниже строки t2 равен нулю, когда два входа были идентичны, и не равен нулю, когда они различаются, и ветвление может проверить результат.

xor t2, t0, t1

Руководство RISC-V перечисляет xor среди операций регистр-регистр, которые читают rs1 и rs2 и записывают результат в rd. Она выполняет побитовое логическое исключающее ИЛИ.

Пример обнуляет t0 до 0 независимо от того, что в нём было раньше. Инструкция li (load immediate) с константой ноль делает то же самое.

Пример

xor t0, t0, t0   # t0 = 0