Documentation technique

Comment le CPU décode et exécute chaque instruction.

Format d'instruction

16 bits, 4 champs de 4 bits

Chaque ligne de programme fait 16 bits, découpés en OPCODE puis ARG1, ARG2, ARG3 (4 bits chacun). Pour STORE, JMP et JZ, ARG1 et ARG2 sont assemblés ensemble pour former une valeur 8 bits (adresse mémoire ou numéro de ligne).

OPCODE  ARG1  ARG2  ARG3
0010    0000  0011  0001  →  STORE 3 R1
Contrôle de flux

Compteur de ligne & décodeur

Le programme (64 lignes max) avance via un compteur ; JMP et JZ le téléportent directement sur la ligne cible via un décodeur de commandes en blocs.

Drapeau JZCondition
100Valeur A > Valeur B
010Valeur A = Valeur B
001Valeur B > Valeur A
ISA-REF

Les 16 opcodes

Binaire Mnémonique Arguments Description
0000 NOP - Ne fait rien.
0001 LOAD reg, valeur (0-15) Charge une valeur 4 bits (0-15) dans un registre. Pour une valeur plus grande, on la construit avec ADD.
0010 STORE adresse (0-255), reg Écrit le registre en mémoire à l'adresse donnée. ARG1+ARG2 sont assemblés pour former l'adresse 8 bits, ARG3 est le registre source.
0011 MOV destination, source Copie un registre dans un autre (ordre inversé : ARG1 = destination, ARG2 = source).
0100 ADD - R5 = R7 + R6.
0101 SUB - R5 = R7 - R6. (mnémonique en cours de câblage dans l'assembleur, invoqué pour l'instant via le code brut 0101)
0110 AND - R5 = R7 AND R6.
0111 OR - R5 = R7 OR R6.
1000 XOR - R5 = R7 XOR R6.
1001 NOT - R5 = NOT R7.
1010 SHL - R5 = R7 décalé à gauche.
1011 SHR - R5 = R7 décalé à droite.
1100 CMP - Compare R2 (valeur A) et R3 (valeur B), écrit le résultat dans R4.
1101 JMP ligne (0-63) Saut inconditionnel. ARG1+ARG2 assemblés forment le numéro de ligne cible.
1110 JZ ligne (0-63), drapeau Saut conditionnel selon le résultat de CMP (voir table des drapeaux ci-dessous).
1111 HALT / HLT - Arrête le CPU.
Schéma du décodeur de commandes
Emplacement image (horizontal)
images/schema-decodeur.png
Détail de l'ALU en jeu
Emplacement image (horizontal)
images/alu-detail.png