Cours Assembleur 8086



Documents pareils
Programmation assembleur : aperçu

Ordinateurs, Structure et Applications

Conception de circuits numériques et architecture des ordinateurs

Assembleur i8086. Philippe Preux IUT Informatique du Littoral. Année universitaire 95 96

Logiciel de base. Première année ENSIMAG

Structure d un programme

Exécution des instructions machine

Architecture des ordinateurs

Compilation (INF 564)

Architecture des ordinateurs : Programmation des processeurs avec l'environnement «y86» (INF155)

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Architecture des ordinateurs

Assembleur. Faculté I&C, André Maurer, Claude Petitpierre

Rappels d architecture

La mémoire. Un ordinateur. L'octet. Le bit

Cours Informatique 1. Monsieur SADOUNI Salheddine

Département informatique de l université d Angers

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION

Licence Sciences et Technologies Examen janvier 2010

IV- Comment fonctionne un ordinateur?

TD Architecture des ordinateurs. Jean-Luc Dekeyser

1 Architecture du cœur ARM Cortex M3. Le cœur ARM Cortex M3 sera présenté en classe à partir des éléments suivants :

Base de l'informatique. Généralité et Architecture Le système d'exploitation Les logiciels Le réseau et l'extérieur (WEB)

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Programmation C. Apprendre à développer des programmes simples dans le langage C

Mathématiques appliquées à l informatique

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.


Algorithmique et Programmation, IMA

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Principe de fonctionnement des périphériques des ordinateurs en vue de la programmation. Patrick Cégielski

3. Structure des ordinateurs. 3.1 L' Unité Centrale (UC) ou processeur (Central Processing Unit CPU)

Traduction binaire dynamique de l extension SIMD Néon de l ARMv7 dans Qemu

Chapitre 1 I:\ Soyez courageux!

Programmation C++ (débutant)/instructions for, while et do...while

Contraintes, particularités. 1. Généralités Gestion de la mémoire a. Type des variables et constantes... 2

UE Programmation Impérative Licence 2ème Année

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Architecture Matérielle et Logicielle (LIF6) Cahier d'exercices, automne 2014

La programmation des PIC en C. Les fonctions, les interruptions.

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Informatique Générale

Représentation d un entier en base b

ACTIVITÉ DE PROGRAMMATION

Les failles Format String

Résumé Génération de code Le code intermédiaire

Une version javascript sera disponible directement dans le cours prochainement.

Les chaînes de caractères

Gestion mémoire et Représentation intermédiaire

Bases de programmation. Cours 5. Structurer les données

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

V- Manipulations de nombres en binaire

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Analyse de sécurité de logiciels système par typage statique

Installation de Windows 2000 Serveur

Partie 7 : Gestion de la mémoire

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

4. Initiation à l'assembleur

Microprocesseur + Logiciel

Initiation à la programmation en Python

I. Introduction aux fonctions : les fonctions standards

Codage d information. Codage d information : -Définition-

Plan du cours. Historique du langage Nouveautés de Java 7

Conventions d écriture et outils de mise au point

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

PIC : COURS ASSEMBLEUR

2 Comment fonctionne un ordinateur, dans les grandes lignes

Initiation à la sécurité

Ordinateurs, Structure et Applications

Architecture des ordinateurs Introduction à l informatique

CM2 L architecture MIPS32

Jeu d instructions NIOS II

Cours 1 : Qu est-ce que la programmation?

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Chapitre VI- La validation de la composition.

Le langage C. Séance n 4

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Introduction au langage C

GPA770 Microélectronique appliquée Exercices série A

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Introduction à MATLAB R

Plan du Travail. 2014/2015 Cours TIC - 1ère année MI 30

PARAGON Disk Wiper. Guide de l utilisateur. Paragon Technology GmbH, System Programmierung. Copyright Paragon Technology GmbH

NOTIONS DE RESEAUX INFORMATIQUES

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

CONFIGURATION DE L AUTOMATE SIEMENS

TP a Notions de base sur le découpage en sous-réseaux

Cours d Algorithmique et de Langage C v 3.0

Certificat Informatique et internet Niveau 1 TD D1. Domaine 1 : Travailler dans un environnement numérique évolutif. 1. Généralités : Filière

ASR1 TD7 : Un microprocesseur RISC 16 bits

Cours d initiation à la programmation en C++ Johann Cuenin

Transcription:

