Cours II - Aoutoul
Cours II - Aoutoul
Cours II - Aoutoul
Introduction à l’Assembleur
1 bit Case
mémoire
Rappels sur la structure des ordinateurs, Cont.
• Nombre de bit et capacité de représentation
– En décimal, une particule = 10 valeurs (0-9)
– n particules = 10n valeurs possibles
– En représentation binaire, une particule= deux
valeurs possibles (0-1)
– n particules (bits) = 2n valeurs possibles (0 – 2n-1)
– Pour représenter un objet prenant X valeurs il faut
Y bits tq: X ≤ 2Y
– Z objets avec X valeurs: Y bits tq X ≤ 2Y Z
NB: impossible de représenter complètement l'espace des nombres entiers,
rationnels, réels, complexes, etc.
Rappels sur la structure des ordinateurs, Cont.
• La base hexadécimale
La base hexadécimale est utilisée pour représenter des données
pour :
des raisons de lisibilité
Faciliter la représentation des données: un nombre binaire de 4
bits peut étre représenté par un chiffre hexadécimal (0, 1, 2, 3, 4,
5, 6, 7, 8, 9, A, B, C, D, E, F) (e.g (1111)B = (F)X = (15)D)
• Sous-parties du contenu d’une case mémoire
Partie haute de 16 bits
Partie basse de 12 bits
F9E8D7C6
Partie haute de 8 bits
Rappels: organisation de la mémoire
• Suite d’instructions-machine,
petit programme en langage machine
chaque instruction-machine est totalement, écrit en binaire avec une
une suite de bits contenant les mémoire découpée en octets
al (AL): registre de
travail en architecture
x86, la lettre ‘L’ veut
dire du poids faible
(Low)
Les Sections en langage assembleur
Trois sections:
.data
.bss
.text
Sections des données: .data
• La section de données (.data) du programme est l'endroit le plus
commun pour définir les éléments de données. La section de
données définit emplacements spécifiques en mémoire où les
objets sont stockés,
• La section de données est déclarée en utilisant la directive .data.
Tous les éléments de données déclarés dans cette section sont
réservées dans la mémoire et peuvent être lues ou écrites par des
instructions dans le programme en langage assembleur.
Section de donnée (.data) Cont.
• Deux objets sont nécessaires pour définir un élément de données dans la
section de données (.data): une étiquette (tag) et une directive (e.g
.byte):
.data
Exemple:
msg: .ascii “Bonjour tout le monde\n”
exemple
mov $10, %al #déplacer la valeur 10 au registre AL
Langage assembleur:
mov A, % eax #déplacer la valeur de A au registre eax
En langage haut niveau:
mul B #multiplie B par la valeur stokée en eax
D = A * B + 10
add $10, %eax #ajouter la valeur 10 à eax
mov %eax, D #déplacer la valeur stockée dans EAX vers D
Types d’opérandes en assembleur
Remarque:
Comme les opérations arithmétiques ne peuvent être réalisées
directement sur des emplacements en mémoire externe, les registres,
qui sont des emplacements de mémoire internes au processeur, sont
utilisés pour ces opérations.
Taille d’un opérande ou d’opération
PF (Parity Flag) indique que le résultat est pair (PF=1) ou impair (PF=0)
CF (Carry Flag) indique une retenue (CF=1) sur les entiers non signés
OF (Overflow indique un débordement (OF=1) sur les entiers signés
Flag)
CF: Ce drapeau prend la valeur 1 si une opération arithmétique génère une retenue
sur le bit le plus significatif (bit de poids fort). Le drapeau est désarmé dans les
autres cas. Ce drapeau indique ainsi une condition de débordement en arithmétique
entière non signée. Il est aussi utilisé pour l'arithmétique en précision multiple.
Flag de retenue CF
Exemples:
• 0b11111111 + 0b1 = 0b00000000, CF = 1
• 0b11111110 + 0b1 = 0b11111111, CF = 0
Remarque: si les opérandes sont des entiers non signes, le résultat
est valide si et seulement si CF =0 et il est invalide si et seulement
si CF = 1
Flag de débordement OF
Exemples:
0b11111111 + 0b1 = 0b00000000, CF=1 et OF=0
Si (0b11111111) est entier non signé donc (255 + 1) est invalide
dans N8 (la valeurs maximale est 28 – 1 = 255 gérée par le
microprocesseur)
Si (0b11111111) est un entier signé donc (-1 + 1) est valide dans
Z8 (la valeurs gérées sont de -128 à 127)
Flag CF et OF, Exemples Cont.
• Exemple 2:
0b00000000 – 0b1 = 0b11111111 avec CF=1, mais OF=0
Exemple 3:
0b10000000 + 0b1 = 0b10000001 avec CF=0 et OF=0
Si (0b10000000) est entier non signé donc (128+ 1) est valide dans
N8 (0 – 255 valeurs)
Si (0b10000000) est un entier signé donc (-128 + 1) est valide dans
Z8 (-128 à 127)
Flag CF et OF, Exemples Cont.
• Exemple 4:
0b10000000 – 0b1 = 0b01111111, CF=0, mais OF =1
Exemple 5:
0b01111111 + 0b1 = 0b10000000, CF=0, mais OF =1
(0b01111111)= 127d donc 127 + 1 est valide en N8 mais invalide
en Z8 (-128 à 127)
Autres opérations arithmétiques
• Soustraction:
Syntaxe: sub source, destination
Où la source est soustraite de la destination avec le résultat
stocké dans la destination
Cette instruction provoque un
double calcul : le processeur fait
simultanément la soustraction une
fois en supposant les données
signées et une fois en les
supposant non signées.
Ainsi, le drapeau OF est levé si un
débordement survient lors de la
soustraction signée et le
drapeau CF est levé si une retenue
survient lors de la soustraction non
signée (résultat négatif)
Autres opérations arithmétiques
• Multiplication:
Syntaxe: mul source
Cette instruction multiplie le contenu de l'accumulateur
EAX (AX, AL suivant la taille de source) avec source. Le
résultat est placé dans l'accumulateur.
• si source est codée sur 1 octet, la multiplication est faite avec AL
et le résultat est codé sur 2 octets dans AX ;
Exemple de multiplication
Multiplication des entiers signés
• Multiplication signée:
Syntaxe: imul source OU imul source, destination
Si l'opérande de cette instruction est codée sur 16 bits, l'entier défini par la paire
de registre DX:AX est divisé par l'opérande, le quotient est stocké dans AX et le
reste dans DX. Dans la pair de registre DX:AX, le poids faible est AX.
Si l'opérande de cette instruction est codée sur 32 bits, l'entier défini par la pair de
registre EDX:EAX est divisé par l'opérande, le quotient est stocké dans EAX et le
reste dans EDX.
Division des entiers non signés, exemple
Incrémentation et décrémentation
• Incrémentation:
Syntaxe: inc opérande
• Décrémentation:
Syntaxe: dec opérande
• branchement inconditionnel
Instruction jmp (sauter)
Elle permet de remplacer le contenu de RIP par une adresse
symbolique (Tag)
Syntaxe: jmp tag
Exemple:
debut: movl $2, %eax # 2 -> eax
jmp suite # on saute l’ instruction suivante
addl $2, %eax # cette instruction
# n'est pas exécutée
suite: movl %eax, %ebx # eax -> %ebx
• Branchements conditionnels
elles testent un ou plusieurs Flags du registre d‘état et en
fonction de leurs valeurs, effectuent le branchement ou
passent a l'instruction suivante, Le branchement est
effectué si la condition est remplie et qui est en fonction
des états des Flags ZF, CF et OF
Syntaxe: jz Tag (si résultat est nul ZF=1)
jnz Tag (si résultat est non nul ZF=0)
jc Tag (saut si retenue CF=1)
jnc Tag (saut si pas de retenue CF=0)
jo Tag (saut si débordement OF=1)
jno Tag (saut si pas de débordement OF=0)
Instructions agissant sur RIP, exemples
Exemple 1
Init: movw $0, %cx # 0 -> cx
Boucle: addw $1, %cx # cx+1 -> cx
jnc Boucle # boucle tant que cx+1
# est valide (de 1 à 65535)
Exemple 2 (peut on remplacer: if else, while do, switch case, for?)
maximum: movq var_a, %rax # a -> rax (q: 64 bits)
movq var_b, %rbx # b -> rbx
subq %rax, %rbx # rbx-rax -> rbx
jc amax # CF=1 => b-a<0 => a>b
bmax: movq var_b, %rax # CF=0 => b-a>=0 =>
# a <= b, on copie
# b dans rax
amax: movq %rax, var_c # max(a,b) -> c
Structures de données
Registres Pointeurs
• Un pointeur est une case mémoire qui contient l'adresse
d'une autre case mémoire.
• La modification du contenu d’une case mémoire peut se fait à
partir du pointeur qui a son adresse (il pointe sur elle)
Exemples de pointeurs:
• RIP est un exemple de registre pointeur qui point sur
l’instruction courante
• RSI (Re-extended source index) et RDI (Re-extended destination index)
sont deux pointeur indiquant la source et la destination (copie
de zone de mémoire)
• RSP (Re_extended Pointer) et RBP (re_extended base pointer) deux
pointeurs pour la gestion de la pile
Registres Pointeurs, Exemples
Introduction
La majorités des ordinateurs peuvent etre
décrits par le schéma suivant bien que la
réalisation peut varier considérablement d’un
modèle à un autre
Organisation générale des ordinateurs
Unité centrale de traitement (CPU)
• à définis spéciaux
• Haute vitesse
• Stockage temporaire
• Situé à l'intérieur de la CPU
• Bit
• Byte
• Word (mot)
Exécution du programme
• Fetch (chercher)
– CU reçoit une instruction
• Décoder
– CU décode l'instruction
• Exécuter
– CU informe la partie appropriée du hardware à réagir
– Le contrôle est transféré à la partie appropriée du
Hardware
– Tâche est effectuée
• Stockage
• Le contrôle est renvoyée à la CU
Comment le CPU exécute les instructions
• Définition: Le temps
nécessaire pour
récupérer, exécuter et
stocker une opération
• Il est composé du:
– temps d'instruction
– temps d'exécution
• L’horloge système a pour Exemple du cycle de machine
rôle la synchronisation
des opérations
Temps d’instruction
Pendant ce temps:
• L'unité de commande (contrôle) déplace les données
de la mémoire aux registres dans l'UAL
– L'UAL exécute des instructions sur ces données
• L'unité de contrôle stocke les résultats des
opérations dans la mémoire ou dans un registre
Horloge du système
• Mémoire à Semi-conducteurs
• RAM et ROM
• Mémoire Flash
Mémoire à Semi-conducteur
• RAM non-volatile
– Utilisé dans les téléphones cellulaires, appareils
photo numériques, et certains ordinateurs de
poche, assistants personnels (PDA)
– vitesse élevée, durée de vie (nombre de fois
d’écriture) et moins de puissance
Mémoire Cache
• C'est Une zone de stockage temporaire
– Accélère le transfert de données dans le système
• Un petit bloc de mémoire à haute vitesse
– Stocke les données et les instructions utilisées plus
fréquemment et plus récemment
• Le microprocesseur cherche ce qu'il faut dans le
cache d'abord
– Le transfert des données de la mémoire cache est
beaucoup plus rapide que de la mémoire ordinaire
– Si ces données ne sont pas dans le Cache, l’unité de
commande les récupère de la mémoire ordinaire
• La performance du système en terme de rapidité dépend
aussi du Cache
Le système des bus
• Passages électriques
parallèles pour transport de
données entre le processeur
et la mémoire
• Largeur de bus
– Le nombre de chemins
électriques pour transporter
des données
– Mesurée en bits
• Vitesse du bus
– Mesurée en mégahertz (MHz)
Le système des bus – Cont.
Largeur de bus
AGP
PSI
ISA USB