-
Notifications
You must be signed in to change notification settings - Fork 0
Home
DALBOURG Théo edited this page Sep 24, 2025
·
1 revision
Bienvenue dans mon petit cours en assembleur MIPS32.
Les registres sont comme des variables mais directements accessibles pour le processeur. Ils sont au nombre limité, et avec chacune une utilité. Vous pouvez modifier une valeur qui ne devrait pas être modifié, cependant c'est une mauvaise chose à faire car trop confusant, et peut même cassé le system.
| numéro de registre | opcode | Description |
|---|---|---|
| 0 | $zero | Toujours égale à zéro |
| 1 | $at | Variable temporel pour l'assembleur (à ne pas l'utiliser) |
| 2-3 | $v0-$V1 | Valeurs de retour d'une fonction appelée |
| 4-7 | $a0-$a3 | Les paramètres pour une fonction appelée |
| 8-15 | $t0-$t7 | Variables temporelles, qu'elles ne devraient pas être préservées |
| 16-23 | $s0-$s7 | Variables d'une fonction, qu'elle devraient être préservées |
| 24-25 | $t8-$t9 | Deux variables temporelles en plus |
| 26-27 | $k1-$k2 | Registres du noyau |
| 28 | $gp | Pointeur global |
| 29 | $sp | Pointeur de la pile |
| 30 | $fp/$s8 | Pointeur de la pille d'appelle de fonction |
| 31 | $ra | L'addresse de retour du dernier appel de fonction |
| opcodes | Description |
|---|---|
| .ascii | Chaîne de caractère sans le caractère nul à la fin |
| .asciiz | Chaîne de caractère avec le caractère nul à la fin |
| .space | Alloue un tableau de n octets |
| .word | Un entier signé de 16 bits |
Vous allez trouvez toutes les instructions possibles que MIPS32 peut exécuter. Certaiens sont plutôt du haut-niveau tel que li, cependant elles sont nécessaire à apprendre pour mieux programmer en assembleur.
- Rd = Registre de destination
- Rs, Rt = Registres de sources d'opérande
- Ra = Registre de l'adresse de retour ($ra)
- PC = Program counteur ($pc)
- Acc = Accumulateur 64 bits
| opcode | C équivalent | Description |
|---|---|---|
| add Rd, Rs, Rt | Rd = Rs + Rt | Additionne deux registres signées puis le stocke |
| addi Rd, Rs, const16 | Rd = Rs + const16 | Additionne un registre avec une constance à 16 bits puis le stocke |
| addiu Rd, Rs, const16 | Rd = Rs + const16 | Additionne un registre non-signés avec une constance à 16 bits puis le stocke |
| addu Rd, Rs, Rt | Rd = Rs + Rt | Additionne deux registres non-signés puis le stocke |
| la Rd, Label | Rd = &Label | Initie un registre avec une adresse |
| li Rd, const16 | Rd = const16 | Initie un registre avec une constance signé à 16 bits |
| lui Rd, const16 | Rd = const16 | Initie un registre avec un constance non-signé à 16 bits |
| move Rd, Rs | Rd = Rs | Charge dans un registre la valeur d'un autre registre |
| negu Rd, RS | Rd = -Rs | Charge dans un registre l'opposé de la valeur d'un autre registre |
| sub Rd, Rs, Rt | Rd = Rs - Rt | Soustrait deux registres signés puis le stocke |
| subu Rd, Rs, Rt | Rd = Rs - Rt | Soustrait deux registres non-signés puis le stocke |
| opcode | C équivalent | Description |
|---|---|---|
| not Rd, Rs | Rd = ~Rs | Fait l'opération not à deux registres puis le stocke |
| and Rd, Rs, Rt | Rd = Rs & Rt | Fait l'opération and à deux registres puis le sticke |
| andi Rd, const16 | Rd = Rs $ const16 | Fait l'opération and à un registre et à une constance à 16 bits |
| or Rd, Rs, Rt | Rd = Rs 丨 Rt | Fait l'opération or à deux registres puis le stocke |
| ori Rd, const16 | Rd = Rs 丨 const16 | Fait l'opération or à un registre et à une constance à 16 bits |
| nor Rd, Rs, Rt | Rd = ~(Rs 丨 Rt) | Fait l'opération nor à deux registres puis le stocke |
| xor Rd, Rs, Rt | Rd = Rs Rt | Fait l'opération xor à deux registres puis le stocke |
| xori Rd, Rs, const16 | Rd = Rs const16 | Fait l'opération xor à un registre et à une constance à 16 bits |
| opcode | C équivalent |
|---|---|
| movn Rd, Rs, Rt | if(Rt != 0) Rd = Rs |
| movz Rd, Rs, Rt | if(Rt == 0) Rd = Rs |
| slt Rd, Rs, Rt | Rd = (Rs < Rt)? 1: 0 |
| slti Rd, Rs, const16 | Rd = (Rs < const16)? 1: 0 |
- Instruction set MIPSWelcome to the tuto-mips32-assembly wiki!