Voici la liste des instructions assembleurs RISC-V :
Syntaxe | Description | Algorithme |
---|---|---|
ADD rd,rs1,rs2 | Cette instruction permet d'additionner une valeur. | rd ← sx(rs1) + sx(rs2) |
ADDI rd,rs1,imm | Cette instruction permet d'additionner une valeur immédiate à une opérande. | rd ← rs1 + sx(imm) |
AND rd,rs1,rs2 | Cette instruction permet d'effectuer un et binaire. | rd ← ux(rs1) ∩ ux(rs2) |
ANDI rd,rs1,imm | Cette instruction permet d'effectuer un et binaire avec une valeur immédiate. | rd ← ux(rs1) ∩ ux(imm) |
AUIPC rd,offset | Cette instruction permet d'ajouter un immédiat dans la partie supérieur du registre PC. | rd ← pc + offset |
BEQ rs1,rs2,offset | Cette instruction permet d'effectuer un branchement si égale. | SI rs1 = rs2 ALORS pc ← pc + offset |
BGE rs1,rs2,offset | Cette instruction permet d'effectuer un branchement si la valeur n'est pas supérieur ou égale. | SI rs1 = rs2 ALORS pc ← pc + offset |
BGEU rs1,rs2,offset | Cette instruction permet d'effectuer un branchement si la valeur naturel n'est pas supérieur ou égale. | SI rs1 = rs2 ALORS pc ← pc + offset |
BLT rs1,rs2,offset | Cette instruction permet d'effectuer un branchement si la valeur est inférieur. | SI rs1 < rs2 ALORS pc ← pc + offset |
BLTU rs1,rs2,offset | Cette instruction permet d'effectuer un branchement si la valeur naturel est inférieur. | SI rs1 < rs2 ALORS pc ← pc + offset |
BNE rs1,rs2,offset | Cette instruction permet d'effectuer un branchement si pas égale. | SI rs1 ≠ rs2 ALORS pc ← pc + offset |
FENCE pred,succ | Cette instruction permet d'indiquer une barrière sur toute la mémoire et les entrées/sorties précédent et suivant. | |
FENCE.I | Cette instruction permet d'indiquer une barrière sur toute la mémoire et les entrées/sorties. | |
JAL rd,offset | Cette instruction permet de faire un saut et une liaison. | rd ← pc + length(inst) pc ← pc + offset |
JALR rd,rs1,offset | Cette instruction permet de faire une saut et une liaison avec un registre. | rd ← pc + length(inst) pc ← (rs1 + offset) ? -2 |
LB rd,offset(rs1) | Cette instruction permet de charger un octet. | rd ← s8[rs1 + offset] |
LBU rd,offset(rs1) | Cette instruction permet de charger un octet de valeur naturel. | rd ← u8[rs1 + offset] |
LH rd,offset(rs1) | Cette instruction permet de charger un demi registre. | rd ← s16[rs1 + offset] |
LHU rd,offset(rs1) | Cette instruction permet de charger un demi mot naturel. | rd ← u16[rs1 + offset] |
LUI rd,imm | Cette instruction permet de charger un immédiat dans la partie supérieur. | rd ← imm |
LW rd,offset(rs1) | Cette instruction permet de charger un mot. | rd ← s32[rs1 + offset] |
OR rd,rs1,rs2 | Cette instruction permet d'effectuer un ou binaire. | rd ← ux(rs1) ∪ ux(rs2) |
ORI rd,rs1,imm | Cette instruction permet d'effectuer un ou binaire avec une valeur immédiate. | rd ← ux(rs1) ∪ ux(imm) |
SB rs2,offset(rs1) | Cette instruction permet d'entreposer un octet. | u8[rs1 + offset] ← rs2 |
SH rs2,offset(rs1) | Cette instruction permet d'entreposer un demi mot. | u16[rs1 + offset] ← rs2 |
SLL rd,rs1,rs2 | Cette instruction permet d'effectuer un décalage logique vers la gauche. | rd ← ux(rs1) << rs2 |
SLLI rd,rs1,imm | Cette instruction permet d'effectuer un décalage logique vers la gauche d'une valeur immédiate. | rd ← ux(rs1) << ux(imm) |
SLT rd,rs1,rs2 | Cette instruction permet de fixer si inférieur. | rd ← sx(rs1) < sx(rs2) |
SLTI rd,rs1,imm | Cette instruction permet de fixer une valeur immédiate inférieur. | rd ← sx(rs1) < sx(imm) |
SLTIU rd,rs1,imm | Cette instruction permet de fixer une valeur immédiate naturel inférieur. | rd ← ux(rs1) < ux(imm) |
SLTU rd,rs1,rs2 | Cette instruction permet de fixer si la valeur naturel est inférieur. | rd ← ux(rs1) < ux(rs2) |
SRA rd,rs1,rs2 | Cette instruction permet d'effectuer un décalage arithmétique vers la droite. | rd ← sx(rs1) >> rs2 |
SRAI rd,rs1,imm | Cette instruction permet d'effectuer un décalage arithmétique vers la droite d'une valeur immédiate. | rd ← sx(rs1) >> ux(imm) |
SRL rd,rs1,rs2 | Cette instruction permet d'effectuer un décalage logique vers la droite. | rd ← ux(rs1) >> rs2 |
SRLI rd,rs1,imm | Cette instruction permet d'effectuer un décalage logique vers la droite d'une valeur immédiate. | rd ← ux(rs1) >> ux(imm) |
SUB rd,rs1,rs2 | Cette instruction permet d'effectuer une soustraction. | rd ← sx(rs1) - sx(rs2) |
SW rs2,offset(rs1) | Cette instruction permet d'entreposer un mot. | u32[rs1 + offset] ← rs2 |
XOR rd,rs1,rs2 | Cette instruction permet d'effectuer un ou exclusif binaire. | rd ← ux(rs1) ⊕ ux(rs2) |
XORI rd,rs1,imm | Cette instruction permet d'effectuer un ou exclusif binaire avec une valeur immédiate. | rd ← ux(rs1) ⊕ ux(imm) |
Voici la liste des notations syntaxiques et algorithmiques :
Expression | Description |
---|---|
pc | Cette expression permet d'indiquer le compteur de programme. |
rd | Cette expression permet d'indiquer le registre de destination en valeur entière. |
rsN | Cette expression permet d'indiquer le registre de source en valeur entière N. |
imm | Cette expression permet d'indiquer une valeur d'opérande immédiate. |
offset | Cette expression permet d'indiquer un déplacement immédiat relatif du compteur de programme. |
ux(reg) | Cette expression permet d'indiquer un entier non-signé (un naturel), soit 32 bits sur RV32, soit 64 bits sur RV64. |
sx(reg) | Cette expression permet d'indiquer un entier signé de XLEN bits, soit 32 bits sur RV32, soit 64 bits sur RV64. |
uN(reg) | Cette expression permet d'indiquer une valeur zéro de registre entier étendue de N bits. |
sN(reg) | Cette expression permet d'indiquer une valeur signé de registre entier étendue de N bits. |
uN[reg + imm] | Cette expression permet d'indiquer une valeur non-signé de référence mémoire de N bits. |
sN[reg + imm] | Cette expression permet d'indiquer une valeur signé de référence mémoire de N bits. |
Dernière mise à jour : Lundi, le 9 septembre 2019