sw

sw

Assembleur RISC-V Référence

lyszt.net couvre sw et d'autres instructions RISC-V plus en détail.

Format d'encodage

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

Description

sw prend une valeur dans un registre et l'écrit en mémoire, l'inverse de lw. Le nom signifie store word (stocker un mot), et un mot fait 32 bits. Les chargements déplacent les données de la mémoire vers les registres pour qu'elles puissent être traitées, et les stockages renvoient les résultats. Ces deux instructions constituent le cycle charger, calculer et stocker de RISC-V, car l'arithmétique se fait uniquement dans les registres.

La syntaxe de sw apparaît ci-dessous. L'ordre des opérandes diffère de la plupart des instructions.

sw rs2, offset(rs1)

rs2 contient la valeur à écrire. Le deuxième opérande, offset(rs1), donne l'adresse de destination en mémoire : l'adresse dans le registre de base rs1 plus un petit décalage constant, le même adressage que celui utilisé par lw. La ligne ci-dessous écrit la valeur contenue dans t1 à l'adresse contenue dans t0.

sw t1, 0(t0)

sw laisse chaque registre inchangé. Son effet porte entièrement sur la mémoire, alors que presque toutes les autres instructions écrivent dans un registre.

Le manuel RISC-V indique que sw, sh et sb stockent des valeurs de 32 bits, 16 bits et 8 bits depuis les bits de poids faible du registre rs2 vers la mémoire. L'adresse effective est le registre rs1 plus le décalage de 12 bits étendu en signe. Les chargements et les stockages à des adresses naturellement alignées ne déclenchent jamais d'erreur d'alignement, et le manuel garantit qu'ils s'exécutent de manière atomique, en une seule étape indivisible.

Les stockages enregistrent les résultats dans des tableaux et des variables, et une fonction les utilise pour placer des valeurs dans son espace de travail sur la pile. Un stockage écrase les 4 octets à l'adresse cible. L'exemple écrit 99 dans un emplacement étiqueté en mémoire, remplaçant ce qui s'y trouvait. La mémoire conserve cette valeur jusqu'à ce qu'un autre stockage l'écrase, contrairement à un registre.

Exemple

la t0, slot
li t1, 99
sw t1, 0(t0)   # memory at slot now holds 99