Déclaration des variables
Transcription
Déclaration des variables
30/01/2016 DÉCLARATION DES DONNÉES & MODES D’ADRESSAGES Par : Khaled Hassine [email protected] 23/08/2010 Khaled Hassine 1 PLAN 2 PLAN Introduction Introduction Déclaration des constantes Déclaration des constantes Déclarations des variables Déclarations des variables Modes d’adressages Modes d’adressages A retenir 30/01/2016 Khaled Hassine 30/01/2016 A retenir Khaled Hassine 3 30/01/2016 Khaled Hassine 4 1 30/01/2016 Introduction PLAN Introduction Déclaration des constantes Déclarations des variables Modes d’adressages A retenir 30/01/2016 Khaled Hassine 5 Déclaration des constantes Déclaration des constantes L’assembleur parcoure le code source et change chaque occurrence de la constante par sa valeur Exemple : 23/08/2010 6 Introduction <Identificateur de Constante> EQU <Value> <Identificateur de Constante> = <Value> A B C D Khaled Hassine PLAN Syntaxe : 30/01/2016 EQU = EQU = Déclarations des variables Modes d’adressages 126 1FH 101B 'Hello' Khaled Hassine A retenir 7 30/01/2016 Khaled Hassine 8 2 30/01/2016 Déclaration des variables Directives de déclaration des variables Directiv e Signification Réserver en mémoire DB Define Byte 1 octet DW Define Word 2 octets DD Define Double Word 4 octets DQ Define Quad WordDirectiv e 8 octets Signification Interprétation de la valeur D Decimal décimal (par défaut) B Binary en binaire O Octal en octal H Hexadécimal 23/08/2010 <Identificateur> <Type Elément> [[<Taille > DUP] [<Valeur initiale> [D/B/O/H]]/ ?/"<Caractères >"] <Identificateur> de la variable <Type Elément> : DB, DW, DD, DQ <Taille> : Taille de la structure répétitive (entier) DUP : directive de structures répétitives (DUPlicate) <Valeur initiale> la valeur initiale de chaque variable ' ' : caractères ou chaine de caractères (codés en ASCII), ? : initialisée à 0 (zéro par défaut 0) , Si plusieurs valeurs initiales séparées par des virgules, réservation d'une suite d'emplacements, à chacun est affectée une valeur en hexadécimal Khaled Hassine 9 23/08/2010 DB : Exemple … Déclaration Mémoire Adresse Contenu A DB 126 0 7EH B DB 1FH 1 1FH Ch DB DB 101B 2 'LA' 3 Gamma DW Beta 05H DB 9,1AH,-1,'B',? 5 Mémoire ? DW 1234H 4CH V1 41H Tab DB 2 DUP (5) 09H V2 1AH DW 2 DUP (0AFFH) FFH 42H 00H 23/08/2010 Khaled Hassine 10 DW et vecteurs : exemple … Déclaration C Khaled Hassine 11 23/08/2010 Khaled Hassine Adresse Contenu 0 00H 1 00H 2 34H 3 12H 4 05H 5 05H 6 FFH 7 0AH 8 FFH 9 0AH 12 3 30/01/2016 Le 8086 : Architecture interne PLAN EXECUTION UNIT (EU) Introduction AX BX CX DX Déclaration des constantes BUS INTERFACE UNIT (BIU) 0 AL BL CL DL Accumulateur Base Compteur Données (E/S) SI DI BP SP Registres généraux BUS MULTIPLIXE Modes d’adressages Flags Registrs SEQUENCEUR 13 Principaux registres du Pentium Khaled Hassine 15 CS DS SS ES IP 0 GENERATION D’ADRESSES & BUS DE CONTROLE 23/08/2010 CHAINE D’INSTRUCTIONS Buffer ALU Registres d'état et de contrôle Khaled Hassine Registres de Segment OPERANDES A retenir 23/08/2010 AH BH CH DH Source index Destination index Base pointer Stack pointer Déclarations des variables 30/01/2016 7 15 Khaled Hassine 14 Classification des registres du 8086 15 23/08/2010 Khaled Hassine 16 4 30/01/2016 Adressage des registres Les deux opérandes sont des registres : from register to register Adressage immédiat N’est pas vraiment un mode d’adressage puisqu’il n’accède pas à la mémoire Mode d’adressage très rapide : seul le bus interne est utilisé L'opération se fait sur un ou 2 registres Exemples : INC AX ; incrémenter le registre AX MOV AX, BX ; Copier le contenu de BX dans AX 23/08/2010 Khaled Hassine 17 – Inconvénient : valeur figée dans l'instruction => la modifier oblige à modifier le programme. Exemple : MOV AH, 30H Khaled Hassine Segment de code, Stocke les instructions Chaque registre segment est associé à un ou plusieurs registres d’offset afin de former une adresse physique réelle : Registre segment Registres associés CS SS DS ES DS : Data Segment – – Segment de données, Réservation de la mémoire pour les variables – – – Une adresse logique est exprimée en hexadécimal sous la forme SSSS:OOOOoù SSSS est le segment et OOOO est l’offset. La valeur de l’adresse physique sur 20 bits est : Exemple : pour les instructions, CS:IP est utilisé. SSSS0H+OOOOH = SSSS*16+OOOO. Utilisation spécifique, sur demande uniquement Souvent utilisé avec DI CS = 1111H IP = AAAAH. L’adresse de l’instruction pointée par IP est 11110H+ 0AAAAH = 1BBBAH. SS : Stack Segment Segment de pile UAL de calcul d’adresse 23/08/2010 IP SP et/ou BP BX et/ou SI et/ou DI ES : Extra Segment 18 Les registres segments et associations CS : Code Segment – n’est pas vraiment un mode d’adressage très rapide : seul le bus interne est utilisé Le deuxième opérande est directement codé dans l’instruction 23/08/2010 La segmentation : synoptique Pas d’accès à la mémoire : Khaled Hassine 19 Pour les instructions affectant la pile (PUSH, POP, CALL, RET, etc.), SS:SP est utilisé. DS:SI et ES:DI sont habituellement utilisés pour travailler sur des tableaux ou des chaînes de caractères. 23/08/2010 Khaled Hassine 20 5 30/01/2016 Adressage direct Adressage direct … Le plus simple et rapide des modes d’adressage L’opérande est désigné par l’adresse donnée dans l’instruction L'adresse réelle est calculée comme suit (registre de Formesegment générale par défaut DS) : Exemple On peut spécifier (forcer) le registre de segment : Exemple : MOV ES:M, AX On peut spécifier directement l’adresse de la variable: Exemple : DS*10H+@<Identificateur de la variable> <Opération> <Identificateur variable> DIV M <Opération> <Identificateur variable>, <Registre> MOV M, AX <Opération> <Registre>, <Identificateur variable> MOV AX, M <Opération> <Identificateur variable>, <Constante> MOV M, 1 23/08/2010 Khaled Hassine MOV MOV 21 23/08/2010 Adressage indirect par registre L’opérande est désignée par une adresse placée dans le registre d’adresse donnée dans l’instruction BX, BP, SI, DI peuvent servir de registre d’adresse (de pointeur) En langage évolué, une référence à un élément de tableau s'écrit : TAB(i) Dans l'instruction assembleur correspondante elle s'écrit : TAB[registre d'index] En ASM, le programmeur gère le registre d'index Pour accéder au ième élément du tableau , on doit réaliser : Registre d'index ← (i - 1)*n où n = nb d'octets occupés par un élément On utilise l’un des registres d’Index : SI ou DI L'adresse réelle est calculée comme suit (registre de segment par défaut DS) : Exemple : MOV AX, [BX] ; AX ← le contenu de l'adresse DS:BX MOV AX, [BP] ; AX ← le contenu de l'adresse SS:BP MOV AX, [SI] : AX ← le contenu de l'adresse DS:SI MOV AX, [DI] : AX ← le contenu de l'adresse DS:DI MOV AX, [ES:BP] : AX ← le contenu de l'adresse ES:BP Khaled Hassine 22 Intérêt : Parcourir les structures itératives Le registre doit être entre [ ]. Si BP est utilisé, le registre de segment par défaut est SS. Pour les autres registres, DS est le registre de segment par défaut 23/08/2010 Khaled Hassine Adressage indexé Exemples : ES :[0C040H], AL [0C040H], AL DS*10H + @<Vecteur> + <SI/DI>x <Taille d’un élément> TAB DB 1, 10, 30H MOV SI, 1 ADD AH, TAB[SI] ; AH AH+TAB[SI] 23 23/08/2010 Khaled Hassine 24 6 30/01/2016 Adressage basé (relatif) Adressage indexé avec déplacement On peut préciser un déplacement qui sera ajouté au contenu de Ri pour déterminer l’offset, INST Reg. , [<Reg. Seg.> : <Reg ind.> + dep] INST [<Reg. Seg.> : <Reg ind.> +dep] , Reg. INST taille [<Reg. Seg.> : <Reg ind.> +dep] , Cste INST <Reg> , [<Reg. Seg.> :<Reg. Base>+dep] INST [<Reg. Seg.>:<Reg. Base>+dep] , <Reg> INST taille [<Reg. Seg.> :<Reg. Base>+dep] , im Exemples : MOV AX, [SI] ; AX ← le contenu de l'adresse DS:SI MOV AX, [SI+50] ; AX ← le contenu de l'adresse DS:SI+50 MOV AX, [DI-8] ; AX ← le contenu de l'adresse DS:DI-8 MOV AX, [ES:SI+4] ; AX ← le contenu de l'adresse ES:SI+4 23/08/2010 Khaled Hassine Intérêt : manipulation des structures. L’offset se trouve dans l’un des deux registres de base BX ou BP, auxquels est ajouté un déplacement Exemples : MOV AX, [BX+5] ; AX ← le contenu de l'adresse DS:BX+5 MOV AX, [BP-200] ; AX ← le contenu de l'adresse SS:BP-200 25 23/08/2010 Khaled Hassine 26 Khaled Hassine 28 Adressage Basé indexé L’adresse de l'opérande est la somme d'un registre de base, d'un registre d'index et éventuellement d'un déplacement. Les couples des registres de base et d’index possibles sont : Si le registre segment n'est pas spécifié, le segment par défaut du registre de base est utilisé : BP-DI BP-SI BX-DI BX-SI INST Reg. , [<Reg. Seg.> : <Reg. Base>+<Reg ind.> +dep] INST [<Reg. Seg.> : <Reg. Base>+<Reg ind.> +dep] , R INST <taille> [<Reg. Seg.> : <Reg. Base>+<Reg ind.> +dep] , Cste Exemples : MOV AX,[BX+SI] ; AX ← le contenu de l'adresse DS:BX+SI MOV AX,[BX+DI+5] ; AX ← le contenu de l'adresse DS:BX+DI+5 MOV AX,[BP+SI-8] ; AX ← le contenu de l'adresse SS:BP+SI-8 MOV AX,[BP+DI] ; AX ← le contenu de l'adresse SS:BP+DI 23/08/2010 Khaled Hassine 27 23/08/2010 7