Cours Assembleur 8086 Pierre-Nicolas Clauss Laboratoire Lorrain de Recherche en Informatique et ses Applications 12 mars 2008 pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 1 / 48

Plan 1 Introduction 2 pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 2 / 48

Introduction Plan 1 Introduction Assembleur Machine Processeur 2 Instructions Mémoire Interruptions Directives Premier programme Registre d'état Branchements Fonctions pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 3 / 48

Introduction Assembleur Plan 1 Introduction Assembleur Machine Processeur 2 Instructions Mémoire Interruptions Directives Premier programme Registre d'état Branchements Fonctions pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 4 / 48

Usages Introduction Assembleur Pourquoi faire de l'assembleur? Ecrire un compilateur Environnements embarqués, micro-controlleurs Systèmes temps-réels durs Avantages Meilleure compréhension des langages Meilleure compréhension des machines pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 5 / 48

Introduction Machine Plan 1 Introduction Assembleur Machine Processeur 2 Instructions Mémoire Interruptions Directives Premier programme Registre d'état Branchements Fonctions pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 6 / 48

La machine Introduction Machine Deux fonctions Calculer : rôle du (micro)-processeur Stocker : rôle de la mémoire Langage spécique Un langage par processeur, appellé jeu d'instructions Une référence commune : le binaire pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 7 / 48

Introduction Machine Parler binaire, octal et hexadécimal Syntaxe Binaire : 0b1010 ou 1010b Octal : 012 ou 12o Hexadécimal : 0xA ou 0Ah Usage Masques de bits Permissions Adresses mémoire pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 8 / 48

Notation des entiers Introduction Machine Positif et négatifs Les entiers positifs sont stockés en binaire par conversion simple Les entiers négatifs sont stockés en binaire par complément à deux Cette méthode permet des opérations arithmétiques sans corrections Complément à deux Le complément à deux se calcule en deux étapes On inverse d'abord les bits (complément à un) On ajoute 1 au résultat Par exemple 13 se note 0000 1101 sur 8 bits -13 se note 1111 0011 sur 8 bits L'opposé d'un entier est son complément à 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 1 Introduction Assembleur Machine Processeur 2 Instructions Mémoire Interruptions Directives Premier programme Registre d'état Branchements Fonctions pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 10 / 48

Registres Introduction Processeur Mémoires de calcul Les calculs se décomposent en opérations élémentaires Ces opérations ont besoin de stocker des résultats intermédiaires Le processeur contient de petites mémoires appellées registres Registres sur 8086 8 Registres généraux (16 bits) ax, bx, cx, dx, si, di, bp et sp 4 Registres de segments (16 bits) cs, ds, es et ss 2 Registres spéciaux (16 bits) ip et ags pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 11 / 48

Sous-registres Introduction Processeur Décomposition des registres Les registres A, B, C et D se décomposent en deux sous-registres de 8 bits chacun h (partie haute) et l (partie basse). Par exemple, ax se décompose en ah et al En C, on aurait la dénition suivante : union { struct { uint8_t al; uint8_t ah; }; uint16_t ax; }; Et à tout instant : ax = ah * 256 + al AX 15 AH AL 87 0 pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 12 / 48

Plan 1 Introduction Assembleur Machine Processeur 2 Instructions Mémoire Interruptions Directives Premier programme Registre d'état Branchements Fonctions pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 13 / 48

Instructions Plan 1 Introduction Assembleur Machine Processeur 2 Instructions Mémoire Interruptions Directives Premier programme Registre d'état Branchements Fonctions pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 14 / 48

Jeu d'instructions Instructions Instructions Les instructions permettent de spécier les opérations à eectuer Elles sont données 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 appellée un opcode pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 15 / 48

Exemples d'instructions Instructions Instructions "load/store" mov dst, src : Place la valeur de src dans dst mov ax,14 push src : Place la valeur de src sur la pile push ax pop dst : Place la valeur au sommet de la pile dans dst pop bx pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 16 / 48

Exemples d'instructions Instructions Instructions de calcul add dst, src : Additionne src et dst et place le résultat dans dst add ax,bx ; ax ax + bx sub dst, src : Soustrait src de dst et place le résultat dans dst sub cx,dx ; cx cx - dx shl dst, src : Décale dst de src bits vers la gauche et place le résultat dans dst shl dx,1 ; dx dx * 2 pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 17 / 48

