Professional Documents
Culture Documents
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
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
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
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 :
Directives dassemblage
Directives d'assemblage : commandes fournies par lassembleurs qui ne correspondent aucune instruction du processeur. Elles permettent entre autres:
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
0000 55
main:
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
Cf. EnsiWiki :
http://ensiwiki.ensimag.fr/index.php/LdB_Modes_d%27adressages
16