sb

sb

RISC-V Assembler Referenz

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

sb schreibt ein Byte (8 Bits) in den Speicher, was die kleinste Menge ist, die ein Store schreiben kann. Es ist das Store-Äquivalent zu den Ladebefehlen lb und lbu. Die Syntax ist unten dargestellt. Es liest den Wert im Quellregister rs2 und schreibt seine niedrigsten 8 Bits an die Adresse, die sich aus Basisregister rs1 plus dem Offset ergibt. Das Operandenlayout entspricht sw, wobei das Quellregister zuerst aufgeführt wird.

sb rs2, offset(rs1)

Nur die niedrigsten 8 der 32 Bits des Registers erreichen den Speicher und die übrigen Bits werden verworfen. Ein Store hat keine vorzeichenbehaftete oder vorzeichenlose Form, da er den Wert verengt und das niedrige Byte behält. Ein Wert, der breiter als ein Byte ist, verliert seine zusätzlichen Bits ohne Warnung. Das Speichern von 300 schreibt 44, weil 300 über 256 hinausläuft.

Die kleinste Einheit des Speichers ist ein Byte, daher baut sb Daten Byte für Byte auf, für Aufgaben wie das Zusammensetzen von Text Zeichen für Zeichen, das Füllen eines Puffers oder das Schreiben einzelner Farbwerte. Aufeinanderfolgende Bytes belegen Adressen mit einem Abstand von 1, daher rückt eine Schleife durch Addieren von 1 vor.

Das RISC-V-Handbuch besagt, dass sb die niedrigen 8 Bits des Registers rs2 an der Adresse von rs1 plus dem vorzeichenerweiterten 12-Bit-Offset in den Speicher schreibt. Der Speicher ist byte-adressiert, daher ist ein Byte-Store immer natürlich ausgerichtet.

Eine häufige Übung schreibt Text von Hand. Speichere den Code jedes Zeichens mit sb, beende die Sequenz mit einem 0-Byte und gib sie dann aus. Die Codes 72, 105 und 0 im Speicher werden als das Wort Hi ausgegeben, was zeigt, dass ein String aus Bytes in aufeinanderfolgenden Speicherplätzen besteht, die durch eine Null abgeschlossen werden. Ein Store ändert nur das eine adressierte Byte und die Bytes daneben behalten ihre vorherigen Werte.

Beispiel

la t0, slot
li t1, 200
sb t1, 0(t0)   # memory at slot now holds the low 8 bits, 200