Jeu d'instructions du NanoProcesseur

  • Le jeu d’instructions du microprocesseur se limite à 16 instructions.
  • Chaque instruction est codée sur deux octets :
    • Le premier octet contient le code de l’opération proprement dite ;
    • Le deuxième octet contient un pointeur qui donne l’adresse en mémoire d’un éventuel opérande.
  • L’adresse de l’accès courant en RAM est notée PC ("Program Counter")
  • La mémoire adressable par le microprocesseur ne dépasse pas 256 octets (8 bits d’adresse)
  • Les données traitées sont des entiers naturels limités à l’intervalle 0..255 (8 bits de données)
  • L’opérateur de calcul du microprocesseur se limite à quelques opérations logiques et arithmétiques simples (voir tableau ci-dessous). 
  • Le résultat de l’opération effectuée est stocké dans l’accumulateur.
  • Lors d’une modification de l’accumulateur, deux signaux supplémentaires sont générés et mémorisés :
    • Z si ce résultat est nul
    • C si une retenue sortante existe (dans le cas des opérations arithmétiques et de rotation)

Le tableau suivant résume le jeu d’instruction du microprocesseur:

  • représente la valeur de l'accumulateur avant exécution de l'instruction.
  • PC représente la valeur du PC courant.
  • L’expression [AD] représente le contenu de la mémoire à l’adresse AD fournie par le deuxième octet de l’instruction
  • L’expression A[6..0] indique les 7 bits de poids faibles de l'accumulateur.
  • De même, [AD][0] correspond au bit de poids 0 du contenu de la mémoire à l’adresse AD.
Code (décimal) Mnémonique Description Valeur de l'accumulateur A  après exécution de l'instruction Valeur du PC après exécution de l'instruction

0

NOP

ne fait rien !

rien

PC + 2

1

XOR

XOR

A ← A xor [AD]

PC + 2

2

AND

AND

A ← A and [AD]

PC + 2

3

OR

OR

A ← A or [AD]

 PC + 2

4

ADD

Addition sans retenue entrante

A ← A + [AD]

PC + 2

5

ADC

Addition avec retenue entrante

A ← A + [AD] + C_in

PC + 2

6

SUB

soustraction avec retenue entrante

A ← A - [AD]

PC + 2

7

SBC

soustraction avec retenue entrante

A ← A - [AD] - C_in

PC + 2

8

ROL

rotation sur la gauche

{C_out, A} ← {A[7:0], C_in}

PC + 2

9

ROR

rotation sur la droite

{C_out, A} ← {A[0], C_in, A[7:1]};

PC + 2

10

LDA

Load accumulateur from memory

A ← [AD]

PC + 2

11

STA

Store accumulateur to memory

[AD] ← A

PC + 2

12

OUT

positionne le port de sortie

OUT ← [AD]

PC + 2

13

JMP

saut inconditionnel

rien

AD

14

JNC

saut si C = 0

rien

AD si C=0 sinon PC + 2

15

JNZ

saut si Z = 0

rien

AD si Z=0 sinon PC + 2