Ci-dessous, les différences entre deux révisions de la page.
programmation:virtual-cpu-v1 [2021/05/16 02:27] – créée frater | — | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Virtual CPU v1 ====== | ||
- | Dans le cadre d'un projet de site WEB, j'ai eut besoin d' | ||
- | Pour expérimenter un peu (et aussi pour le plaisir), j'ai eu envie de créer mon " | ||
- | Celui-ci doit être simple, disposer d'un assembleur et être paramétrable. | ||
- | |||
- | ===== Caractéristiques ===== | ||
- | |||
- | Je me suis inspiré du Motorola 680x0 pour mon " | ||
- | |||
- | | Longueur d' | ||
- | | instruction arithmétique | ||
- | | registres d' | ||
- | | registres de données | ||
- | |||
- | ===== Structure d'une instruction ===== | ||
- | |||
- | les deux premiers octets sont obligatoirement une instruction. | ||
- | |||
- | < | ||
- | 0x0000 | ||
- | |||| | ||
- | |||+---> Longueur | ||
- | ||| 0 : none | ||
- | ||| 1 : 1 byte | ||
- | ||| 2 : 2 bytes | ||
- | ||| 3 : 4 bytes | ||
- | ||+----> params #2 (souvent la source ou la définition du paramètre #2) | ||
- | || 0..B : voir le mode de d' | ||
- | || C..E : spécifique à l' | ||
- | || | ||
- | |+-----> params #1 (souvent la destination) | ||
- | | 0..B : voir le mode de d' | ||
- | | C..F : spécifique à l' | ||
- | +------> instruction | ||
- | </ | ||
- | |||
- | ===== Mode d' | ||
- | |||
- | < | ||
- | 3210 | ||
- | |||| | ||
- | ||++-> | ||
- | ++---> | ||
- | 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 : | ||
- | |||
- | ^ Valeur du Registre ^ Valeur Pointée ^ | ||
- | | 0 : D0 | 8 : [A0] | | ||
- | | 1 : D1 | 9 : [A1] | | ||
- | | 2 : D2 | A : [A2] | | ||
- | | 3 : D3 | B : [A3] | | ||
- | | 4 : A0 | | | ||
- | | 5 : A1 | | | ||
- | | 6 : A2 | | | ||
- | | 7 : A3 | | | ||
- | |||
- | ===== Instruction Opcode ===== | ||
- | |||
- | < | ||
- | 0 : NOP or specific machine operands | ||
- | 1 : MOVE | ||
- | 2 : ADD / INC | ||
- | 3 : SUB / DEC | ||
- | 4 : MUL | ||
- | 5 : DIV | ||
- | 6 : ROR | ||
- | 7 : ROL | ||
- | 8..B : unused | ||
- | C : PUSH / POP / CALL / RET | ||
- | E : CMP | ||
- | F : JMP (extended) | ||
- | </ | ||
- | |||
- | ===== Special instruction opcode ===== | ||
- | |||
- | < | ||
- | 0x0000 : NOP | ||
- | 0x0FFF : HALT | ||
- | 0x0001 : ORG (set PC) | ||
- | 0x0002 : STACK (Set SP) | ||
- | 0x0003 : CLEAR (Clear flag register) | ||
- | </ |