Outils pour utilisateurs

Outils du site


back2root:programmation:virtual-cpu-v1

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
back2root:programmation:virtual-cpu-v1 [2022/02/21 23:01] fraterback2root: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 (16 bits) sont obligatoirement une instruction
 +l'instruction se décode en 4x 4 bits.
  
-<code> +{{tablelayout?rowsHeaderSource=Auto}} 
-0x0000 + 15   14  ^  13  ^  12  ^  11          ^  10  ^  9  ^  8  ^  7            6  ^  5  ^  4  ^  3        2  ^  1  ^   ^ 
-  |||| + id                    ||||  paramètre 1                 ||||  paramètre 2                ||||  taille                 ||||
-  |||+---> Longueur   +
-  |||        : 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'adressage du registre +
-  ||         C..E : spécifique à l'instruction +
-  ||         F    : accès directe (les bytes suivant sont la valeur)  +
-  |+-----> params #1 (souvent la destination) +
-           0..B : voir le mode de d'adressage du registre +
-  |          C..F : spécifique à l'instruction +
-  +------> instruction  +
-</code>+
  
 +{{tablelayout?rowsHeaderSource=Auto}}
 +^  bits   ^ descr.                                                                       ^
 +|  15-12  | 4 bits d'instruction ID\\ Voir ci-dessous                                    |
 +|  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'instruction                     |
 +
 +**La longueur (bits 3-0)**
 +
 +nombre de byte(s) a lire en plus de l'instruction
 +
 +|  0x00  | aucun, l'instruction est complète  |
 +|  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  | voir le mode de d'adressage du registre  |
 +|  0x0C..0x0E  | spécifique à l'instruction  |
 +|  0x0F        | accès directe (les bytes suivant sont la valeur)  |
 +
 +**params #1**
 +
 +souvent la destination
 +|  0x00..0x0B  | voir le mode de d'adressage du registre  |
 +|  0x0C..0x0F  | spécifique à l'instruction  |
 ===== Mode d'adressage du registre (format du Parametre #1 et #2) ===== ===== Mode d'adressage du registre (format du Parametre #1 et #2) =====
  
-<code> +{{tablelayout?rowsHeaderSource=Auto}} 
-3210 +^  3        2  ^  1      ^  0  ^ 
-|||| + Taille       ||  RegID       || 
-||++->  identifiant du Registre (0..3) + 
-++--->  00 : spécifie un Registre de type Données (DATA) Dx +{{tablelayout?rowsHeaderSource=Auto}} 
-        01 : spécifie un Registre de type adresse (ADDR) Ax +^  RegID  identifiant du Registre (0..3)                            ^ 
-        10 : spécifie une donnée pointée par le registre d'adresse Ax + b00    | spécifie un Registre de type Données (DATA) Dx            | 
-        11 : parametres +|  b01    | spécifie un Registre de type adresse (ADDR) Ax            | 
-</code>+|  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 : ce qui veut dire que l'on peut avoir :
- +{{tablelayout?rowsHeaderSource=Auto}} 
-|                    ||                      | + Valeur  lue dans  ^  Valeur  pointée par  ^ 
-^ Valeur  ^ lue dans  ^ Valeur  ^ pointée par  ^ + 0        D0        |  8        [A0]         | 
-| 0       | D0        | 8       | [A0]         | + 1        D1        |  9        [A1]         | 
-| 1       | D1        | 9       | [A1]         | + 2        D2        |  A        [A2]         | 
-| 2       | D2        | A       | [A2]         | + 3        D3        |  B        [A3]         | 
-| 3       | D3        | B       | [A3]         | + 4        A0        |                         || 
-| 4       | A0        |                       || + 5        A1        |  :::                     :::          | 
-| 5       | A1        | :::                   | :::          | + 6        A2        |  :::                     :::          | 
-| 6       | A2        | :::                   | :::          | + 7        A3        |  :::                     :::          |
-| 7       | A3        | :::                   | :::          |+
  
 ===== Instruction Opcode ===== ===== Instruction Opcode =====
  
-<code> +"most significant bits", càd les 4bits de gauche 
-0     : NOP or specific machine operands +{{tablelayout?rowsHeaderSource=Auto}} 
-1     : MOVE +|  0x0       NOP or specific machine operands  | 
-2     : ADD / INC +|  0x1       MOVE                              | 
-3     : SUB / DEC +|  0x2       ADD / INC                         | 
-4     : MUL  +|  0x3       SUB / DEC                         | 
-5     : DIV +|  0x4       MUL                               | 
-6     : ROR  +|  0x5       DIV                               | 
-7     : ROL +|  0x6       ROR                               | 
-8.. unused +|  0x7       ROL                               | 
-C     : PUSH / POP / CALL / RET +|  0x8..0xB  unused                            | 
-E     : CMP +|  0xC       PUSH / POP / CALL / RET           | 
-F     : JMP  (extended) +|  0xE       CMP                               | 
-</code>+|  0xF       JMP  (extended)                   |
  
 ===== Special instruction opcode ===== ===== Special instruction opcode =====
- +{{tablelayout?rowsHeaderSource=Auto}} 
-<code> +|  0x0000  NOP                          | 
-0x0000 NOP +|  0x0FFF  HALT                         | 
-0x0FFF HALT +|  0x0001  ORG (set PC)                 | 
-0x0001 ORG (set PC) +|  0x0002  STACK (Set SP)               | 
-0x0002 STACK (Set SP) +|  0x0003  CLEAR (Clear flag register)  |
-0x0003 CLEAR (Clear flag register) +
-</code>+
  
 <nspages back2root/programmation -simpleList -h1 -exclude:start -textPages="Back2Root"> <nspages back2root/programmation -simpleList -h1 -exclude:start -textPages="Back2Root">
back2root/programmation/virtual-cpu-v1.1645480916.txt.gz · Dernière modification : 2022/02/21 23:01 de frater