Mémoire Plan 1 Introduction Assembleur Machine Processeur 2 Instructions Mémoire Interruptions Directives Premier programme Registre d'état Branchements Fonctions pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 18 / 48

Accéder à la mémoire Mémoire Structure de la mémoire La mémoire se comporte comme un grand tableau d'octets Accéder à la mémoire consiste à accéder à une case du tableau en indiquant son indice, appellé adresse Un accès mémoire se fait selon une certaine taille : on peut accéder à plusieurs octets contiguës en une seule fois On peut lire l'octet situé à l'adresse 123h On peut écrire deux octets situés à l'adresse 456h Le premier va dans la case 456h et le deuxième dans la case 457h pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 19 / 48

Granularité Mémoire Endianness Supposons qu'on veuille stocker l'entier A035h dans la mémoire, on a deux possibilités 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) Cours Assembleur 8086 12 mars 2008 20 / 48

Limitations 16 bits Mémoire Adressabilité On donne l'adresse avec un registre Les registres font 16 bits, donc on ne peut accéder qu'à 2 16 = 65536 = 64 Ko de mémoire Pour accéder à plus de mémoire, on découpe la mémoire en segments de 64 Ko et on choisit son segment avec un registre de segment pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 21 / 48

Segmentation Mémoire Mémoire et segments Le 8086 accepte jusqu'à 1 Mo de mémoire. On l'adresse à l'aide d'une paire de registres : Un registre de segment, dont la valeur est appellée base ou segment. Un registre général ou une constante, dont la valeur est appellée déplacement ou oset. L'adresse cs : ip correspond à l'octet numéro cs 16 + ip CS : IP 15 0 15 0 20 0 On a donc une adresse sur 20 bits, qui permet d'accéder à 2 20 = 1 Mo de mémoire, par blocs de 64 Ko Ce mécanisme s'appelle la segmentation en mode réel À tout instant, l'adresse cs : ip pointe sur la prochaine instruction à exécuter pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 22 / 48

Les modes d'adressage Mémoire Méthodes d'accès aux données Adressage immédiat : l'opérande est une constante mov ah,10h ; => Opcode B410 Adressage direct : l'opérande est une case mémoire (registre ds par défaut) mov al,[10h] ; <=> mov al,[ds:10h] => Opcode A01000 mov ax,[es:10h] ; => Opcode 26A11000 Adressage basé : l'opérande est une case mémoire dont l'adresse est donnée par bx (avec ds par défaut) ou bp (avec ss par défaut) mov ah,[bx] ; <=> mov ah,[ds:bx] => Opcode 8A27 mov al,[bp] ; <=> mov al,[ss:bp] => Opcode 8A4600 pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 23 / 48

Les modes d'adressage Mémoire Méthodes d'accès aux données Adressage indexé : l'opérande est une case mémoire dont l'adresse est donnée par si ou di (avec ds par défaut, sauf mnemonic spécique) mov ah,[si] ; <=> mov ah,[ds:si] => Opcode 8A24 Adressage basé et indexé mov ah,[bx+di] ; <=> mov ah,[ds:bx+di] => Opcode 8A21 mov [bp+si],ah ; <=> mov [ss:bp+si],ah => Opcode 8822 Adressage basé avec déplacement mov ah,[bx+123h] ; <=> mov ah,[ds:bx+123h] => Opcode 8AA72301 pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 24 / 48

Les modes d'adressage Mémoire Méthodes d'accès aux données Adressage indexé avec déplacement mov ah,[di+123h] ; <=> mov ah,[ds:di+123h] => Opcode 8AA52301 Adressage basé et indexé avec déplacement mov ah,[bx+si+123h] ; <=> mov ah,[ds:bx+si+123h] => Opcode 8AA02301 pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 25 / 48

La pile Mémoire Manipulation de la pile La pile est une zone de mémoire Son sommet est la case mémoire à l'adresse ss : sp On empile une valeur avec push et on dépile 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 données ne sont pas eacés après un pop Un push écrase les données précédemment dans la pile pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 26 / 48

Interruptions Plan 1 Introduction Assembleur Machine Processeur 2 Instructions Mémoire Interruptions Directives Premier programme Registre d'état Branchements Fonctions pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 27 / 48

