1. Chargement et stockage (mémoire)¶
Instruction | Syntaxe | Description | Exemple | Effet mémoire |
---|---|---|---|---|
lw | lw $rt, d($rs) | Charge un mot (4 octets) depuis la mémoire à l’adresse $rs + d vers $rt . | lw $t0, 8($a1) | Copie Mem[$a1+8] → $t0 . |
sw | sw $rt, d($rs) | Stocke le contenu de $rt en mémoire à l’adresse $rs + d . | sw $t0, 0($t1) | Copie $t0 → Mem[$t1+0] . |
la | la $rt, label | Charge l’adresse d’une donnée. | la $a0, hw | $a0 ← adresse de hw . |
li (pseudo) | li $rt, imm | Charge une constante immédiate (peut générer 1 ou 2 instructions). | li $t0, 42 | $t0 ← 42 . |
move (pseudo) | move $rd, $rs | Copie un registre dans un autre. | move $t1, $t0 | $t1 ← $t0 . |
2. Arithmétique et logique¶
Instruction | Syntaxe | Description | Exemple | Effet |
---|---|---|---|---|
add | add $rd, $rs, $rt | Addition signée. | add $t0, $t1, $t2 | $t0 ← $t1 + $t2 . |
addi | addi $rt, $rs, imm | Addition avec immédiat. | addi $t0, $t0, 5 | $t0 ← $t0 + 5 . |
sub | sub $rd, $rs, $rt | Soustraction. | sub $t0, $t1, $t2 | $t0 ← $t1 - $t2 . |
mul | mul $rd, $rs, $rt | Multiplication. | mul $t0, $t1, $t2 | $t0 ← $t1 * $t2 . |
div | div $rs, $rt | Division entière. Quotient → $lo , reste → $hi . | div $t1, $t2 | $lo ← $t1 / $t2, $hi ← $t1 % $t2 . |
mflo/mfhi | mflo $rd / mfhi $rd | Récupère résultat de division/multiplication. | mflo $t0 | $t0 ← lo . |
and / or / xor | and $rd, $rs, $rt etc. | Logique bit-à-bit. | and $t0, $t1, $t2 | $t0 ← $t1 & $t2 . |
sll / srl / sra | sll $rd, $rt, shamt | Décalage gauche/droite (arith/log). | sll $t1, $t1, 1 | $t1 ← $t1 << 1 . |
slt | slt $rd, $rs, $rt | Met $rd=1 si $rs<$rt , sinon 0. | slt $t0, $t1, $t2 | $t0 ← ($t1<$t2)?1:0 . |
3. Comparaisons et branchements¶
Instruction | Syntaxe | Description | Exemple | Effet |
---|---|---|---|---|
beq | beq $rs, $rt, label | Branche si $rs == $rt . | beq $t0, $t1, equal | PC ← label si égal. |
bne | bne $rs, $rt, label | Branche si $rs != $rt . | bne $t0, $zero, loop | PC ← loop si ≠0. |
blt / ble / bgt / bge (pseudo) | blt $rs, $rt, L | Branche si <, ≤, >, ≥ . | blt $t0, $t1, L | PC ← L si $t0<$t1 . |
beqz / bnez | beqz $rs, label | Branche si $rs==0 ou $rs≠0 . | bnez $t0, loop | PC ← loop si $t0≠0 . |
b | b label | Branche inconditionnelle (pseudo). | b end | PC ← end. |
4. Sauts et fonctions¶
Instruction | Syntaxe | Description | Exemple |
---|---|---|---|
j | j label | Saut inconditionnel à label . | j main |
jr | jr $rs | Saut à l’adresse dans $rs . | jr $ra (retour de fonction) |
jal | jal label | Appel fonction : PC ← label, $ra ← PC+4 . | jal printf |
jalr | jalr $rs | Comme jal mais adresse dans un registre. | jalr $t0 |
5. Pile et mémoire¶
Instruction | Syntaxe | Description | Exemple |
---|---|---|---|
push (pseudo) | addi $sp,$sp,-4; sw $rt,0($sp) | Empile $rt . | sw $ra,0($sp) |
pop (pseudo) | lw $rt,0($sp); addi $sp,$sp,4 | Dépile dans $rt . | lw $ra,0($sp) |
6. Appels système (syscall)¶
Avant
syscall
, placer un code service dans$v0
, et arguments dans$a0..a3
.
Service | Code | Argument(s) | Exemple |
---|---|---|---|
Print int | 1 | $a0 = entier | li $v0,1; li $a0,42; syscall |
Print string | 4 | $a0 = adresse | li $v0,4; la $a0,msg; syscall |
Read int | 5 | → $v0 | li $v0,5; syscall |
Exit | 10 | – | li $v0,10; syscall |