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