or

or

Assembleur RISC-V Référence

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

or est une instruction bit à bit, elle agit donc indépendamment sur les 32 bits d'un registre (la page and explique cela). À une position de bit, le résultat est 1 si l'un des bits d'entrée est 1 ou si les deux le sont. Le résultat est 0 uniquement lorsque les deux entrées sont 0. La forme ci-dessous applique cela aux 32 positions de rs1 et rs2 et écrit le résultat dans rd.

or rd, rs1, rs2

OR met des bits à 1. Pour activer un bit et laisser les autres tels quels, on fait un OR de la valeur avec un masque qui a un 1 uniquement à cette position. Les réglages et les drapeaux regroupés dans un seul registre sont activés de cette manière.

OR fusionne aussi des valeurs. Lorsque deux valeurs sont décalées vers des positions qui ne se chevauchent pas, un seul OR les combine en un seul registre. Des valeurs distinctes de rouge, vert et bleu se combinent en une seule couleur de la même manière.

Le manuel RISC-V liste or parmi les opérations registre-registre. Elle lit les registres sources rs1 et rs2, effectue un OR logique bit à bit et écrit le résultat dans le registre de destination rd.

OR ne peut que mettre des bits à 1. Effacer un bit nécessite un AND avec un masque, et inverser un bit nécessite un XOR. ori est la version qui fait un OR d'un registre avec une constante fixe.

Exemple

li t0, 0b1100
li t1, 0b0011
or t2, t0, t1   # t2 = 0b1111