Interruptions Interruptions Fonctions La plupart des machines disposent d'un mécanisme pour indiquer les évènement extérieurs (clavier, disque dur,...), appellé interruptions Leur fonctionnement consiste à interrompre le programme en cours d'exécution et de lancer un autre bout de code (appellé gestionnaire) pour gérer l'évènement Sur le 8086, les interruptions sont spéciées par un numéro sur 8 bits : il y'a donc 256 interruptions diérentes La programme à exécuter lors d'une interruption est donnée par une adresse segment : oset Une table des adresses des interruptions se situent dans la mémoire entre les adresses 0 et 1024 (inclus) Le numéro 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

Interruptions Interruptions Schéma d'exécution Execution 0000:0000 0000:0024 Segment Offset 15 015 0 Transparence Les interruptions matérielles sont toujours transparentes (sauvegarde des registres) pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 29 / 48

Interruptions Interruptions Schéma d'exécution 0000:0000 Execution Interruption clavier (9h) 0000:0024 Segment Offset 15 015 0 Transparence Les interruptions matérielles sont toujours transparentes (sauvegarde des registres) pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 29 / 48

Interruptions Interruptions Schéma d'exécution 0000:0000 Execution Interruption clavier (9h) 0000:0024 Segment Offset Sauvegarde de CS:IP sur la pile FLAGS 15 015 0 Transparence Les interruptions matérielles sont toujours transparentes (sauvegarde des registres) pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 29 / 48

Interruptions Interruptions Schéma d'exécution 0000:0000 Execution Interruption clavier (9h) 0000:0024 Segment Offset Sauvegarde de CS:IP sur la pile FLAGS Chargement dans CS:IP 15 015 0 Transparence Les interruptions matérielles sont toujours transparentes (sauvegarde des registres) pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 29 / 48

Interruptions Interruptions Schéma d'exécution 0000:0000 Execution Interruption clavier (9h) 0000:0024 Segment Offset Sauvegarde de CS:IP sur la pile FLAGS Chargement dans CS:IP 15 015 0 Execution de l interruption Transparence Les interruptions matérielles sont toujours transparentes (sauvegarde des registres) pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 29 / 48

Interruptions Interruptions Schéma d'exécution 0000:0000 Execution Interruption clavier (9h) 0000:0024 Segment Offset Sauvegarde de CS:IP sur la pile FLAGS Chargement dans CS:IP 15 015 0 Execution de l interruption Restaurer CS:IP depuis la pile FLAGS Transparence Les interruptions matérielles sont toujours transparentes (sauvegarde des registres) pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 29 / 48

Interruptions Interruptions Schéma d'exécution 0000:0000 Execution Interruption clavier (9h) 0000:0024 Segment Offset Sauvegarde de CS:IP sur la pile FLAGS Chargement dans CS:IP 15 015 0 Execution de l interruption Restaurer CS:IP depuis la pile FLAGS Transparence Les interruptions matérielles sont toujours transparentes (sauvegarde des registres) pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 29 / 48

Interruptions Interruptions Schéma d'exécution 0000:0000 Execution Interruption clavier (9h) 0000:0024 Segment Offset Sauvegarde de CS:IP sur la pile FLAGS Chargement dans CS:IP 15 015 0 Execution de l interruption Restaurer CS:IP depuis la pile FLAGS Transparence Les interruptions matérielles sont toujours transparentes (sauvegarde des registres) pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 29 / 48

Interruptions Interruptions Gestionnaires par défaut Le BIOS met en place les adresses pour les 32 premières interruptions, qui sont des interruptions générées par le matériel 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 64ème (incluse) sont libres pour le programmeur Pour appeller une interruption manuellement, on utilise le mnemonic int avec comme seule opérande le numéro de l'interruption pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 30 / 48

Directives Plan 1 Introduction Assembleur Machine Processeur 2 Instructions Mémoire Interruptions Directives Premier programme Registre d'état Branchements Fonctions pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 31 / 48

Directive Directives Commandes spéciales Les directives sont des commandes spéciales 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 à générer use16 qui indique que l'on souhaite compiler du code 16 bits org qui indique la valeur de départ de ip Directives communes db n : insère l'octet n à cet endroit dw n : insère le mot (= 2 octets) n à cet endroit rb n : réserve la place pour n octets rw n : réserve la place pour n mots Remarque : db fonctionne aussi avec une chaîne de caractères et prend les codes ASCII dans ce cas pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 32 / 48

