Cours gratuits » Cours informatique » Cours programmation » Cours Assembleur » Architecture des ordinateurs et programmation ASM en PDF

Architecture des ordinateurs et programmation ASM en PDF

Problème à signaler:

Télécharger



★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

Architecture des ordinateurs et programmation ASM en PDF

...

  1. Programme binaire
  • Généré par le compilateur (ou écrit par le programmeur en langage machine)
  • Ensemble d'instructions machine chargées en mémoire centrale lors de l'exécution d'un programme
  • Les instructions sont exécutées séquentiellement

PC (Program Counter) contient l'adresse de l'instruction à exécuter mémoire centrale

-align: justify;">.....

0001011011110110

0001011101101101

0011000100100100

PC

si le programme commence

à l'adresse 5000h PC vaut 5000h

puis 5002h puis 5006h ....

les instructions de contrôle (if else, boucle for, while, ...) modifient la valeur de PC

...

  1. Jeu d'instructions
  • Une instruction est définie par :

– l'opération à réaliser

– les opérandes : registres et cases mémoire modifiés / utilisés par l'instruction

  • Une instruction est représentée par un code binaire qui suit un format d'instruction
  • Quelles instructions ?

– quelles opérations élémentaires ? (différentes utilisations : DSP, multimédia, CPU...)

– quels types de données ? (booléens, flottants, entiers, codes ASCII, BCD)

  • Objectif : assurer les meilleures performances en terme de

– rapidité d'exécution

– taille du code

– facilité d'utilisation (écriture des compilateurs)

  • Tendance : simplicité du jeu d'instructions et du codage (même format d'instruction, même temps d'exécution)

RISC : Reduced Instruction Set Computers

Exemple d'instruction 68000

En binaire : 0010 0010 0011 1001 0000 0000 0000 0000 0000 0000 0010 0000

En hexadécimal : 2239 0000 0020h

La même chose lisible (langage assembleur) :

movel _i,d1

  • movel : transfert de données (move) de type long (l)
  • i : opérande source (une donnée mémoire)
  • d1 : opérande destination (un registre interne)

Le registre interne d1 reçoit le contenu de la variable en mémoire centrale i

  1. Format d'instruction
  • L'instruction est représentée par un code binaire. Ce code binaire est découpé en champs ayant des rôles différents : c'est le format d'instruction.

CODE MODE OP1 OP2

  • Le format d’instruction peut varier selon le type des opérandes
  • Tendance : un format uniforme

Exemple : PROCSI

  • Langage assembleur : <inst> <op-dest> , <op-source>

Exemple : add R1, R4

  • Format d'instruction : 1, 2 ou 3 mots de 16 bits

...

2ème mot : valeur immédiate ou adresse

3ème mot : adresse

Exemple : 000000 0000 0100 0001

...

Exemple : famille xx86 (Pentium)

très grand nombre d'instructions (synonymes) et modes d'adressage

syntaxe: op-code op-dest , op-source

Ex: add cx, bx

add cl, bl

mov 80[bx], ax

  1. Opérandes

4.1. Registres internes

Registres généraux dans une mémoire statique interne, accessible en un top d’horloge processeur

  • moins de traffic mémoire
  • programmes plus rapides
  • code machine plus dense

Achaque fois que c'est possible

4.2. Opérandes mémoire :

la donnée est dans la mémoire centrale accès à un octet (8 bits), mot (16 bits), double mot (32 bits), mot long (64 bits)

Accès à un mot ou double :

adresse paire

Accès à un octet :

adresse paire

ou impaire

Initialisation de variables locales, tableaux

4.3. Modes d'adressage

  • Spécification de la façon de calculer un opérande (objet à accéder)

– constante

– registre

– case mémoire

  • Codé par un champ d'instruction
  • Le codage dépend du nombre de modes possibles et de l'interdépendance entre modes et codes opération
  • Exigences contradictoires :

– Avoir autant de modes d'adressage que possible (facilité de programmation)

– Impact sur la taille des instructions et donc du programme

...

Quel est le code binaire de ADD R5,R7 ?

000000 0001 0011 0101

000000 0000 0111 0101

000000 0000 0101 0111

La variable i est à l'adr esse 9 dans la mémoire

Comment traduire l'instruction java “ i = i + 3”

ADD [9],R3

ADD [9],#3

ADD [9],[3]

Exemple: modes d'adressage de PROCSI suite ...

Représentation Effet Mode adressage Code

ADD R1, [R5] REG[1] <- REG[1] + MEM[REG[5]] registre/indirect 000000 1100 101 001

Additionne le registre 1 et

le mot mémoire dont l'adresse est dans R5

Le résultat va dans le registre 1

ADD R2, 8[R5] REG[2] <- REG[2] + MEM[REG[5]+ 8] registre/déplacement 000000 1001 xxx 010

0000 0000 0000 1000

Additionne le registre 2 et le mot mémoire

Dont l'adresse est le contenu de R5 + 8

Le résultat va dans le registre 2

Si le tableau “int[] T” est à l'adresse 8 dans la mémoire, si le registre R5

contient la valeur 8 alors [R5] correspond à T[0]

Sachant que les “int” en Java sont codés sur 32 bits (soit 4 cases mémoire), à quoi correspond 8[R5] ?

T[5]

T[8]

T[2]

  1. Opérations du jeu d'instruction

5.1. Classes d'opérations

  • arithmétiques et logiques (entier ou flottant)

Calculs

  • chargement / rangement

Transferts de / vers la mémoire

...

5.2. Instructions de contrôle

Rompt l'exécution séquentielle du programme

PC: registre «Program Counter» contient l'adresse de la prochaine instruction à exécuter

  • exécution séquentielle : PC est incrémenté de la taille du format de l’instruction en cours d’exécution  il pointe donc sur la prochaine instruction à exécuter
  • instruction de contrôle : modifie la valeur de PC

 ce n'est donc pas l'instruction suivante qui est exécutée

