sb
lyszt.net couvre sb et d'autres instructions RISC-V plus en détail.
Format d'encodage
Description
sb écrit un octet (8 bits) en mémoire, ce qui est la plus petite quantité qu'un store peut écrire. C'est l'équivalent en écriture des chargements lb et lbu. La syntaxe apparaît ci-dessous. Il lit la valeur dans le registre source rs2 et écrit ses 8 bits les plus bas à l'adresse formée par le registre de base rs1 plus l'offset. La disposition des opérandes correspond à sw, avec le registre source listé en premier.
sb rs2, offset(rs1)
Seuls les 8 bits les plus bas des 32 bits du registre atteignent la mémoire et les bits restants sont écartés. Un store n'a pas de forme signée ou non signée, puisqu'il rétrécit la valeur et conserve l'octet bas. Une valeur plus large qu'un octet perd ses bits supplémentaires sans avertissement. Stocker 300 écrit 44, car 300 dépasse 256 et revient à 44.
La plus petite unité de la mémoire est l'octet, donc sb construit les données octet par octet, pour des tâches telles que l'assemblage de texte caractère par caractère, le remplissage d'un tampon ou l'écriture de valeurs de couleur individuelles. Les octets consécutifs occupent des adresses séparées de 1, donc une boucle avance en ajoutant 1.
Le manuel RISC-V indique que sb stocke les 8 bits bas du registre rs2 en mémoire à l'adresse de rs1 plus l'offset de 12 bits étendu en signe. La mémoire est adressée par octet, donc un store d'octet est toujours naturellement aligné.
Un exercice courant consiste à écrire du texte à la main. Stockez le code de chaque caractère avec sb, terminez la séquence par un octet 0, puis affichez-la. Les codes 72, 105 et 0 en mémoire s'affichent comme le mot Hi, ce qui montre qu'une chaîne est constituée d'octets dans des emplacements mémoire consécutifs terminés par un zéro. Un store ne modifie que l'octet ciblé et les octets voisins conservent leurs valeurs précédentes.
Exemple
la t0, slot li t1, 200 sb t1, 0(t0) # memory at slot now holds the low 8 bits, 200
