and

and

RISC-V Assembler Referenz

lyszt.net behandelt and 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

and ist eine bitweise Anweisung. Ein Register enthält 32 Bits, also 32 einzelne 0en und 1en hintereinander. Eine bitweise Anweisung wendet ihre Operation unabhängig auf alle 32 Positionen an, und es wird kein Übertrag zwischen den Positionen weitergegeben.

Bei einem einzelnen Bit ergibt AND nur dann 1, wenn beide Eingabebits 1 sind, andernfalls 0. Die folgende Form wendet diese Regel auf alle 32 Positionen an, vergleicht rs1 und rs2 und schreibt das Ergebnis nach rd.

and rd, rs1, rs2

AND wird zum Maskieren verwendet, wodurch einige Bits beibehalten und andere gelöscht werden. Wo die Maske eine 1 hat, bleibt das ursprüngliche Bit erhalten. Wo die Maske eine 0 hat, ist das Ergebnis 0. Wenn man einen Wert mit der Maske 00001111 AND-verknüpft, bleiben die unteren vier Bits erhalten und der Rest wird gelöscht. Durch Maskieren wird ein Feld aus einem Wert extrahiert, der mehrere Felder zusammenpackt.

Das RISC-V-Handbuch führt and, or und xor unter den Register-Register-Operationen auf. Alle lesen die Quellregister rs1 und rs2, schreiben das Ergebnis in das Zielregister rd und führen bitweise logische Operationen aus.

Im Beispiel wird 0b1100 (das Präfix 0b kennzeichnet Binärziffern) mit 0b1010 AND-verknüpft. Beide Eingaben haben nur an der linken Position eine 1, daher ist das Ergebnis 0b1000, und es geht nach t2.

Beispiel

li t0, 0b1100
li t1, 0b1010
and t2, t0, t1   # t2 = 0b1000