Section courante

A propos

Section administrative du site

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