Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
back2root:programmation:virtual-cpu-v1 [2021/07/14 21:49] – ↷ Page déplacée de programmation:virtual-cpu-v1 à back2root:programmation:virtual-cpu-v1 frater | back2root:programmation:virtual-cpu-v1 [2025/03/11 09:37] (Version actuelle) – [Tableau] frater | ||
---|---|---|---|
Ligne 16: | Ligne 16: | ||
===== Structure d'une instruction ===== | ===== Structure d'une instruction ===== | ||
- | les deux premiers octets sont obligatoirement une instruction. | + | les deux premiers octets |
+ | l' | ||
- | < | + | {{tablelayout? |
- | 0x0000 | + | ^ 15 ^ 14 ^ 13 ^ 12 ^ 11 ^ 10 ^ 9 ^ 8 ^ 7 |
- | | + | | id |||| |
- | |||+---> Longueur | + | |
- | ||| | + | |
- | ||| 1 : 1 byte | + | |
- | | + | |
- | | + | |
- | ||+----> params #2 (souvent la source ou la définition du paramètre | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | C..F : spécifique à l' | + | |
- | +------> instruction | + | |
- | </ | + | |
+ | {{tablelayout? | ||
+ | ^ bits ^ descr. | ||
+ | | 15-12 | 4 bits d' | ||
+ | | 11-8 | 4 bits pour le 1er paramètre (si nécessaire)\\ c'est souvent la destination | ||
+ | | 7-4 | 4 bits pour le 2ème paramètre (si nécessaire)\\ c'est souvent la source | ||
+ | | 3-0 | 4 bits pour la longueur (si nécessaire) de l' | ||
+ | |||
+ | **La longueur (bits 3-0)** | ||
+ | |||
+ | nombre de byte(s) a lire en plus de l' | ||
+ | |||
+ | | 0x00 | aucun, l' | ||
+ | | 0x01 | 1 byte (BYTE) | ||
+ | | 0x02 | 2 bytes (WORD) | ||
+ | | 0x03 | 4 bytes (LONG) | ||
+ | |||
+ | **params #2** | ||
+ | |||
+ | souvent la source ou la définition du paramètre #2 | ||
+ | |||
+ | | 0x00..0x0B | ||
+ | | 0x0C..0x0E | ||
+ | | 0x0F | accès directe (les bytes suivant sont la valeur) | ||
+ | |||
+ | **params #1** | ||
+ | |||
+ | souvent la destination | ||
+ | | 0x00..0x0B | ||
+ | | 0x0C..0x0F | ||
===== Mode d' | ===== Mode d' | ||
- | < | + | {{tablelayout? |
- | 3210 | + | ^ 3 |
- | |||| | + | | |
- | ||++-> | + | |
- | ++---> | + | |
- | 01 : spécifie un Registre de type adresse (ADDR) Ax | + | |
- | 10 : spécifie une donnée pointée par le registre d' | + | |
- | 11 : parametres | + | |
- | </ | + | |
- | ce qui veut dire que l'on peut avoir : | + | {{tablelayout? |
+ | ^ RegID ^ identifiant du Registre (0..3) | ||
+ | | b00 | spécifie un Registre de type Données (DATA) Dx | | ||
+ | | b01 | spécifie un Registre de type adresse (ADDR) Ax | | ||
+ | | b10 | spécifie une donnée pointée par le registre d'adresse Ax | | ||
+ | | b11 | parametres | ||
- | | || | + | ce qui veut dire que l'on peut avoir : |
- | ^ Valeur | + | {{tablelayout? |
- | | 0 | D0 | 8 | [A0] | | + | ^ Valeur |
- | | 1 | D1 | 9 | [A1] | | + | | 0 |
- | | 2 | D2 | A | [A2] | | + | | 1 |
- | | 3 | D3 | B | [A3] | | + | | 2 |
- | | 4 | A0 | | + | | 3 |
- | | 5 | A1 | ::: | + | | 4 |
- | | 6 | A2 | ::: | + | | 5 |
- | | 7 | A3 | ::: | + | | 6 |
+ | | 7 | ||
===== Instruction Opcode ===== | ===== Instruction Opcode ===== | ||
- | < | + | "most significant bits", càd les 4bits de gauche |
- | 0 : | + | {{tablelayout? |
- | 1 : | + | | 0x0 |
- | 2 : | + | | 0x1 |
- | 3 : | + | | 0x2 |
- | 4 : | + | | 0x3 |
- | 5 : | + | | 0x4 |
- | 6 : | + | | 0x5 |
- | 7 : | + | | 0x6 |
- | 8..B : unused | + | | 0x7 |
- | C : | + | | 0x8..0xB | unused |
- | E : | + | | 0xC |
- | F : | + | | 0xE |
- | </ | + | | 0xF |
===== Special instruction opcode ===== | ===== Special instruction opcode ===== | ||
+ | {{tablelayout? | ||
+ | | 0x0000 | ||
+ | | 0x0FFF | ||
+ | | 0x0001 | ||
+ | | 0x0002 | ||
+ | | 0x0003 | ||
- | <code> | + | <nspages back2root/ |
- | 0x0000 : NOP | + | |
- | 0x0FFF : HALT | + | |
- | 0x0001 : ORG (set PC) | + | |
- | 0x0002 : STACK (Set SP) | + | |
- | 0x0003 : CLEAR (Clear flag register) | + | |
- | </code> | + |