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