or

or

RISC-V Assembler Referenz

lyszt.net behandelt or und andere RISC-V-Befehle ausführlicher.

Kodierungsformat

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

Beschreibung

or ist eine bitweise Anweisung, sie arbeitet also unabhängig auf den 32 Bits eines Registers (die Seite and erklärt dies). An einer Bitposition ist das Ergebnis 1, wenn eines der Eingangsbits 1 ist oder beide es sind. Das Ergebnis ist nur dann 0, wenn beide Eingaben 0 sind. Die folgende Form wendet dies auf alle 32 Positionen von rs1 und rs2 an und schreibt das Ergebnis nach rd.

or rd, rs1, rs2

OR setzt Bits. Um ein Bit einzuschalten und die anderen so zu lassen, wie sie waren, verknüpft man den Wert mit einer Maske per OR, die nur an dieser Position eine 1 hat. Einstellungen und Flags, die in einem Register gepackt sind, werden auf diese Weise eingeschaltet.

OR führt auch Werte zusammen. Wenn zwei Werte an Positionen verschoben werden, die sich nicht überlappen, kombiniert ein einziges OR sie zu einem einzigen Register. Getrennte Rot-, Grün- und Blauwerte werden auf dieselbe Weise zu einer einzigen Farbe kombiniert.

Das RISC-V-Handbuch führt or unter den Register-Register-Operationen auf. Sie liest die Quellregister rs1 und rs2, führt ein bitweises logisches OR aus und schreibt das Ergebnis in das Zielregister rd.

OR kann Bits nur auf 1 setzen. Das Löschen eines Bits erfordert AND mit einer Maske, und das Umschalten eines Bits erfordert XOR. ori ist die Version, die ein Register mit einer festen Konstante per OR verknüpft.

Beispiel

li t0, 0b1100
li t1, 0b0011
or t2, t0, t1   # t2 = 0b1111