Exemple PROCSI

8000h : 000000 0000 010 001 ADD R1, R2

8001h : 000000 0100 xxx 001 ADD R1, #24

8002h : 0000000000011000

8003h : 000100 xxxx xxx xxx JMP 8360h

8004h : 1000 0011 0110 0000

8005h : .................................

.......... : ................................

8360h : 000000 0000 110 000 ADD R0, R5

Exemple PROCSI

PC = 8000h

PC <- 8001h + 2

PC <- 8000h + 1 séquentiel

PC <- 8360h contrôle

adresses en hexa dans mémoire instruction

  • Adresse de branchement

– le programme est écrit avec une étiquette symbolique,

– l’adresse relative du branchement est connue lors de la phase de compilation,

– l’adresse réelle du branchement est connue lors du chargement du programme en mémoire centrale (dépend de la machine).

  • Condition de branchement

– test sur le résultat d'une opération arithmétique ou logique

Exemple : résultat nul, résultat positif, retenue …

  • La condition est

– générée par l'unité de calcul de l'unité centrale (ALU)

– stockée dans un registre spécial accessible par la partie contrôle (SR)

-> la partie contrôle prend en entrée la valeur de SR pour savoir si le branchement doit être pris

  1. 23 Instructions assembleur

5.3. Catégories d'instructions de contrôle

  • saut (branchement inconditionnel)

PC <- adresse branchement

goto

  • branchement conditionnel

si condition vraie PC <- adresse branchement

sinon PC inchangé

if then else, while, for

  • appel procédure

"PC_sauv "<- PC

PC <- adresse branchement

  • retour procédure

PC <- "PC_sauv"

Exemple: PROCSI

jmp : “jump”saut non conditionnel

On suppose que le compilateur a associé le registre R1 à la variable x, le registre R2 à la variable y et le registre R3 à la variable z

Quel code PROCSI correspond à : x = x + y;

if (x!=10) x = x + 22;

z++;

add R1,R2

cmp R1,#10

jeq suite

add R1,#22

suite : add R3,#1

add R1,R2

cmp R1,#10

jne suite

add R3,#1

suite : add R1,#22

add R3,#1

add R1,R2

cmp R1,#10

jne suite

add R3,#1

jmp fin

suite : add R1,#22

add R3,#1

fin :

  1. 27

Instructions assembleur

Exemple : une boucle en C et en 68000

_main:

moveq #5,d0

movel d0,_i

L2:

moveq #9,d0

cmpl _i,d0

jge L5

jra L3

L5:

addql #1,_result

L4:

addql #1,_i

jra L2

L3:

rts

int result = 8;

int i=0;

main()

{

 for (i = 5;i < 10; i++)

 result++;

}

d0 vaut 5

i vaut d0

d0 reçoit 9

comparaison de i et d0

saut à L5 si i <= d0

saut à L3

result reçoit result+1

i reçoit i + 1

saut à L2

retour

  1. 28

Instructions assembleur

5.4. Procédures

  • Le code de la procédure utilise les paramètres
  • La valeur des paramètres est connue lors de l'exécution
  • Le nombre d’appels n’est pas toujours connu de façon statique : appels dans un if, appels imbriqués de procédures, procédures récursives, ...

Il faut un mécanisme de saut pour “aller” à la procédure, et il faut un mécanisme pour en revenir

Une pile pour gérer :

- le passage des paramètres

- l'appel de procédure

- le retour de procédure

Pile: zone contiguë de la mémoire centrale un registre spécialisé SP (stack pointer) du CPU contient l'adresse du sommet de pile

  1. 29

Instructions assembleur

Communication entre appelant et procédure

  1. Séquence d'appel

empiler les paramètres

empiler l'adresse de retour (PC courant)

PC prend l'adresse de la procédure

  1. Séquence d'entrée

sauvegarde additionnelle de registres

allocation de pile pour variables locales

  1. Séquence de sortie désalloue les variables locales de la pile met le résultat du calcul dans un endroit accessible par l'appelant

PC prend la valeur du sommet de pile

  1. Séquence de retour l'appelant récupère le résultat et en dispose

Programme appelant

Procédure

Procédure

Programme appelant

Le détail des appels de procédures sera vu en cours d’assembleur ARM

  1. 30

Instructions assembleur

Appel de la procédure dans le programme appelant :

- “push” pour chaque paramètre

- “call <adresse_proc>” : 1. empile l'adresse de retour (PC courant)

  1. modifie PC : PC  <adresse_proc>

Dans la procédure :

- “push” pour sauvegarder les registres modifiés par la procédure

- récupère les paramètres dans la pile : adressage mémoire avec déplacement par rapport à SP

- calcul

- “pop” pour restituer les valeurs initiales des registres

- “ret” : la valeur en sommet de pile est dépilée et placée dans PC

L'exécution continue dans la procédure

L'exécution continue dans le programme appelant

...

5.5. Interruptions

L'exécution normale du programme est interrompue pour raison logicielle ou matérielle

Trois mécanismes de base

  • Interruptions logicielles : appel au noyau du système d'exploitation
  • Conditions d'erreur : division par 0, stack overflow, défaut de page, ...
  • Interruptions matérielles : clic souris, clic clavier, ...

Traitement identique à un appel de procédure mais :

– Sauvegarde du contexte du programme (pas seulement PC actuel)

– La routine d'interruption est stockée dans un endroit protégé de la mémoire

– L'appel de la routine d'interruption est fait par la partie contrôle dans le cas des conditions d'erreur et des interruptions matérielles

– Table d'interruption : fait le lien entre type d'interruption et adresse de la routine associée


200