Академический Документы
Профессиональный Документы
Культура Документы
Pierre-Nicolas Clauss
Laboratoire Lorrain de Recherche en Informatique et ses Applications
12 mars 2008
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
1 / 48
Plan
Introduction
Notions gnrales
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
2 / 48
Introduction
Plan
Introduction Assembleur Machine Processeur Notions gnrales Instructions Mmoire Interruptions Directives Premier programme Registre d'tat Branchements Fonctions
(LORIA) Cours Assembleur 8086 12 mars 2008 3 / 48
pierre-nicolas.clauss@loria.fr
Introduction
Assembleur
Plan
Introduction Assembleur Machine Processeur Notions gnrales Instructions Mmoire Interruptions Directives Premier programme Registre d'tat Branchements Fonctions
(LORIA) Cours Assembleur 8086 12 mars 2008 4 / 48
pierre-nicolas.clauss@loria.fr
Introduction
Assembleur
Usages
Pourquoi faire de l'assembleur ? Ecrire un compilateur Environnements embarqus, micro-controlleurs Systmes temps-rels durs Avantages Meilleure comprhension des langages Meilleure comprhension des machines
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
5 / 48
Introduction
Machine
Plan
Introduction Assembleur Machine Processeur Notions gnrales Instructions Mmoire Interruptions Directives Premier programme Registre d'tat Branchements Fonctions
(LORIA) Cours Assembleur 8086 12 mars 2008 6 / 48
pierre-nicolas.clauss@loria.fr
Introduction
Machine
La machine
Deux fonctions Calculer : rle du (micro)-processeur Stocker : rle de la mmoire Langage spcique Un langage par processeur, appell jeu d'instructions Une rfrence commune : le binaire
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
7 / 48
Introduction
Machine
Syntaxe Binaire : 0b1010 ou 1010b Octal : 012 ou 12o Hexadcimal : 0xA ou 0Ah Usage Masques de bits Permissions Adresses mmoire
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
8 / 48
Introduction
Machine
Positif et ngatifs Les entiers positifs sont stocks en binaire par conversion simple Les entiers ngatifs sont stocks en binaire par complment deux Cette mthode permet des oprations arithmtiques sans corrections Complment deux Le complment deux se calcule en deux tapes Par exemple
On inverse d'abord les bits (complment un) On ajoute 1 au rsultat 13 se note 0000 1101 sur 8 bits -13 se note 1111 0011 sur 8 bits
L'oppos d'un entier est son complment deux. Il se calcule avec le mnemonic neg
pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 9 / 48
Introduction
Processeur
Plan
Introduction Assembleur Machine Processeur Notions gnrales Instructions Mmoire Interruptions Directives Premier programme Registre d'tat Branchements Fonctions
(LORIA) Cours Assembleur 8086 12 mars 2008 10 / 48
pierre-nicolas.clauss@loria.fr
Introduction
Processeur
Registres
Mmoires de calcul Les calculs se dcomposent en oprations lmentaires Ces oprations ont besoin de stocker des rsultats intermdiaires Le processeur contient de petites mmoires appelles registres Registres sur 8086 8 Registres gnraux (16 bits)
cs, ds, es et ss ip et ags
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
11 / 48
Introduction
Processeur
Sous-registres
Dcomposition des registres Les registres A, B, C et D se dcomposent en deux sous-registres de 8 bits chacun
h (partie haute) et l (partie basse). Par exemple, ax se dcompose en ah et al En C, on aurait la dnition suivante :
union { struct { uint8_t al; uint8_t ah; }; uint16_t ax; };
AX
15
AH
8 7
AL
0
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
12 / 48
Notions gnrales
Plan
Introduction Assembleur Machine Processeur Notions gnrales Instructions Mmoire Interruptions Directives Premier programme Registre d'tat Branchements Fonctions
(LORIA) Cours Assembleur 8086 12 mars 2008 13 / 48
pierre-nicolas.clauss@loria.fr
Notions gnrales
Instructions
Plan
Introduction Assembleur Machine Processeur Notions gnrales Instructions Mmoire Interruptions Directives Premier programme Registre d'tat Branchements Fonctions
(LORIA) Cours Assembleur 8086 12 mars 2008 14 / 48
pierre-nicolas.clauss@loria.fr
Notions gnrales
Instructions
Jeu d'instructions
Instructions Les instructions permettent de spcier les oprations eectuer Elles sont donnes au processeur sous la forme d'une chaine binaire En assembleur, on les crit sous forme de mnemonics On utilise un programme d'assemblage pour transformer les mnemonics en binaire La traduction binaire d'un mnemonic est appelle un opcode
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
15 / 48
Notions gnrales
Instructions
Exemples d'instructions
Instructions "load/store" mov dst, src : Place la valeur de src dans dst
mov ax,14
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
16 / 48
Notions gnrales
Instructions
Exemples d'instructions
Instructions de calcul add dst, src : Additionne src et dst et place le rsultat dans dst
add ax,bx ; ax ax + bx
sub dst, src : Soustrait src de dst et place le rsultat dans dst
sub cx,dx ; cx cx - dx
shl dst, src : Dcale dst de src bits vers la gauche et place le rsultat dans dst
shl dx,1 ; dx dx * 2
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
17 / 48
Notions gnrales
Mmoire
Plan
Introduction Assembleur Machine Processeur Notions gnrales Instructions Mmoire Interruptions Directives Premier programme Registre d'tat Branchements Fonctions
(LORIA) Cours Assembleur 8086 12 mars 2008 18 / 48
pierre-nicolas.clauss@loria.fr
Notions gnrales
Mmoire
Accder la mmoire
Structure de la mmoire La mmoire se comporte comme un grand tableau d'octets Accder la mmoire consiste accder une case du tableau en indiquant son indice, appell adresse Un accs mmoire se fait selon une certaine taille : on peut accder plusieurs octets contigus en une seule fois
On peut lire l'octet situ l'adresse 123h On peut crire deux octets situs l'adresse 456h Le premier va dans la case 456h et le deuxime dans la case 457h
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
19 / 48
Notions gnrales
Mmoire
Granularit
Endianness Supposons qu'on veuille stocker l'entier A035h dans la mmoire, on a deux possibilits
Stocker d'abord l'octet A0h, puis l'octet 35h la suite, c'est le mode big-endian Stocker d'abord l'octet 35h, puis l'octet A0h la suite, c'est le mode little-endian
Le 8086 et ses successeurs sont little-endian Le Motorola 68000 et le PowerPC sont big-endian
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
20 / 48
Notions gnrales
Mmoire
Limitations 16 bits
Adressabilit On donne l'adresse avec un registre Les registres font 16 bits, donc on ne peut accder qu' 216 = 65536 = 64 Ko de mmoire Pour accder plus de mmoire, on dcoupe la mmoire en segments de 64 Ko et on choisit son segment avec un registre de segment
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
21 / 48
Notions gnrales
Mmoire
Segmentation
Mmoire et segments Le 8086 accepte jusqu' 1 Mo de mmoire. On l'adresse l'aide d'une paire de registres :
Un registre de segment, dont la valeur est appelle base ou segment. Un registre gnral ou une constante, dont la valeur est appelle dplacement ou oset. L'adresse cs : ip correspond l'octet numro cs 16 + ip
CS :
15 0 15 0
IP
20
On a donc une adresse sur 20 bits, qui permet d'accder 220 = 1 Mo de mmoire, par blocs de 64 Ko
Ce mcanisme s'appelle la segmentation en mode rel tout instant, l'adresse cs : ip pointe sur la prochaine instruction excuter
pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 22 / 48
Notions gnrales
Mmoire
Mthodes d'accs aux donnes Adressage immdiat : l'oprande est une constante
mov ah,10h ; => Opcode B410
Adressage direct : l'oprande est une case mmoire (registre ds par dfaut)
mov al,[10h] ; <=> mov al,[ds:10h] => Opcode A01000 mov ax,[es:10h] ; => Opcode 26A11000
Adressage bas : l'oprande est une case mmoire dont l'adresse est donne par bx (avec ds par dfaut) ou bp (avec ss par dfaut)
mov ah,[bx] ; <=> mov ah,[ds:bx] => Opcode 8A27 mov al,[bp] ; <=> mov al,[ss:bp] => Opcode 8A4600
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
23 / 48
Notions gnrales
Mmoire
Mthodes d'accs aux donnes Adressage index : l'oprande est une case mmoire dont l'adresse est donne par si ou di (avec ds par dfaut, sauf mnemonic spcique)
mov ah,[si] ; <=> mov ah,[ds:si] => Opcode 8A24
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
24 / 48
Notions gnrales
Mmoire
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
25 / 48
Notions gnrales
Mmoire
La pile
Manipulation de la pile La pile est une zone de mmoire Son sommet est la case mmoire l'adresse ss : sp On empile une valeur avec push et on dpile avec pop
push ax ; => Opcode 50 ; <=> sub sp,2 ; mov [ss:sp],ax pop ax ; => Opcode 58 ; <=> mov ax,[ss:sp] ; add sp,2
Les donnes ne sont pas eacs aprs un pop Un push crase les donnes prcdemment dans la pile
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
26 / 48
Notions gnrales
Interruptions
Plan
Introduction Assembleur Machine Processeur Notions gnrales Instructions Mmoire Interruptions Directives Premier programme Registre d'tat Branchements Fonctions
(LORIA) Cours Assembleur 8086 12 mars 2008 27 / 48
pierre-nicolas.clauss@loria.fr
Notions gnrales
Interruptions
Interruptions
Fonctions La plupart des machines disposent d'un mcanisme pour indiquer les vnement extrieurs (clavier, disque dur, . . .), appell interruptions Leur fonctionnement consiste interrompre le programme en cours d'excution et de lancer un autre bout de code (appell gestionnaire) pour grer l'vnement Sur le 8086, les interruptions sont spcies par un numro sur 8 bits : il y'a donc 256 interruptions direntes La programme excuter lors d'une interruption est donne par une adresse segment : oset Une table des adresses des interruptions se situent dans la mmoire entre les adresses 0 et 1024 (inclus) Le numro d'interruption sert d'indice dans cette table pour trouver l'adresse du programme lancer
pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 28 / 48
Notions gnrales
Interruptions
Interruptions
Schma d'excution
Execution 0000:0000
0000:0024 Segment
Offset
15
0 15
Transparence Les interruptions matrielles sont toujours transparentes (sauvegarde des registres)
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
29 / 48
Notions gnrales
Interruptions
Interruptions
Schma d'excution
Execution Interruption clavier (9h) 0000:0000
0000:0024 Segment
Offset
15
0 15
Transparence Les interruptions matrielles sont toujours transparentes (sauvegarde des registres)
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
29 / 48
Notions gnrales
Interruptions
Interruptions
Schma d'excution
Execution Interruption clavier (9h) 0000:0000 Sauvegarde de CS:IP sur la pile FLAGS
0000:0024 Segment
Offset
15
0 15
Transparence Les interruptions matrielles sont toujours transparentes (sauvegarde des registres)
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
29 / 48
Notions gnrales
Interruptions
Interruptions
Schma d'excution
Execution Interruption clavier (9h) 0000:0000 Sauvegarde de CS:IP sur la pile FLAGS Chargement dans CS:IP
15 0 15 0
0000:0024 Segment
Offset
Transparence Les interruptions matrielles sont toujours transparentes (sauvegarde des registres)
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
29 / 48
Notions gnrales
Interruptions
Interruptions
Schma d'excution
Execution Interruption clavier (9h) 0000:0000 Sauvegarde de CS:IP sur la pile FLAGS Chargement dans CS:IP
15 0 15 0
0000:0024 Segment
Offset
Execution de linterruption
Transparence Les interruptions matrielles sont toujours transparentes (sauvegarde des registres)
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
29 / 48
Notions gnrales
Interruptions
Interruptions
Schma d'excution
Execution Interruption clavier (9h) 0000:0000 Sauvegarde de CS:IP sur la pile FLAGS Chargement dans CS:IP
15 0 15 0
0000:0024 Segment
Offset
Execution de linterruption
Transparence Les interruptions matrielles sont toujours transparentes (sauvegarde des registres)
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
29 / 48
Notions gnrales
Interruptions
Interruptions
Schma d'excution
Execution Interruption clavier (9h) 0000:0000 Sauvegarde de CS:IP sur la pile FLAGS Chargement dans CS:IP
15 0 15 0
0000:0024 Segment
Offset
Execution de linterruption
Transparence Les interruptions matrielles sont toujours transparentes (sauvegarde des registres)
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
29 / 48
Notions gnrales
Interruptions
Interruptions
Schma d'excution
Execution Interruption clavier (9h) 0000:0000 Sauvegarde de CS:IP sur la pile FLAGS Chargement dans CS:IP
15 0 15 0
0000:0024 Segment
Offset
Execution de linterruption
Transparence Les interruptions matrielles sont toujours transparentes (sauvegarde des registres)
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
29 / 48
Notions gnrales
Interruptions
Interruptions
Gestionnaires par dfaut Le BIOS met en place les adresses pour les 32 premires interruptions, qui sont des interruptions gnres par le matriel Le DOS met en place les adresses pour les 32 interruptions suivantes, qui sont des fonctions qu'il propose aux programmes Les interruptions au-del de la 64me (incluse) sont libres pour le programmeur Pour appeller une interruption manuellement, on utilise le mnemonic int avec comme seule oprande le numro de l'interruption
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
30 / 48
Notions gnrales
Directives
Plan
Introduction Assembleur Machine Processeur Notions gnrales Instructions Mmoire Interruptions Directives Premier programme Registre d'tat Branchements Fonctions
(LORIA) Cours Assembleur 8086 12 mars 2008 31 / 48
pierre-nicolas.clauss@loria.fr
Notions gnrales
Directives
Directive
Commandes spciales Les directives sont des commandes spciales du programme d'assemblage et ne sont pas des mnemonics. Pour le programme fasm, les principales directives regroupent :
format qui indique le format du chier executable gnrer use16 qui indique que l'on souhaite compiler du code 16 bits org qui indique la valeur de dpart de ip
Directives communes db n : insre l'octet n cet endroit dw n : insre le mot (= 2 octets) n cet endroit rb n : rserve la place pour n octets rw n : rserve la place pour n mots Remarque : db fonctionne aussi avec une chane de caractres et prend les codes ASCII dans ce cas
pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 32 / 48
Notions gnrales
Premier programme
Plan
Introduction Assembleur Machine Processeur Notions gnrales Instructions Mmoire Interruptions Directives Premier programme Registre d'tat Branchements Fonctions
(LORIA) Cours Assembleur 8086 12 mars 2008 33 / 48
pierre-nicolas.clauss@loria.fr
Notions gnrales
Premier programme
Hello world
Code source
; Version fasm, syntaxe "intel" format binary use16 org 100h mov ah,09h ; Fonction 09h mov dx,message ; Paramtre: dx recoit l'adresse de message int 021h ; Appeller la fonction int 020h ; Appeller la fonction
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
34 / 48
Notions gnrales
Registre d'tat
Plan
Introduction Assembleur Machine Processeur Notions gnrales Instructions Mmoire Interruptions Directives Premier programme Registre d'tat Branchements Fonctions
(LORIA) Cours Assembleur 8086 12 mars 2008 35 / 48
pierre-nicolas.clauss@loria.fr
Notions gnrales
Registre d'tat
Registre ags La plupart des oprations de calculs donnent des informations sur le rsultat dans le registre spcial ags Les informations possibles sont :
CF : 1 si le rsultat a donn lieu une retenue PF : 1 si l'octet de poids faible du rsultat un nombre pair de 1 AF : 1 si le rsultat a donn lieu une retenue sur le 3eme bit ZF : 1 si le rsultat est zro SF : 1 si le rsultat est ngatif IF : 1 si les interruptions peuvent arriver DF : 0 si la direction est incrmente, 1 si elle est dcrmente OF : 1 si le rsultat ne tient pas dans la destination
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
36 / 48
Notions gnrales
Branchements
Plan
Introduction Assembleur Machine Processeur Notions gnrales Instructions Mmoire Interruptions Directives Premier programme Registre d'tat Branchements Fonctions
(LORIA) Cours Assembleur 8086 12 mars 2008 37 / 48
pierre-nicolas.clauss@loria.fr
Notions gnrales
Branchements
Branchements
Slectionner du code En C, on peut utiliser des structures de contrle type if, while ou for pour contrler l'excution du code En assembleur, la prochaine instruction est toujours donne par cs : ip Pour accder une autre partie du code, on utilise des branchements (ou goto)
mon_code: ; On fait des choses ici jmp mon_code ; On retourne l'tiquette "mon_code"
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
38 / 48
Notions gnrales
Branchements
Branchements conditionnels
Tester des indicateurs Le registre ags contient des indicateurs qui peuvent tre tests et s'ils sont mis (ou teints), on peut eecteur un saut C'est la mthode des branchements conditionnels
mon_code: ; On fait des choses ici cmp ax, 0 ; On effectue une comparaison jz mon_code ; On saute mon_code si le rsultat est zro
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
39 / 48
Notions gnrales
Fonctions
Plan
Introduction Assembleur Machine Processeur Notions gnrales Instructions Mmoire Interruptions Directives Premier programme Registre d'tat Branchements Fonctions
(LORIA) Cours Assembleur 8086 12 mars 2008 40 / 48
pierre-nicolas.clauss@loria.fr
Notions gnrales
Fonctions
Fonctions
Appel On dcoupe le code en fonctions pour simplier la lecture et la maintenance du code Pour crire une fonction en assembleur, il faut savoir comment l'appeller et comment lui passer des arguments L'appel de fonction se fait avec le mnemonic call suivi de l'adresse de la fonction
Si l'adresse est sur 16 bits, on dit que c'est un call near (i.e. dans le mme segment) Si l'adresse est sur 16 : 16 bits, on dit que c'est un call far (i.e. dans un autre segment)
Le mnemonic sauvegarde ip sur la pile, c'est l'adresse de retour Pour un far call, l'instruction sauvegarde cs sur la pile (avant ip)
pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 41 / 48
Notions gnrales
Fonctions
Fonctions
Retour la n d'une fonction, on utilise le mnemonic ret, qui restaure ip depuis la pile Pour faire un retour depuis une fonction appelle en far call, il faut utilier retf, qui restaure aussi cs depuis la pile Pour viter tout problme, il est impratif que la pile soit dans le mme tat avant de faire un ret ou un retf qu'au dbut de la fonction
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
42 / 48
Notions gnrales
Fonctions
Fonctions
Arguments Il existe plusieurs mthodes pour passer des arguments une fonction Le choix de la mthode dpend d'une convention entre appellant et appell Passage par registre La convention spcie les arguments que doivent contenir les registres Elle est utilise par les interruptions Avantages Inconvnients
Rapide l'excution Simple programmer
Il n'y a que 8 registres utilisables Il faut sauvegarder les registres avant chaque appel
(LORIA) Cours Assembleur 8086 12 mars 2008 43 / 48
pierre-nicolas.clauss@loria.fr
Notions gnrales
Fonctions
Fonctions
Passage par la pile Cette convention consiste empiler les arguments sur la pile avant l'appel La fonction rcupre les arguments sur la pile Avantages
On peut utiliser plus d'arguments Meilleur interface avec d'autres langages Plus facile d'appeller en cascade Plus dicile mettre en oeuvre Moins rapide l'excution
Inconvnients
pierre-nicolas.clauss@loria.fr
44 / 48
Notions gnrales
Fonctions
Fonctions
Valeur de retour Les valeurs de retour sont aussi soumises un choix de convention Les mme conventions que pour le passage de paramtre s'appliquent Le retour sur la pile est beaucoup plus complexe que le retour par les registres
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
45 / 48
Notions gnrales
Fonctions
Exemple de fonction
Somme Comme exemple, prenons une fonction deux arguments a et b et qui retourne leur moyenne
int moyenne (int a, int b) { return (a + b) / 2; }
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
46 / 48
Notions gnrales
Fonctions
Exemple de fonction
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
47 / 48
Notions gnrales
Fonctions
Exemple de fonction
Memoire
SS:SP
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
48 / 48
Notions gnrales
Fonctions
Exemple de fonction
Memoire
SS:SP
12 6
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
48 / 48
Notions gnrales
Fonctions
Exemple de fonction
Memoire
SS:SP
IP 12 6
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
48 / 48
Notions gnrales
Fonctions
Exemple de fonction
Memoire SS:SP BP IP 12 6
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
48 / 48
Notions gnrales
Fonctions
Exemple de fonction
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
48 / 48
Notions gnrales
Fonctions
Exemple de fonction
Memoire BX SS:SP BP IP 12 6
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
48 / 48
Notions gnrales
Fonctions
Exemple de fonction
Memoire BX BP SS:SP IP 12 6
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
48 / 48
Notions gnrales
Fonctions
Exemple de fonction
Memoire BX BP SS:SP IP 12 6
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
48 / 48
Notions gnrales
Fonctions
Exemple de fonction
Memoire BX BP IP 12 6 SS:SP
pierre-nicolas.clauss@loria.fr
(LORIA)
12 mars 2008
48 / 48