ori

ori

Assembleur RISC-V Référence

lyszt.net couvre ori 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

ori effectue un OU bit à bit avec une constante. Sa relation à or correspond à celle de andi à and. Le i signifie immédiat, une valeur fixe encodée dans l'instruction. ori effectue un OU entre un registre et cette constante plutôt qu'entre deux registres. La règle du OU ne change pas. Une position de bit dans le résultat vaut 1 lorsque l'un ou l'autre des bits à cet endroit vaut 1, donc la constante définit les bits que vous choisissez. La page or couvre l'opération.

La forme de ori apparaît ci-dessous. Elle effectue un OU entre la valeur dans rs1 et la constante imm et écrit le résultat dans rd.

ori rd, rs1, imm

Le OU active des bits et laisse les autres tels qu'ils étaient, donc ori active des drapeaux spécifiques lorsque vous savez lesquels vous voulez. La ligne suivante active le troisième bit en partant de la droite dans t0 et laisse tous les autres bits inchangés. Le préfixe 0b marque une constante binaire.

ori t0, t0, 0b100

Les registres de configuration, les drapeaux de permission et les mots d'état contiennent des bits indépendants activés et désactivés, et ori active ceux choisis en une seule instruction sans registre de masque.

Le manuel RISC-V indique que l'immédiat de 12 bits est étendu en signe à 32 bits avant l'opération. Une constante négative a donc tous ses bits supérieurs à 1, et ori avec -1 met tous les bits du résultat à 1.

La constante est limitée à 12 bits, comme avec andi et addi. Pour définir des bits en dehors de cette plage, chargez le masque plus large dans un registre avec li et utilisez or.

Exemple

li t0, 0
ori t1, t0, 0xf   # t1 = 0xf