Premier programme Plan 1 Introduction Assembleur Machine Processeur 2 Instructions Mémoire Interruptions Directives Premier programme Registre d'état Branchements Fonctions pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 33 / 48

Hello world Premier programme Code source ; Version fasm, syntaxe "intel" format binary use16 org 100h mov ah,09h ; Fonction 09h mov dx,message ; Paramètre: dx recoit l'adresse de message int 021h ; Appeller la fonction int 020h ; Appeller la fonction message: db "Hello world$" pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 34 / 48

Registre d'état Plan 1 Introduction Assembleur Machine Processeur 2 Instructions Mémoire Interruptions Directives Premier programme Registre d'état Branchements Fonctions pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 35 / 48

Registre d'état Registre ags La plupart des opérations de calculs donnent des informations sur le résultat dans le registre spécial ags Les informations possibles sont : CF : 1 si le résultat a donné lieu à une retenue PF : 1 si l'octet de poids faible du résultat à un nombre pair de 1 AF : 1 si le résultat a donné lieu à une retenue sur le 3 eme bit ZF : 1 si le résultat est zéro SF : 1 si le résultat est négatif IF : 1 si les interruptions peuvent arriver DF : 0 si la direction est incrémentée, 1 si elle est décrémentée OF : 1 si le résultat ne tient pas dans la destination pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 36 / 48

Branchements Plan 1 Introduction Assembleur Machine Processeur 2 Instructions Mémoire Interruptions Directives Premier programme Registre d'état Branchements Fonctions pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 37 / 48

Branchements Branchements Sélectionner du code En C, on peut utiliser des structures de contrôle type if, while ou for pour contrôler l'exécution du code En assembleur, la prochaine instruction est toujours donnée par cs : ip Pour accéder à 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) Cours Assembleur 8086 12 mars 2008 38 / 48

Branchements conditionnels Branchements Tester des indicateurs Le registre ags contient des indicateurs qui peuvent être testés et s'ils sont mis (ou éteints), on peut eecteur un saut C'est la méthode 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 résultat est zéro pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 39 / 48

Fonctions Plan 1 Introduction Assembleur Machine Processeur 2 Instructions Mémoire Interruptions Directives Premier programme Registre d'état Branchements Fonctions pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 40 / 48

Fonctions Fonctions Appel On découpe 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 même 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

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 appellée en far call, il faut utilier retf, qui restaure aussi cs depuis la pile Pour éviter tout problème, il est impératif que la pile soit dans le même état avant de faire un ret ou un retf qu'au début de la fonction pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 42 / 48

Fonctions Fonctions Arguments Il existe plusieurs méthodes pour passer des arguments à une fonction Le choix de la méthode dépend d'une convention entre appellant et appellé Passage par registre La convention spécie les arguments que doivent contenir les registres Elle est utilisée par les interruptions Avantages Rapide à l'exécution Simple à programmer Inconvénients Il n'y a que 8 registres utilisables Il faut sauvegarder les registres avant chaque appel pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 43 / 48

Fonctions Fonctions Passage par la pile Cette convention consiste à empiler les arguments sur la pile avant l'appel La fonction récupère les arguments sur la pile Avantages On peut utiliser plus d'arguments Meilleur interface avec d'autres langages Plus facile d'appeller en cascade Inconvénients Plus dicile à mettre en oeuvre Moins rapide à l'exécution En plus de ces facteurs, la convention doit spécier plusieurs points L'ordre dans lequel empiler les arguments (en C : du dernier au premier, en Pascal : du premier au dernier) Qui doit nettoyer la pile? (en C : l'appellant, en Pascal : l'appellé) pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 44 / 48

Fonctions Fonctions Valeur de retour Les valeurs de retour sont aussi soumises à un choix de convention Les même conventions que pour le passage de paramètre s'appliquent Le retour sur la pile est beaucoup plus complexe que le retour par les registres pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 45 / 48

Exemple de fonction Fonctions 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) Cours Assembleur 8086 12 mars 2008 46 / 48

Exemple de fonction Fonctions Passage et retour par registres ; Convention: ; ax contient le premier entier ; bx contient le deuxième entier ; le résultat sera dans ax moyenne: add ax, bx shr ax, 1 ret mov ax, 12 mov bx, 6 call moyenne ; ici ax contient 9 pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 47 / 48

