xori

xori

Asembler RISC-V Referencja

lyszt.net obejmuje xori i inne instrukcje RISC-V w większych szczegółach.

Format kodowania

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

Opis

xori wykonuje bitową operację XOR ze stałą. Wraz z andi i ori dopełnia instrukcje logiczne z argumentem natychmiastowym. Litera i oznacza immediate (natychmiastowy): stała wartość zakodowana w instrukcji, więc drugi rejestr nie jest potrzebny. XOR daje 1 na danej pozycji bitu, gdy dwa bity się różnią (zobacz stronę xor). Przy danej stałej masce 1 w masce odwraca odpowiedni bit, a 0 pozostawia ten bit bez zmian.

Składnia xori znajduje się poniżej. Wykonuje XOR wartości w rs1 ze stałą imm i zapisuje wynik do rd.

xori rd, rs1, imm

andi zeruje wybrane bity, ori je ustawia, a xori je odwraca. Dwukrotne odwrócenie przywraca wartość pierwotną.

xori udostępnia również instrukcję not. Odwrócenie wszystkich bitów wartości oznacza XOR z maską złożoną z samych 1, a not jest skrótem dla poniższej linii, ponieważ -1 w bitach to same 1. RISC-V nie ma dedykowanej instrukcji, która odwraca każdy bit.

xori rd, rs, -1

Podręcznik RISC-V stwierdza, że 12-bitowy argument natychmiastowy jest rozszerzany znakowo do 32 bitów przed operacją, więc stała -1 staje się maską złożoną z samych 1. Wymienia xori ze stałą -1 jako bitowe logiczne odwrócenie rejestru, czyli pseudoinstrukcję not.

Typowe małe zastosowanie przełącza wartość tak lub nie przechowywaną jako 0 lub 1. Następna linia przełącza ją do drugiego stanu za każdym razem, gdy zostanie wykonana.

xori t0, t0, 1

Stała jest ograniczona do 12 bitów. Dla szerszych wzorców załaduj maskę do rejestru i użyj xor.

Przykład

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