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)