Exemple de fonction Fonctions Passage par la pile, retour par registre ; Convention: ; premier entier empilé en dernier ; deuxième entier empilé en avant-dernier ; le résultat sera dans ax moyenne: push bp mov bp,sp push bx mov ax,[bp+4] mov bx,[bp+6] add ax,bx shr ax,1 pop bx pop bp ret push 6 push 12 call moyenne ; ici ax contient 9 add sp,4 SS:SP 6 Memoire pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 48 / 48

Exemple de fonction Fonctions Passage par la pile, retour par registre ; Convention: ; premier entier empilé en dernier ; deuxième entier empilé en avant-dernier ; le résultat sera dans ax moyenne: push bp mov bp,sp push bx mov ax,[bp+4] mov bx,[bp+6] add ax,bx shr ax,1 pop bx pop bp ret SS:SP 12 6 Memoire push 6 push 12 call moyenne ; ici ax contient 9 add sp,4 pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 48 / 48

Exemple de fonction Fonctions Passage par la pile, retour par registre ; Convention: ; premier entier empilé en dernier ; deuxième entier empilé en avant-dernier ; le résultat sera dans ax moyenne: push bp mov bp,sp push bx mov ax,[bp+4] mov bx,[bp+6] add ax,bx shr ax,1 pop bx pop bp ret push 6 push 12 call moyenne ; ici ax contient 9 add sp,4 SS:SP Memoire IP 12 6 pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 48 / 48

Exemple de fonction Fonctions Passage par la pile, retour par registre ; Convention: ; premier entier empilé en dernier ; deuxième entier empilé en avant-dernier ; le résultat sera dans ax moyenne: push bp mov bp,sp push bx mov ax,[bp+4] mov bx,[bp+6] add ax,bx shr ax,1 pop bx pop bp ret push 6 push 12 call moyenne ; ici ax contient 9 add sp,4 SS:SP Memoire BP IP 12 6 pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 48 / 48

Exemple de fonction Fonctions Passage par la pile, retour par registre ; Convention: ; premier entier empilé en dernier ; deuxième entier empilé en avant-dernier ; le résultat sera dans ax moyenne: push bp mov bp,sp push bx mov ax,[bp+4] mov bx,[bp+6] add ax,bx shr ax,1 pop bx pop bp ret push 6 push 12 call moyenne ; ici ax contient 9 add sp,4 SS:SP SS:BP Memoire BX BP IP 12 6 pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 48 / 48

Exemple de fonction Fonctions Passage par la pile, retour par registre ; Convention: ; premier entier empilé en dernier ; deuxième entier empilé en avant-dernier ; le résultat sera dans ax moyenne: push bp mov bp,sp push bx mov ax,[bp+4] mov bx,[bp+6] add ax,bx shr ax,1 pop bx pop bp ret push 6 push 12 call moyenne ; ici ax contient 9 add sp,4 SS:SP Memoire BX BP IP 12 6 pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 48 / 48

Exemple de fonction Fonctions Passage par la pile, retour par registre ; Convention: ; premier entier empilé en dernier ; deuxième entier empilé en avant-dernier ; le résultat sera dans ax moyenne: push bp mov bp,sp push bx mov ax,[bp+4] mov bx,[bp+6] add ax,bx shr ax,1 pop bx pop bp ret push 6 push 12 call moyenne ; ici ax contient 9 add sp,4 SS:SP Memoire BX BP IP 12 6 pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 48 / 48

Exemple de fonction Fonctions Passage par la pile, retour par registre ; Convention: ; premier entier empilé en dernier ; deuxième entier empilé en avant-dernier ; le résultat sera dans ax moyenne: push bp mov bp,sp push bx mov ax,[bp+4] mov bx,[bp+6] add ax,bx shr ax,1 pop bx pop bp ret Memoire BX BP IP SS:SP 12 6 push 6 push 12 call moyenne ; ici ax contient 9 add sp,4 pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 48 / 48

Exemple de fonction Fonctions Passage par la pile, retour par registre ; Convention: ; premier entier empilé en dernier ; deuxième entier empilé en avant-dernier ; le résultat sera dans ax moyenne: push bp mov bp,sp push bx mov ax,[bp+4] mov bx,[bp+6] add ax,bx shr ax,1 pop bx pop bp ret push 6 push 12 call moyenne ; ici ax contient 9 add sp,4 SS:SP Memoire BX BP IP 12 6 pierre-nicolas.clauss@loria.fr (LORIA) Cours Assembleur 8086 12 mars 2008 48 / 48