Le jeu d’instructions

Définition

Jeu d’instructions

Le jeu d’instructions d’un processeur précise

Eléments communs

On trouve dans à peu près tous les processeurs :

Exemples : RISC

RISC = Reduced Instruction Set Computing

Dans le simulateur https://peterhigginson.co.uk/RISC/V2.php

Instruction machine

Définition

Une instruction machine contient

Cette instruction est représentée par une séquence de bits, contenant une information sur l’instruction à faire (opcode) et des opérandes

Selon l’architecture du processeur, les instructions sont plus ou moins nombreuses et ont des fonctions plus ou moins étendues.

Exemples :

Pour plus d’infos : fr.wikipedia.org/wiki/Jeu_d’instructions

Le jeu d’instructions x86

Historiquement :

Détails : fr.wikipedia.org/wiki/X86

et évolution du jeu d’instruction : fr.wikipedia.org/wiki/Jeu_d’instructions_x86

Exemple

Dans le jeu d’instruction RISC16,

0010101011111111 = placer la valeur 0xFF dans le registre R2

Pas très lisible….

Programme en langage machine (assembleur)

Principe

Les instructions sont écrites dans un langage “humain”, et traduites ensuite en code binaire par le compilateur.

Exemple 1:

        00101   010     11111111
        MOV      R2,        #255

Exemple 2:

// Addition de deux nombres
        INP R0,2
        INP R1,2
        ADD R2,R1,R0
        OUT R2,4
        HLT

traduit par

0111000100000010
0111000100010010
0110000010001000
0111000110100100
0000000000000000

Jeu d’instruction RISC16

Jeu d’instruction correspondant au simulateur :

https://www.peterhigginson.co.uk/RISC/instruction_set_V2.pdf

Types d’instructions

Uniquement celles que nous allons utiliser :

Adresses mémoire, labels

Les accès en mémoire se font en utilisant une adresse; cette adresse peut être exprimée

Exercices

Programme 1

        INP R0
        INP R1
        ADD R2,R1,R0
        OUT R2
        HLT

Programme 2

        LDR R0, .dn
        LDR R1, .da
.l1     ADD R1, R1
        SUB R0, #1
        BPL .l1
        STR R1, .dres
        OUT R1
        HLT
.dn     DAT 5
.da     DAT 4
.dres   DAT

Programme 3

        MOV R1, #5
        MOV R2, #65
        LDR R3, .data

.loop   STR R2, 0(R3)
        ADD R2, #1
        ADD R3, #1
        SUB R1, #1
        BPL .loop
        HLT
.data   DAT .data

Exercice 1

        LDR R0, .di
        MOV R1, #42
        LDR R2, .ds
.l1     ADD R1, R0
        STR R1, 2(R2)
        ADD R0, #1
        STR R0, .di
        ADD R2, #1
        CMP R0, #6
        BLE .l1
        HLT
.di     DAT 0
.ds     DAT .ds

BLE : branche if lower or equal du CMP du dessus (si R0 <= 6)

Exercice 2

        INP R0, 2
        INP R1, 2
        LDR R2, .dres
.l1     ADD R0, R0
        STR R0, 1(R2)
        ADD R2, #1
        SUB R1, #1
        BPL .l1
        STR R0, .dres
        OUT R0, 4
        HLT
.dres   DAT

Exercice 3

// Tester avec différentes valeurs
// en utilisant INP R0, 2
        MOV R0, #129
        STR R0, .dfnd
        LDR R1, .dlft
        LDR R2, .drgt
.centr  ADD R3, R1, R2
        LSR R3, #1
        CMP R3, R0
        BEQ .equal
        BHI .great
.lower  MOV R1, R3
        BRA .centr
.great  MOV R2, R3
        BRA .centr
.equal  LDR R3, .dres
        HLT
.dlft   DAT 0
.drgt   DAT 1000
.dcnt   DAT
.dfnd   DAT
.dres   DAT