Vous êtes sur la page 1sur 16

Syntaxe, directives assembleur

Exemples
Instructions: iter: cmpw $0,%ax # compare word je fin # jump if equal shrw $1,%ax # shift right word jnc suite # jump if no carry add %dx,%ax # add suite: shlw $1,%dx # shift left word jmp iter # jump inconditionnel fin: Donnes : toto: .byte 0xff lulu: .int $5000, suite

Modle mmoire (assembleur Gnu) Les directives .text, .data, .section


.section .data un: . .int 1 .section .bss .lcomm tab,10 tab1: --.text main: pushl %ebp skip 10

Code: text rodata Donnes Initialises data Donnes non Initialises BSS Pile 3

Programme source

Ensemble de sections .data (.rodata, .bss) pour les donnes .text pour les instructions Chaque section est une suite de lignes Pour les instructions [etiquette:] code_op oprandes [etiquette:] def_de_donne suite de valeurs des commentaires des directives dassemblage 4

Pour les donnes


Reprsentation symbolique des instructions

Code de lopration

La dernire lettre correspond la longueur des oprandes Exemple : shr, subl, movb Registre. Ex: %eax Adresse en mmoire, dnote par un mode dadressage Ex: 4(%ecx) Valeur immdiate Ex: $0x45ab

Reprsentation symbolique des oprandes


Attention : les types doprandes valides dpendent des instructions


5

Les commentaires

Dfinition : il sagit de textes non interprts par lassembleur et qui sont fournis par le programmeur pour augmenter la lisibilit de son programme. Comme en C (avec des fichiers *.S, S majuscule) :

soit sur une ligne tout ce qui suit // jusqu la fin de ligne soit ce qui est entre les deux couples de caractres /* et */
6

Les tiquettes

Une tiquette (identificateur suivi de :) sert dsigner ladresse dun emplacement de mmoire On peut lutiliser dans un champ oprande movw %eax,lulu

toto:

tiquettes
Dclaration d'tiquette : toto: <quelquechose>

Utilisation d'tiquette :

Ne gnre pas de code Dfinie toto comme l'adresse de <quelquechose>

movl toto, %eax L'tiquette est remplace par sa valeur


8

Directives dassemblage

Directives d'assemblage : commandes fournies par lassembleurs qui ne correspondent aucune instruction du processeur. Elles permettent entre autres:

La dfinition de donnes. La dfinition de constantes ou de symboles. Les sections (.text et .data)

Dfinition de donnes

Dfinition de donnes initialises [tiquette] .<DNAME> val1,val2,, valn <DNAME> = byte|hword| long | quad | asciz xi: .long 0xaabbccdd, xi, -4500 xb: .byte 0x3f, 35, c message: .asciz "Hello World" Dfinition de donnes non initialises .lcomm nom, taille [tiquette] .skip taille (,valeur)
10

Directives assembleur de dfinition de donnes


1 2 2 2 3 4 4 4 5 6 7 8 0000 DDCCBBAA xi: 00000000 6CEEFFFF 000c 3F2363 xb: 000f 48656C6C message: 6F20576F 726C6400 .data .long 0xaabbccdd, xi, -4500

.byte 0x3f, 35, 'c' .string "Hello World"

0000 55

main:

.lcomm tab,10 .text .globl main pushl %ebp

11

Dfinition de constantes

Ressemblent au #define du langage C Symbole = expression associe de faon dfinitive la valeur d'expression au symbole dfini par le champ symbole. X = 1024 movl $X, %eax // Strictement quivalent movl $1024, %eax Remplacement syntaxique : on pourrait le faire avec rechercher/remplacer dans un diteur de texte ! (syntaxes alternatives : .set x, y ou .equ x, y ou encore #define X Y)

12

Exportation de symbole

Motivation : pouvoir dfinir (resp. utiliser) dans un module dassemblage du code et des donnes utilisables (resp. dfinis) dans un autre module dassemblage produit par un compilateur ou par un programmeur. Directive .globl (ou .global) .globl <tiquette>, les tiquettes du champ oprande dfinies dans le module courant sont rendues visibles lextrieur de ce module. Toute tiquette rfrence dans le module courant sans y tre dfinie est considre comme externe, donc dfinie dans un autre module dassemblage. Exemple: .globl main // chaque programme comporte un // main appel par le systme

13

Mcanismes dadressage

14

Introduction (1)

Exemples :

Les oprandes des instructions ne peuvent pas tre des expressions quelconques. Expressions autorises comme oprandes = mode d'adressages
15

movl $42, %eax movl toto, %ebx movl 2*(toto + %ebx), %eax

Modes d'adressages principaux du pentium

Cf. EnsiWiki :

http://ensiwiki.ensimag.fr/index.php/LdB_Modes_d%27adressages

16