sb

sb

Assembly RISC-V Riferimento

lyszt.net tratta sb e altre istruzioni RISC-V in modo più dettagliato.

Formato di codifica

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

Descrizione

sb scrive un byte (8 bit) in memoria, che è la quantità più piccola che uno store può scrivere. È l'equivalente in scrittura dei caricamenti lb e lbu. La sintassi è mostrata di seguito. Legge il valore nel registro sorgente rs2 e scrive i suoi 8 bit più bassi all'indirizzo formato dal registro di base rs1 più l'offset. La disposizione degli operandi corrisponde a sw, con il registro sorgente elencato per primo.

sb rs2, offset(rs1)

Solo gli 8 bit più bassi dei 32 bit del registro raggiungono la memoria e i bit rimanenti vengono scartati. Uno store non ha una forma con segno o senza segno, poiché restringe il valore e mantiene il byte basso. Un valore più largo di un byte perde i suoi bit extra senza avviso. Memorizzare 300 scrive 44, perché 300 supera 256 e riparte.

L'unità più piccola della memoria è il byte, quindi sb costruisce i dati un byte alla volta, per attività come assemblare testo carattere per carattere, riempire un buffer o scrivere singoli valori di colore. I byte consecutivi occupano indirizzi distanti uno, quindi un ciclo avanza aggiungendo 1.

Il manuale RISC-V afferma che sb memorizza gli 8 bit bassi del registro rs2 in memoria all'indirizzo di rs1 più l'offset di 12 bit esteso con segno. La memoria è indirizzata per byte, quindi uno store di byte è sempre naturalmente allineato.

Un esercizio comune scrive testo a mano. Memorizza il codice di ogni carattere con sb, termina la sequenza con un byte 0, poi stampala. I codici 72, 105 e 0 in memoria vengono stampati come la parola Hi, il che mostra che una stringa è composta da byte in slot di memoria consecutivi terminati da uno zero. Uno store modifica solo il byte interessato e i byte accanto mantengono i loro valori precedenti.

Esempio

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