Académique Documents
Professionnel Documents
Culture Documents
Assembleur
Dr Didier BASSOLE
dbassole@univ--ouaga.bf
dbassole@univ
dbassole@gmail.com
Programmation en assembleur
Plan
Introduction
I. Microarchitecture du processeur
II.
II. Langage machine
III.
III. Langage assembleur
Conclusion
Données
Unité de traitement binaires
Données
(U.A.L.)
informations
codées en binaire
Ecran
Clavier
10
Didier BASSOLE dbassole@gmail.com Prog_ASM_P_Info_S4
I. Microarchitecture du processeur
Le processeur
Le processeur est le véritable cerveau de l’ordinateur. Toutes les
avancées technologiques se concentrent sur ce composant, qui
travaille toujours plus vite et effectue des opérations de plus en
plus compliquées.
Le jeu d'instructions d'un processeur RISC est plus uniforme. Toutes les
instructions sont codées sur la même taille et toutes s'exécutent dans le
même temps (un cycle d'horloge en général).
Didier BASSOLE dbassole@gmail.com Prog_ASM_P_Info_S4 19
I. Microarchitecture du processeur
Jeux d’instructions des processeurs CISC et RISC
ARM
S/360 (IBM)
PowerPC (Motorola)
VAX (DEC)
MIPS
68xx, 680x0 (Motorola)
PA-RISC (Hewlett-
x86, Pentium (Intel)
Packard)
SPARC
Didier BASSOLE dbassole@gmail.com Prog_ASM_P_Info_S4 21
I. Microarchitecture du processeur
Cycle d’instruction
Un cycle d'instruction est le cycle de fonctionnement de base d'un
ordinateur. Il est le processus par lequel un ordinateur récupère une
instruction de programme à partir de sa mémoire, détermine les actions
que l'instruction exige, et réalise ces actions.
68x00 (Motorola)
1 2
5
3
4 27
Didier BASSOLE dbassole@gmail.com Prog_ASM_P_Info_S4
I. Microarchitecture du processeur
Le processeur x86
x86 : famille de microprocesseurs compatibles avec le jeu
d'instructions de l'Intel 8086
Évolution :
début 80 : 8086, microprocesseur 16 bits;
puis 80286, 80386, 80486, Pentium, etc.;
augmentation de la fréquence d'horloge, et de la largeur des
bus d'adresses et de données;
ajout de nouvelles instructions et registres;
Compatibilité ascendante: un programme écrit dans le langage
machine du 286 peut s'exécuter sur un 386
28
Didier BASSOLE dbassole@gmail.com Prog_ASM_P_Info_S4
Architecture interne du 8086
Ces zones sont très rapide d'accès puisqu'elles sont implantées dans le
microprocesseur lui-même et non dans la memoire vive.
30
Didier BASSOLE dbassole@gmail.com Prog_ASM_P_Info_S4
I. Microarchitecture du processeur
Sur les PC relativement recents, AX, BX, CX, DX ne sont en fait que
des parties basses des registres de 32 bits nommées EAX, EBX,
ECX, EDX.
37
Didier BASSOLE dbassole@gmail.com Prog_ASM_P_Info_S4
I. Microarchitecture du processeur
Les registres de segment
Fichier COM = nom des fichiers de commandes DOS. Le contenu d'un
fichier COM est codé au format binaire et peut contenir jusqu'à 64 Ko de
code.
Les fichiers COM sont également classés comme des fichiers exécutables,
mais contrairement aux fichiers EXE, il n'y a pas de détails sur les
métadonnées ou les en-têtes de fichier joint à un fichier COM.
Le contenu d'un fichier COM se compose généralement de directives ou
de commandes utilisées par les ressources DOS intégrés pour effectuer
certaines opérations.
38
Didier BASSOLE dbassole@gmail.com Prog_ASM_P_Info_S4
I. Microarchitecture du processeur
Les registres de segment
Les valeurs attribuées à ces registres lors du chargement en mémoire d’un fichier
exécutable diffèrent selon que le fichier est un programme COM ou EXE.
40
Didier BASSOLE dbassole@gmail.com Prog_ASM_P_Info_S4
I. Microarchitecture du processeur
TITLE nom ; donner un nom au programme
PILE SEGMENT STACK ; déclaration d’un segment de pile
; dont le nom est pile
..........
..........
PILE ENDS ; fin de la déclaration de la pile
DONNEE SEGMENT ; déclaration d’un segment de données qui va
; contenir les variables
...........
DONNEE ENDS ; fin de la déclaration de données
CODE SEGMENT ; déclaration du segment de code qui va contenir
; le code
Debut: ; étiquette d’indication du point d’entrée du code
.................................
CODE ENDS ; fin de la déclaration du code
END Debut ; fin du point d’entrée du code
Didier BASSOLE dbassole@gmail.com Prog_ASM_P_Info_S4 41
I. Microarchitecture du processeur
Les registres d’offset
- IP (Instruction pointeur): contient l’adresse de l’instruction qui suit celle qui est en
cours d’exécution.
- SI (Source Index): souvent utilisé comme pointeur sur une adresse mémoire (exemple:
MOV AL, [SI]). Il est très utilisée avec les instructions de traitement de chaînes de
caractères.
- SP (Stack pointer): pointe sur le sommet de la pile; son contenu est automatiquement
changé par les instructions PUSH et POP.
La pile
- PUSH: SP <- SP - 2
- POP: SP <- SP + 2
Ainsi, lorsque la pile est vide SP pointe sous la pile (la case mémoire
en-dessous de la base de la pile) car il n'y a pas de case occupée. Un
POP provoquera alors une erreur...
Ainsi pour définir une pile, il s'agit tout d'abord de la déclarer grâce à
la directive SEGMENT stack.
segment_pile ENDS
Afin d'initialiser SP, il faut repérer l'adresse du bas de la pile; c'est le rôle de la ligne
base_pile EQU this word .
Didier BASSOLE dbassole@gmail.com Prog_ASM_P_Info_S4 51
I. Microarchitecture du processeur
Pour le langage machine, les mots sont des suites de bits qui représentent
des instructions ou des données.
Les suites de bits sont organisées par champs pour former les instructions.
Une instruction-
instruction-machine est une suite de bits qui contient toutes les
informations nécessaires à l'exécution de l'instruction.
La représentation du format des instructions est fixée une fois pour toutes
par le jeu d'instructions du processeur.
Avantages :
- Lisibilité du code
- Niveau de langage plus facile à manipuler par rapport au langage machine
La seconde phase de traitement est l’édition des liens c’est-à-dire la liason entre
différents codes machines pour la création de l’exécutable.
.data est utilisée pour les données initialisées. C'est à dire, les
données qui doivent avoir une valeur précise au lancement du
programme.
Nous devons ici déclarer puts en EXTERN car il sera utilisé par notre
programme.
main est déclaré en GLOBAL car il sera appelé par le système : c'est
le point d'entrée du programme (comme en C).
Didier BASSOLE dbassole@gmail.com Prog_ASM_P_Info_S4 72
III. Langage Assembleur
instruction1
instruction2
.....
RET
Etiquette ENDP
C'est l'instruction CALL qui permet l'appel d'une procédure. Elle est
suivie soit d'une adresse 16 bits, désignant la position du début de
la procédure, ou bien du nom de la procédure (celui de l'étiquette
qui précède le mot clé PROC).
Cela paraît simple mais le problème provient du fait que les procédures
peuvent être imbriqués, c'est-à-dire que de saut en saut, le processeur
doit être capable de revenir successivement aux adresses de retour.
; Décrémentation
DEC AX ; AX <- AX - 1
Dec variable ; variable <- variable - 1
; Soustraction
SUB AX, 5 ; AX <- AX – 5
SUB BH, toto ; BH <- BH – toto
SUB toto, CX ; toto <- toto - CX
Opérations courantes
Exemple 1:
1
x=a+b–c Mov AX, a
ADD AX, b
sub AX, c
Mov x, AX
Didier BASSOLE dbassole@gmail.com Prog_ASM_P_Info_S4 90
IV. Intructions de bases en Assembleur
Opérations courantes
Exemple 1:
Code C Assembleur
x=a-b+c ; instruction x = a - b + c
y=d–x Mov AX, a
z=x+y SUB AX, b
ADD AX, c
Mov x, AX
; instruction y = d - x
Mov BX, d
SUB BX, x
Mov y, BX
; instruction z = x +y
Mov tmp, x
ADD tmp, y
Mov z, tmp
91
Didier BASSOLE dbassole@gmail.com Prog_ASM_P_Info_S4
IV. Intructions de bases en Assembleur
if . . . else Assembleur
if (ax ==1 ) If: CMP AX, 1
bx = 10; JNZ Else
else {
bx = 0; Then: MOV BX,10
cx = 10; JMP endif
} Else: MOV BX,0
MOV CX,10
endif: ..............
DEC BX
JMP while
Endwhile:
Didier BASSOLE dbassole@gmail.com Prog_ASM_P_Info_S4 94
IV. Intructions de bases en Assembleur
La boucle do . . . while Assembleur
bx = 10 ; MOV BX,10
do Repeat1: DEC BX
{ CMP BX,0
bx = bx – 1 ; JG Repeat1
} Endrepeat1 :
while(bx
while(bx > 0) ;