Home

´Eléments d`architecture des ordinateurs : travaux pratiques d

image

Contents

1. 51 C 5 Misc lea Load Effective Address Syntaxe gas ATT et op randes possibles srce dest mem reg lea sre dest Description Cette instruction calcul l adresse de la premiere op rande et range le r sultat dans la seconde Drapeaux OF DF IF TF SF ZF AF PF CF 52 Annexe D Descriptif des appels syst me D 1 Entr e sortie sys_read Lecture depuis un flux Description Cette fonction r cup re edx octets depuis le support de num ro ebx et les place partir de l adresse ecx Cette copie est interrompue d s qu un retour chariot est rencontr Entr e s KHeax 3 ebx le num ro d acc s du flux ecx un pointeur sur l espace o stocker les donn es lues edx le nombre d octets prendre en compte Sortie s eax contient le nombre d octets lu Prototype C asmlinkage ssize t sys read unsigned int fd char __user buf size_t count 53 sys_write Ecriture dans un flux Description Cette fonction crit edx octets sur le support de num ro ebx en les stockant partir de l adresse ecx Entr e s eax 4 ebx le num ro d acc s du flux ecx un pointeur sur l espace contenant les donn es crire edx le nombre d octets a prendre en compte Sortie s eax contient le nombre d octets crit Prototype C asmlinkage ssize_t sys write unsigned int fd char _
2. Exercice 9 Exemples Consid rons le code suivant 26 data var string ABCDEF dest space 7 text globl _start _start movl var eax movl 0 eax movl 0 edx movb var al movb var 2 al movl var eax movl var edx movl 2 eax movl 0 ds 3 edx eax 3 movl 0 ebx Ces instructions permettent d invoquer de movl 1 eax terminer 1 ex ecution d un programme int 0x80 assembleur et sont indispensable Pour chaque ligne indiquez le r sultat produit Exercice 10 Manipulation de tableau multiplication de matrices Construisez un programme qui effectue la multiplication des matrices A et B d finies dans le segment de donn es par data A long 97 24 34 45 12 long 56 23 78 24 39 long 45 42 10 94 93 long 67 84 31 94 86 long 73 54 59 47 98 B long 73 23 98 74 06 long 54 76 34 98 73 long 75 04 74 18 83 long 34 89 73 38 55 long 13 84 73 54 73 C space 100 4 1 2 Conversion de donn es Il est possible d augmenter la taille du codage des donn es enti res de 2 mani res diff rentes en utilisant 27 des instructions sp cifiques des instructions classiques suffix es Instructions de conversion L architecture Intel propose les instructions de conversion suivante cbtw tend un octet sign contenu dans al en un mot sign contenu dans ax cwtl tend un mot sign contenu dans ax en un long sign con
3. Po dans Pil E supprimer est une application de Pil P dans Pil E Si x est un l ment de E les relations satisfaites par une pile P et ces op rations sont 1 est Vide Po vrai 2 supprimer empiler x P P 3 est Vide empiler z P faux 4 depiler empiler x P x Cette derni re r gle caract rise les piles 28 4 2 1 Implantation de la pile Un segment de la m moire est d volu la pile Les registres SS et SP sont deux registres servant g rer la pile SS Stack Segment i e segment de pile est un registre 16 bits contenant l adresse du segment de pile courant ESP Stack Pointer i e pointeur de pile est le d placement pour atteindre le sommet de la pile Ainsi SP pointe sur le dernier bloc de m moire occup de la pile L assembleur vous fera manipuler une pile qui est stock e en fond de panier c d dans les adresses les plus hautes de la m moire Ainsi la base de la pile se trouve l adresse maximale et elle s accroit vers les adresses basses A l inverse les programmes se d veloppent sur le tas en bas de m moire juste au dessus de la zone r serv e pour le syst me Pile et Tas croissent donc l inverse l un de l autre 4 2 2 Manipulation de la pile Les modification de la structure de la pile se font par les instructions push reg empiler depuis le registre reg Lorsque l on empile un l ment sur la pile l adresse contenue dan
4. a partir du label top done movl ebx UnAutre sinon le resultat est stock e movl 0 Lebx Ces instructions permettent d invoquer de movl 1 4eax terminer 1 ex ecution d un programme int 0x80 assembleur et sont indispensable Utilisateur d emacs veillez a ajouter une ligne vide apr es ce commentaire afin de ne pas provoquer un Segmentation fault Ce code peut tre saisi dans votre diteur de texte pr f r emacs ou vi afin de produire un fichier source Par convention on acolle ce type de fichier source le suffixe s dans notre cas nous allons appeler ce fichier sum s 1 5 Compilation et ex cution pas pas Il nous reste rendre ce fichier source compr hensible par un tre humain convena blement form compr hensible par un ordinateur gr ce la compilation 1 5 1 Compilation Dans notre contexte la compilation se d compose en 3 phases successives 1 Le traitement par le pr processeur le fichier source est analys par un programme appel pr processeur qui effectue des transformations purement textuelles remplace ment de cha nes de caract res inclusion d autres fichiers source etc 2 L assemblage cette op ration transforme le code assembleur en un fichier binaire c est dire en instructions directement compr hensibles par le processeur Le fichier produit par l assemblage est appel fichier objet 3 L dition
5. la fin de la conversion Explicitons maintenant la fonction de chaque tat La r cup ration de caract re consiste chercher en m moire un caract re et incr menter un pointeur afin de consid rer le suivant dans la cha ne de d part l analyse et la d cision consiste soit ranger un chiffre apr s conversion dans RES soit aiguiller l ex cution du programme vers un des autres tats suivant la nature des caract res r cup r et contenu dans le sommet de la pile voir la suite et la figure 4 2 l tat empiler consiste empiler le caract re r cup r l tat d piler consiste d piler le caract re r cup r et d cr menter le pointeur utilis pour la r cup ration l tat d piler vers RES consiste d piler un caract re et le stocker dans RES puis empiler le caract re r cup r l tat erreur indique que la construction de la cha ne de d part est d fectueuse l tat fin marque la fin du processus de conversion Le plus gros du travail consiste bien comprendre les actions r alis es dans l tat analyse et la d cision Nous allons donc expliciter certains points 30 R cup ration d un caract re 1 Empiler 2 D piler 3 D piler vers RES Y 5 Erreur lt Analyse et d cision die FIG 4 1 Automate repr sentant un algorithme de convertion de l infixe vers le pos
6. l ments d architecture des ordinateurs travaux pratiques d assembleur sur PC Intelx86 sous Linux Laboratoire d Informatique fondamentale de Lille Universit des sciences et technologies de Lille F 59655 Villeneuve d Ascq CEDEX France 1 octobre 2007 Ces notes constituent un support de travaux pratiques pour un cours d architecture l mentaire des ordinateurs Lors de ces s ances il s agit principalement de programmation assembleur sur des ordinateurs personnels d architecture intel 32 bits g r s par le syst me d exploitation Linux L assembleur utilis est le gnu assembleur et nous utiliserons le gnu debugger pour l ex cution pas pas et l examen de la m moire et des registres Ce texte comme son titre l indique vise deux objectifs fournir une synth se l mentaire des notions requises par un d butant pour l ap prentissage de l assembleur donner une repr sentation architectonique du sujet Ainsi ces notes ne pr tendent ni l exhaustivit toutes les instructions et possibilit s de l assembleur ne sont pas pr sent es ni apprendre crire du code optimal Cet ensei gnement est plut t orient par la perspective d en faire une base permettant de comprendre comment un programme en C par exemple est ex cut par la machine Un bref descriptif du jeu d instruction des processeurs 32 bits de type intel est disponible en annexe C pour plus d informa
7. le fonctionnement de notre programme ne nous est pas apparent Pour ce faire nous allons forcer le programme a stopper et controler son ex cution Points d arr t Lorsque le code source de l ex cutable est disponible la commande list permet d afficher le code source avec chacune de ces lignes num rot es Dans notre cas gdb list 1 data 2 3 UnNon 4 long 43 La commande break permet de placer un point d arr t sur une instruction du programme source de mani re ce qu la prochaine ex cution du programme dans gdb l invite du d vermineur soit disponible avant l ex cution de cette instruction 10 Une instruction du programme source peut tre rep r e par le num ro de ligne corres pondant ou par un label Ainsi la suite de commande gdb break 26 Breakpoint 1 at 0x8048079 file sum s line 26 gdb break top Breakpoint 2 at 0x8048083 file sum s line 29 permet de placer deux points d arr ts aux endroits sp cifi s On peut avoir la liste des points d arr ts en utilisant dans gdb la commande info gdb info break Num Type Disp Enb Address What 1 breakpoint keep y 0x08048079 sum s 26 2 breakpoint keep y 0x08048083 sum s 29 Ex cution pas pas Une fois ceci fait on peut ex cuter notre programme dans l environnement gdb gdb run Starting program home Sources sum Breakpoint 1 _start at sum s 26 26 movl 0 ebx EBX va contenir la somme de ces enti
8. Les registres DS ES FS GS Data Segment Ces registres 16 bits contiennent les num ros de segment m moire dans lesquels sont stock es des donn es Le registre DS est utilis pour le segment de donn es du code les autres permettent de r f rencer d autres types de donn es On ne peut pas acc der directement ce registre 36 Le registre EFLAG Ce registre est structur comme suit EFLAG 31 16 15 0 FLAG Les bits 1 3 5 15 et les bits de 22 31 sont r serv s par le microprocesseur pour son fonction nement interne Les 21 autres bits forment des drapeaux i e des indicateurs et nous ne nous int resserons qu au sous registre FLAG Il existe quatre actions possibles d une instruction sur les drapeaux le drapeau n est pas modifi on ne peut rien dire sur l tat de l indicateur apr s l instruction le drapeau sera modifi par l instruction et cette modification nous renseignera sur le d roulement de l instruction 0 ou 1 valeur du drapeau apr s l instruction Les fonctions des drapeaux sont r sum es dans le tableau ci dessus 37 21 20 19 18 17 16 14 12 amp 13 11 10 ID VIP VIF AC VM RF NT IOPL OF DF IF TF SF ZF AF PF CF Identification Flag Virtual Interrupt Pending Virtual Interrupt Flag Alignment check Virtual 8086 Mode Resume Flag Nested Task I O Privilege Level Overflow Flag Dir
9. Par exemple pour stocker la valeur d cimale 2 dans le registre EAX resp BX CH on crit movl 2 eax resp movw 2 bx movb 2 ch 4 Dans cet exemple on utilise la syntaxe ATT dans laquelle le pr fixe indique une op rande ne n cessitant pas d interpr tation ici un entier les noms des registres sont pr fix s par le symbole Ceci permet d utiliser du code assembleur directement dans un programme C sans risque de confusion avec un nom de macro la premi re op rande de l instruction mov est la source et la seconde est la destination la syntaxe Intel utilise la convention inverse la taille des op randes se lit sur le suffixe de l instruction b pour byte 8 bits w pour word 16 bits l pour long 32 bits Le compilateur n impose pas strictement l usage du suffixe i e instruction mov 2 ch est valide tant qu il est possible de d duire la taille des donn es d plac es dans le doute on utilise l architecture 32 bits par d faut Remarque 3 Il existe plusieurs variantes de l instruction MOV dont voici quelques exemples mov 1515 AX mov BL DH Nous reviendrons sur ce sujet lors de l tude du theme 4 Pour l instant poursuivons la pr sentation des notions n cessaires l criture de notre premier programme assembleur 1 4 Structure d un programme assembleur Nous utiliserons dans cette section un fichier source assembleur d un programme faisa
10. de cette instruction est cod e sur 32 bits l entier d fini par la pair de registre EDX EAX est divis par l op rande le quotient est stock dans EAX et le reste dans EDX Le d bordement n est pas indiqu par le drapeau CF En cas de r sultat non entier une troncation a 0 est faite Drapeaux OF DF IF TF SF ZF AF PF CF Dr 2 J inc incr mentation Syntaxe gas ATT et op randes possibles dec op decb op a decw op reg decl op ae Description Cette instruction additionne 1 op Drapeaux OF DF IF TF SF ZF AF PF CF 46 mul multiplication non sign e Syntaxe gas ATT et op randes possibles mul SIC sre mulb sre reg mulw srce mem mull sre Description Cette instruction multiplie le contenu de l accumulateur EAX AX AL suivant la taille de src avec src Le r sultat est plac dans l accumulateur Le r sultat est calcul concurrence du double de la taille de src Par exemple si sre est cod e sur 1 octet la multiplication est faite avec AL et le r sultat est cod sur 2 octets dans AX si src est cod e sur 2 octets la multiplication est faite avec AX et le r sultat est cod sur 4 octets dans la paire de registre DX AX si src est cod e sur 4 octets la multiplication est faite avec EAX et le r sultat
11. es Al 42 Annexe C Descriptif des instructions Pour chaque instruction nous pr sentons la syntaxe permettant l utilisation des diff rentes d riv es de cette instruction une description de cette instruction l effet de cette derni re sur le registre drapeaux principalement pour les instructions relatives l unit arithm tique les diff rents types d op randes possibles Ainsi idata repr sente une constante reg repr sente un registre mem repr sente une tiquette associ e un espace m moire ou une adresse 43 C 1 Arithm tique classique add addition d entiers Syntaxe gas ATT et op randes possibles Description Cette instruction additionne le contenu de l op rande src avec celui de l op rande dest et stocke le r sultat dans l espace d sign par l op rande dest Les op randes doivent repr senter des objets de m me add addb addl addw src src src src dest dest dest dest source destination idata reg idata mem reg reg mem reg reg mem taille en bits De plus si les op randes sont des entiers sign s le drapeau OF indique un r sultat invalide des entiers non sign es le drapeau CF indique une retenue Drapeaux OF DF IF TF SF ZF AF PF CF L _ x T 44 cmp compare deux op randes Syntaxe gas ATT et op randes possibles
12. est cod sur 8 octets dans la paire de registre EDX EAX Les drapeaux OF et CF sont mis 0 si la moiti sup rieure du r sultat est nulle et 1 sinon Drapeaux OF DF IF TF SF ZF AF PF CF Le ec eee eel eee 47 sub soustraction d entiers Syntaxe gas ATT et op randes possibles source destination sub sre dest idata reg subb sre dest idata mem subl sre dest reg reg subw sre dest mem reg reg mem Description Cette instruction soustrait le contenu de l op rande sre avec celui de l op rande dest et stocke le r sultat dans l espace d sign par l op rande dest Les op randes doivent repr senter des objets de m me taille en bits De plus cette instruction provoque un double calcul le processeur fait simultan ment la soustraction une fois en supposant les donn es sign es et une fois en les supposant non sign es Ainsi le drapeau OF est lev si un d bordement survient lors de la sous traction sign e et le drapeau CF est lev si une retenue survient lors de la soustraction non sign e Le drapeaux CF indique le signe du r sultat si n cessaire Drapeaux OF DF IF TF SF ZF AF PF CF 48 C 2 D placement des donn es mov d placement de donn es Syntaxe gas ATT et op randes possibles mov movb movw movl src STC SYC SYC dest dest dest d
13. label start Ce dernier label est le point d entr e mais vous pouvez en sp cifier un autre main par exemple condition d utiliser l option e de l diteur de liens 14 voir section 1 5 1 Dans notre exemple le code source imm diatement post rieur au point d entr e est start movl 5 eax EAX va nous servir de compteur indiquant le nombre d entiers restant a additionner movl 0 ebx EBX va contenir la somme de ces entiers movl UnNom ecx ECX va lt lt pointer gt gt sur 1 el ement courant a additionner Cette derni re instruction place dans le registre ecx l adresse associ e au label UnNom La m moire de donn es est vue comme une suite d octets index e de 0 Aan offset O x x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 20 x 21 octet 43 54 104 101 Le label UnNom sert de r f rence au d placement relatif l offset x d finit par le systeme Ainsi la commande movl UnNom ecx place l offset x dans le registre ecx la commande movl UnNom ecx place l octet situ l offset x du segment de m moire dans le registre ecx on trouve l offset x 5 la valeur 104 qui n est que le code ascii pour la lettre h Notez qu il n y a pas de typage ce niveau en assembleur Comme dans le cas du segment de donn es plusieurs labels peuvent tre utilis s dans le segment de cod
14. utiliser un registre de 16 bits on obtient ainsi un saut proche L utilisation d un registre de 32 bits correspond un saut lointain g n ralement vers un autre segment de code une constante cette possibilit est tr s fortement d conseill e Nous n utiliserons que la premi re possibilit dans ce fascicule Ainsi dans le bout de code suivant done movl 0 ebx movl 1 eax jmp fini effectue un saut movl 666 ebx movl 666 eax fini int 0x80 les instructions movl 666 ebx movl 666 eax ne seront jamais ex cut es du fait du saut inconditionnel jmp fini Exercice 2 Saut inconditionnel V rifiez cette assertion 16 2 3 Instructions de saut conditionnelles Ces instructions v rifient l tat d un ou plusieurs drapeaux du registre EFLAGS cf la description de ce registre dans la section A 1 Si ce registre est dans l tat sp cifi alors le saut d fini par l op rande de V instruction est effectu Sinon l instruction suivante est ex cut e Consid rons l exemple suivant top addl hecx ebx addl 4 ecx D eplace le lt lt pointeur gt gt sur 1 el ement suivant decl eax D ecr emente le compteur EAX jnz top Si le contenu de EAX est non nul alors ex ecuter le code a partir du label top done movl ebx UnAutre sinon le resultat est stock e L instruction decl eax modifie le drapeau ZF en lui as
15. 0 eax place la constante 0 dans le registre eax Dans ce cadre une r f rence m moire d termine une adresse m moire suivant la syntaxe registre de segment d placement registre de base registre de d calage facteur de d calage Avant d aller plus loin rappelons qu une adresse m moire est sp cifi e par deux entiers le num ro du segment dans lequel elle est d finie Au cours de l ex cution d un code assembleur Le registre cs Code Segment contient le num ro du segment m moire dans lequel sont stock es les instructions et le registre ds Data Segment contient le num ro du segment de donn es le d placement relatif dans le segment correspondant l emplacement m moire dans le segment La premi re composante d une r f rence m moire indique le segment m moire consid r La seconde composante indique un d placement relatif gal registre de base registre de d calage facteur de d calage d placement 25 Exemple Pour mieux comprendre quoi correspond cette syntaxe consid rons le code suivant data var long 1 text globl _start _Start movl var 4edx cette commande pr epare la suite movl 2 eax cette commande pr epare la suite L exemple a pour objectif de comprendre l instruction suivante movl 0 ds 4 edx eax 2 movl 0 ebx Ces instructions permettent d invoquer de movl 1 eax terminer 1 ex ecution d un pr
16. 1 Pour information en assembleur le reste de la division euclidienne peut tre obtenu par l instruction div et la comparaison par l instruction cmp cf annexe C Calculer le pgcd de 13481754 et de 1234715 Correction 19 2 3 3 Instructions de boucle num rative loop L instruction loop n cessite l emploi des registres ecx ou cx comme compteurs chaque it ration de boucle le registre ecx est automatiquement d cr ment Si apr s d cr mentation ecx est nul on sort de la boucle pour ex cuter l instruction suivante sinon loop branche en fonction de son op rande label ou saut court 8 bits Par exemple on peut crire movl 10 ecx movl 0 eax DebutBoucle add ecx eax loop ecx pour faire la somme des entiers de 0 10 inclut Attention si le registre disons cx est nul au premier tour il est d cr ment et sa valeur devient 65535 Dans ce cas de figure on peut attendre un bon moment la sortie de boucle De m me le registre de boucle doit tre modifi dans ce cadre avec grande prudence Exercice 5 Mise en pratique R crivez le programme sum du premier chapitre 1 4 2 en utilisant une boucle loop On peut aussi utiliser les instructions d crites dans le tableau suivant Instruction description loop d cr mente CX et saut si ce registre est non nul loope d cr mente CX et saut si ce registre est non nul et si ZF 1 loopz d cr mente CX et saut si ce registre
17. REG printf DESC OBJ x NFU ADDR affiche le contenu du registre REG affiche le contenu du registre REG en hexad cimal affiche le contenu du registre REG en binaire affiche le contenu du registre REG sous forme de caract re affiche le contenu du registre REG sous forme d adresse affichage a la C affichage du contenu de la m moire a l adresse ADDR N est le nombre d unit afficher F est le format d affichage U indique le groupement b pour 1 octet h pour 2 octets et w pour 4 octets 58 Commandes d aide help affiche l aide info program affiche des informations sur le programme info functions affiche la liste des fonctions d finies info variables affiche les variables et les symbols pr d finies info registers affiche les informations sur les registres info breakpoints affiche les informations sur les points d arr ts 59 60 Bibliographie 1 INTEL CORPORATION Intel Architecture Software Developer s Manual Basis Architec ture 1997 2 INTEL CORPORATION Intel Architecture Software Developer s Manual Instruction Set Reference 1997 61
18. c la seconde sans stocker le r sultat Le com portement des drapeaux est explicit dans l annexe C dans la description de l instruction sub Voici quelques exemples de structures conditionnelles classiques et leurs implantations en assembleur si X gt Y alors lt instructions gt fsi mov X regi mov Y reg2 cmp reg2 regi jna fsil not above lt instructions gt fsil Si X Y alors f lt instructions gt fsi mov X regi mov Y reg2 cmp regi reg2 jne fsi3 lt instructions gt fsi3 En combinant sauts conditionnel et inconditionnel on peut mettre en place des structures si X lt Y alors lt instructions gt fsi mov X regi mov Y reg2 cmp reg2 reg1 jnb fsi2 not below lt instructions gt fsi2 si X 0 alors lt instructions gt fsi mov X regi and regi regi jnz fsi4 lt instructions gt fsi4 plus complexes comme par exemple si X 0 alors lt instructions_alors gt sinon lt instruction_sinon gt fsi mov X AX and AX AX jne sinon lt instructions_alors gt jmp fsi5 sinon lt instructions_sinon gt fsi5 Exercice 3 Affichage d toiles Le code assembleur ci dessous affiche le caract re gr ce un appel au noyau Linux 18 plus rapide que cmp regi 0 data msg byte 42 text globl _start start movl 4 eax Le code d esignant la fonction a utiliser dans ce cas sys write movl 1
19. d un nombre d octets tous mis a 0 Syntaxe zero NB Description On r serve en m moire NB octets tous mis a 0 40 space R servation d un nombre sp cifi d octets ayant une valeur donn e Syntaxe space SIZE FILL Description Cette directive r serve SIZE octets et leurs assigne la valeur FILL word D claration d un nombre sur 2 octets Syntaxe word NB ou word NB1 NBn Description Pour chaque nombre NB ce nombre est cod sur 2 octets l ex cution B 3 D claration et port des symboles Un code contient des symboles i e des tiquettes permettant de le structurer Ces sym boles peuvent tre accessibles depuis d autres code ou non local D claration locale d une tiquette Syntaxe Jocal label Description Indique qu une tiquette ne peut tre utilis e que dans le code la contenant global D claration globale d une tiquette Syntaxe global label Description Indique qu une tiquette est accessible l dition de liens afin d tre utilisable dans d autre code que celui la contenant comm D claration d un symbol commun Syntaxe comm symbol taille Description Cette directive permet de d clarer un symbole qui n est pas d fini au moment de la compilation Lors de l dition de liens si l diteur de liens ne trouve pas de d finition pour ce symbole taille octets seront r serv s dans le segment de donn
20. de liens un programme est souvent s par en plusieurs fichiers source ceci permet d utiliser des librairies de fonctions standard d j crites comme les fonctions d affichage par exemple Une fois le code source assembl il faut donc lier entre eux les diff rents fichiers objets L dition de liens produit alors un fichier ex cutable Pour assembler un fichier source assembleur disons sum s vous pouvez utiliser la commande suivante dans votre interpr teur de commande as a gstabs o sum o sum s Nous venons d utiliser un certains nombre d options o indique que le nom du fichier objet dans notre cas sum o a permet d afficher le code source que nous venons d assembler parall lement aux codes assembl s et aux offsets correspondant gstabs n est utilis que pour l ex cution pas pas de notre ex cutable Pour obtenir un fichier ex cutable sum il nous faut mener bien l dition de liens en utilisant la commande ld o sum sum o Voila nous pouvons ex cuter ce programme en invoquant le nom de l ex cutable dans votre interpr teur de commandes favori si ce n est que le r sultat du programme stocker une somme dans le segment de donn es d un processus ne nous est pas visible Pour voir ce qui se passe nous allons utiliser un outil d ex cution pas pas 1 5 2 Ex cution pas pas dans l environnement gnu debugger Pour ce faire nous allons utiliser le gnu debugger gdb dans
21. e Par exemple on peut faire suivre le code source ci dessus par les instruc tions top addl ecx ebx Additionne au contenu de EBX ce qui est point e par ECX et stocke le r esultat dans EBX 7 addl 4 ecx D eplace le lt lt pointeur gt gt sur 1 el ement suivant decl eax D ecr emente le compteur EAX jnz top Si le contenu de EAX est non nul alors ex ecuter le code a partir du label top done movl ebx UnAutre sinon le resultat est stock e L instruction addl ecx ebx additionne le contenu du segment de donn es dont l offset correspond au contenu du registre ecx avec le contenu du registre ebx le r sultat est stock dans le registre ebx L instruction decl eax d cr mente ce registre si le contenu de ce registre est diff rent de 0 alors la commande jnz top provoque un saut dans le flux d ex cution des instructions et l instruction associ e au label top est ex cut Sinon c est l instruction suivante dans le flux d instruction qui est ex cut e Un m canisme de boucle conditionnelle est ainsi mis en place par ce code source nous reviendrons sur ce point lors de l tude du th me 2 Remarque 7 Les instructions suivantes movl 0 ebx Ces instructions permettent d invoquer de movl 1 4eax terminer 1 ex ecution d un programme int 0x80 assembleur et sont indispensable doivent imp rativement termin
22. ebx 1 argument le num ero de la sortie standard movl msg ecx 2 argument un pointeur sur le message a afficher movl 1 edx 3 argument le nombre de caract ere s a afficher int 0x80 Appel au noyau interruption 0x80 done movl 1 eax Le code d esignant la fonction a utiliser dans ce cas sys exit movl 0 ebx 1 argument le code de retour du processus int 0x80 Appel au noyau interruption 0x80 On se propose d afficher des toiles dans les dispositions suivantes kkk kK 2K KK KK KKK KK XX OK KK xk 28K KK kkk xk 2K KOK KK KK kkk 2K KK 2 KK 2K KKK 2K KK xk xk 28K KK 2K KK KK 2K KK KK 2K KK KK Construisez un programme assembleur qui affiche successivement ces dispositions 2 3 2 Boucles conditionnelles Exercice 4 Implantation it rative de l algorithme d Euclide On se propose de calculer le plus grand commun diviseur pgcd de deux entiers par Valgorithme d Euclide Cet algorithme repose sur le fait que tant donn deux entiers a et b le pgcd de a et de b est gal au pgcd de b et de r o r est le reste de la division euclidienne de a par b et ceci tant que r est diff rent de z ro Le pgcd est alors le dernier diviseur utilis Ecrivez un programme assembleur qui partir de deux entiers stock s dans le segment de donn es calcule leur pgcd on suppose que ces entiers sont tous deux inf rieurs 23
23. ection Flag Interrupt Enable Flag Trap Flag Sign Flag Zero Flag Auxiliary Carry Flag Parity Flag Carry Flag 38 Mis 1 lorsque la t che courante est associ e la t che pr c dente 0 sinon Contient un nombre qui indique le ni veau de privil ge du programme en cours d ex cution Mis 1 si une op ration provoque un d passement de capacit Fixe le sens dans lequel seront ef fectu es les op rations de traitement de cha nes de caract res STD le met 1 CLD 0 Mis 1 il autorise les interruptions S il vaut 0 il les emp che Mis 1 il force le processeur fonc tionner pas pas Prend la valeur du bit de poids fort de l accumulateur apr s un calcul Mis 1 si le r sultat d un calcul i e le contenu de l accumulateur vaut 0 Mis 1 si un calcul en BCD non com pact produit une retenue Mis 1 si les 4 bits de poids faible du r sultat contiennent un nombre pair de 1 Mis 1 si un calcul produit une retenue Annexe B Descriptif des directives Toutes les directives commencent par un point B 1 Les directives indiquant une section data Segment de donn es Syntaxe data Description Cette directive indique le d but d un segment contenant des donn es accessible en lecture et en criture Celui ci est d fini lors de la compilation son contenu est modifiable lors de l ex cution et il est g n ralement destin aux variab
24. entier N cod sur plusieurs caract res saisie finie par retour chariot et affiche un carr compos de de c t N 3 3 2 Ouverture et fermeture d un fichier Exercice 8 Manipulation de fichiers 1 Cr er un fichier foo essai et remplissez le avec un descripteur de fichier bar essai 2 Apr s avoir cr un fichier contenant un descripteur de fichier construisez un pro gramme assembleur qui lit ce fichier et place le descripteur de fichier en m moire 23 3 En supposant que le descripteur de fichier pr c dent n est pas associ un fichier existant construire un programme assembleur qui cr e un fichier du m me nom et stocke l int rieur la cha ne de caract res repr sentant le descripteur de fichier ainsi que le num ro d acc s cod sur 2 octets 24 Chapitre 4 Transferts et stockage de donn es 4 1 Transferts de donn es 4 1 1 L instruction mov Cette instruction s utilise comme suit mov source destination La destination et la source peuvent tre repr sent es par des constantes des registres des tiquettes ou des r f rences m moire Nous avons d j utilis l instruction mov avec des registres ou des tiquettes comme op randes Par exemple mov label eax place le contenu de l espace m moire correspondant l tiquette label dans le registre eax mov label eax place l adresse correspondant l tiquette label dans le registre eax mov
25. er votre code source Dans le cas contraire le processeur continuera d ex cuter le segment de code bien apr s la fin de votre derni re instruction Pour viter ce comportement qui ne peut que se terminer par une faute de segmentation il convient de faire appel au syst me d exploitation pour terminer l ex cution de votre programme en utilisant le bout de code ci dessus nous reviendrons sur ce point lors de l tude du th me 3 Synth se Pour conclure nous obtenons donc le code source suivant data UnNom long 43 d efinition d un entier cod e sur 4 octets long 54 long 23 on aurait pu d efinir cette suite d entiers long 32 par long 43 54 32 76 long 76 string hello world Des donn ees dont on ne se sert pas float 3 14 UnAutre space 4 text globl _start _Start movl 5 eax EAX va nous servir de compteur indiquant le nombre d entiers restant a additionner movl 0 ebx EBX va contenir la somme de ces entiers movl UnNom ecx ECX va lt lt pointer gt gt sur 1 el ement courant a additionner top addl ecx ebx Additionne au contenu de EBX ce qui est point e par ECX et stocke le r esultat dans EBX 7 addl 4 ecx D eplace le lt lt pointeur gt gt sur 1 el ement suivant decl eax D ecr emente le compteur EAX jnz top Si le contenu de EAX est non nul alors ex ecuter le code
26. ers Current language auto currently asm gdb On constate que cette fois l invite gdb se pr sente avant la fin normal du programme Pour provoquer uniquement l ex cution de l instruction movl 0 ebx on peut utiliser la commande step gdb step 27 movl UnNom ecx ECX va lt lt pointer gt gt sur 1 el ement gdb Pour provoquer l ex cution de l ensemble des instructions comprises entre la position cou rante et le prochain point d arr t on peut utiliser la commande continue Ainsi si on reprend le processus ci dessus depuis le d but espoir lifl fr sedoglav Sources gdb q sum gdb break 26 Breakpoint 1 at 0x8048079 file sum s line 26 gdb break top Breakpoint 2 at 0x8048083 file sum s line 29 gdb run Starting program home Sources sum c Breakpoint 1 _start at sum s 26 26 movl 0 ebx EBX va contenir la somme de ces entiers Current language auto currently asm 11 gdb continue Continuing Breakpoint 2 top at sum s 29 29 top addl ecx ebx gdb En combinant ces commandes on peut pas pas ex cuter toutes les instructions du pro gramme jusqu sa fin naturelle Il ne nous reste plus qu jeter un coup d oeil dans les entrailles de la machine Affichage du contenu des registres et de la m moire Pour afficher le contenu d un registre disons ecx il faut d j se placer en mode pas a pas et puis utilise
27. esser 8 Mo de code et de donn es cadenc 6 8 10 12 ou 16 Mhz Il introduit deux modes d adressage r el ou prot g 1985 le 80386 est un faux 32 bits adressant 4 Go et cadenc 16 20 ou 25 Mhz 1989 le 80486 est un vrai 32 bits dot d une m moire cache int gr e et d une unit de calcul en virgule flottante 1993 le 80586 appel pentium pour des raisons de protection commerciale dispose d un bus de donn es de 64 bits et est muni d un dispositif de pr vision des branchements Il est constitu de 2 processeurs en pipe line parall les lui permettant d ex cuter deux ins tructions en m me temps Initialement cadenc 66 Mhz son cadencement 200 MHZ est mis sur le march en 1996 1995 le Pentium Pro est constitu de 6 millions de transistors contre 275000 pour le 386 1 million pour le 486 et 3 pour le pentium et la dimension des traits de ses transistors est de 0 6 microns contre 11 5 pour le 386 Il peut traiter 250 millions d instructions par seconde 2000 le Pentium III est cadenc a 1 Ghz En 2001 l Itanium est lanc c est un processeur disposea d une architecture 64 bits Les processeur X86 disposent maintenant d une extention 64 bits l architecture 1A32 mais sans rapport avec l IA64 de l itanium Ces architectures ne seront pas abord dans ce cours 1 2 Registres g n ralistes de la famille des processeurs 32 bits Intel Pour manipuler des donn es les processeur
28. est source destination idata reg idata mem reg reg mem reg reg mem Description Cette instruction copie le contenu de l op rande src dans l op rande dest Drapeaux OF DF IF TF SF ZF AF PF CF pop d pilement de donn es Syntaxe gas ATT et op randes possibles pop popw popl STC STC STC STC reg mem Description Cette instruction incr mente de 4 octets la valeur de SP Attention lorsque la pile est vide SP pointe sous la pile emplacement m moire en dessous de la base de la pile et un nouveau pop provoquera une erreur Drapeaux OF DF IF TF SF ZF AF PF CF 49 push empilement de donn es Syntaxe gas ATT et op randes possibles push dest st pushw dest Hi a pushl dest S mem Description Lorsque l on empile un l ment sur la pile l adresse conte nue dans SP est d cr ment e de 4 octets car un emplacement de la pile fait 32 shannon de longueur En effet lorsque l on parcourt la pile de la base vers le sommet les adresses d croissent Drapeaux OF DF IF TF SF ZF AF PF CF C 3 Sauts jmp saut inconditionnel Syntaxe gas ATT et op randes possibles dest reg moy dest mem idata offset Description Cette instruction effectue un saut inc
29. est non nul et si ZF 1 loopne d cr mente CX et saut si ce registre est non nul et si ZF 0 loopnz d cr mente CX et saut si ce registre est non nul et si ZF 0 2 4 Exercices Exercice 6 Tri d une suite d entiers Construisez un programme assembleur qui tant donn une suite d entiers d finie dans le segment de donn e Input word 24 7 274 2 504 1 13 149 4 81 44 fait le tri de cette suite et stocke le r sultat dans une autre partie de ce m me segment qui aura t r serv e Correction 20 Chapitre 3 Appels syst mes par le biais d interruptions 3 1 M canisme d interruption La notion d interruption se base sur un m canisme par lequel certaines composantes physiques horloge E S m moire processeur peuvent interrompre le traitement normal du processeur Une interruption est la commutation d un processus un autre provoqu e par un signal du mat riel Il existe diff rents types de signaux provoquant une interruption logiciel division par z ro r f rence m moire en dehors de l espace autoris au proces sus d passement de capacit pile appel syst me temporisateur le processeur permet l OS d effectuer r guli rement certaines fonc tions ordonnancement mise jours E S signale l ach vement normal d une op ration ou une erreur d faillance mat rielle coupure d alimentation erreur de parit m moire Gestion des interrupt
30. ions et vecteur des interruptions du pentium Il existe un controleur d interruption qui peut masquer certaines interruptions dans des phases critiques du fonctionnement de l unit centrale hi rarchiser les interruptions lorsque plusieurs d entre elles interviennent en m me temps m me mod le que l ordonnancement Une partie de la gestion des interruptions est implant e directement dans le silicium sous forme d une table Une fois un signal d tect il faut pouvoir d terminer la cause de l inter ruption Pour ce faire on utilise 256 indicateurs qui pour le pentium sont 21 arr t HR oO D HO erreur de division exception de d verminage interruption nulle d passement interne d tect d passement de limite op ration code invalide p riph rique indisponible faute sur type double d passement de segment coprocesseur segment d tat de t che invalide segment non pr sent 12 faute de pile 13 protection g n rale 14 d faut de page 15 r serv par INTEL 16 erreur virgule flottante 17 controle d alignement 18 contr le machine 19 31 r serv INTEL 32 255 interruptions masquables 3 2 Interruptions et appels syst me du noyau Linux Un processus peut provoquer une interruption En assembleur celle ci est engendr e par l instruction int suivie du num ro d un service Par exemple pour ex cuter une fonction du noyau Linux depuis un code assemb
31. les globales rodata Segment de donn es en lecture seule Syntaxe rodata Description Cette directive indique le d but d un segment contenant des donn es uniquement accessible en lecture Celui ci est d fini lors de la compilation son contenu est modifiable lors de l ex cution et il est g n ralement destin aux variables globales 39 bss Segment de stockage de donn es Syntaxe bss Description Cette directive indique le d but d un segment Ce segment n est d fini que lors de l ex cution de votre programme et contient des octets initialis s 0 Il est destin contenir des variables non initialis es et ou fournir de l espace m moire de stockage text Segment de code Syntaxe text Description Cette directive indique le d but d un segment Celui ci est d fini lors de l assemblage et contient le code ex cuter Bien qu on puisse le modifier dynamiquement c est vivement d conseill De plus ce segment peut tre partag entre plusieurs processus B 2 Indications sur la taille du codage byte D claration d un nombre sur 1 octet Syntaxe byte NB ou byte NB1 NBn Description Pour chaque nombre NB ce nombre est cod sur 1 octet l ex cution long D claration d un nombre sur 4 octets Syntaxe long NB ou long NB1 NBn Description Pour chaque nombre NB ce nombre est cod sur 4 octets l ex cution zero R servation
32. leur on peut utiliser le service int 0x80 Une interruption est alors provoqu e i e un code constitutif du noyau est ex cut Pour mener bien cette ex cution il faut de plus conna tre la fonction du noyau ex cuter comment transmettre les arguments cette fonction comment r cup rer la sortie de cette fonction Ces informations transitent par certains registres la fonction ex cuter est d finie par le contenu du registre eax et la table 3 1 les arguments transmettre sont d termin s par les registres ebx ecx edx esi et edi le code de retour de la fonction est stock dans le registre eax De plus certaines donn es pass es en argument peuvent tre modifi es par la fonction appel e eax Nom Code source ebx Yecx Yedx esi Yedi 1 sys exit kernel exit c int 2 sys_fork arch i386 kernel process c strucl pt_regs 3 sys_read fs read_write c unsigned int char size_t 4 sys_write fs read_write c unsigned int char size_t 5 sys_open fs open c const char int int 6 sys_close fs open c unsigned int Fic 3 1 Table des appels syst mes Linux D s la fin de la fonction appel e l ex cution du programme assembleur reprend a instruction suivant l interruption 22 Un descriptif plus complet de ces appels syst me est disponible en annexe D 3 3 Gestion d entr e sortie Avant de manipuler des inte
33. m 5 lt data variable no debug info gt 0x80490a0 gdb print amp UnNom 6 lt data variable no debug info gt 0x80490a0 gdb print 0x80490a0 7 43 gdb print amp UnNom 8 43 gdb print amp UnNom 1 9 54 gdb Le pr fixe amp permet d avoir acc s l adresse de l objet et le pr fixe au contenu d une adresse On peut ainsi parcourir l espace m moire notez que l arithm tique est propre aux pointeurs i e additionner 1 notre adresse consiste additionner le nombre d octets qui codent l objet en m moires ici 4 octets Remarque 8 Dans notre code source le label UnNom du segment de donn es pointait sur une suite de donn es de type diff rents des long et une cha ne de caract res Ce choix s av re ici peu judicieux car gdb print amp UnNom 2 10 23 gdb print amp UnNom 3 11 32 gdb print amp UnNom 4 12 76 gdb print amp UnNom 5 13 1819043176 gdb 13 On obtient directement le bloc de donn es hell constitu de 4 octets sans pouvoir les dis tinguer directement Il faut ruser un peu gdb print amp UnNom 5 13 lt data variable no debug info gt 0x80490b4 gdb printf s n amp UnNom 5 hello world gdb printf c n 0x80490b4 h gdb printf c n 0x80490b5 e gdb printf c n 0x80490b6 Remarque 9 Plus g n ralement il est possible d obtenir l affichage d une zone m
34. moire grace a la commande x gdb x 5dw 0x80490a0 0x80490a0 lt UnNom gt 43 54 23 32 0x80490b0 lt UnNom 16 gt 76 gdb x 12cb 0x80490b4 0x80490b4 lt UnNom 20 gt 104 h 101 e 108 1 108 71 111 0 32 119 w 111 o 0x80490bc lt UnNom 28 gt 114 r 108 1 100 d O 0 Pour plus d information sur cette commande utilisez l aide en ligne de gdb Dans le chapitre suivant nous reviendrons sur la structure de la m moire 1 6 Exercices Exercice 1 Calcul de factorielle En utilisant l exemple donn pr c demment crire un programme qui calcule et stocke dans le registre ebx la factorielle de 4 Les instructions arithm tiques n cessaires sont d crites dans l annexe C V rifier l ex cution de votre programme avec gdb Modifiez votre programme pour calculer la factorielle de 5 puis celle de 6 Que constatez vous concernant le stockage des r sultats dans les registres Modifiez votre programme pour que la valeur dont il faut calculer la factorielle soit en m moire de donn es et le r sultat stock en m moire galement Correction Nous avons utilis dans ce programme l instruction assembleur jnz sans la d crire Ce type d instruction de saut et la notion abstraite d instructions de contr le constituent le sujet de la section suivante 14 Chapitre 2 Structures de contr le Dans notre contexte on appelle structure de contr le toute s que
35. nce d instructions qui permet de contr ler la succession des actions d un programme En ce qui concerne l assem bleur il s agit exclusivement de s quence d instructions de sauts conditionnels 2 1 Organisation de la m moire segments et offsets Sur une architecture 32 bits la m moire physique peut tre consid r e comme une suite d octets chaque octet est associ un num ro de 0 2 1 ainsi on peut adresser environ 4 gigaoctets de m moire Abstraction de la m moire La segmentation permet au programmeur de voir un pro cessus en m moire sous la forme de plusieurs espaces d adressages les segments Ainsi chaques composantes du programme pile code tas donn es etc peut avoir son propre segment Par exemple le code binaire du programme en cours d ex cution stock ou non en m moire physique peut tre accessible par un segment Dans cette abstraction le code est vue comme une suite d octets indic e de 0 2 1 En th orie un segment peut donc recouvrir l ensemble de la m moire mais on n utilise pas la totalit de cette derni re le processeur permet de limiter l acc s cet espace Mode d adressage et notion de saut Pour acc der un octet le processeur propose 3 m canismes d adressages l adressage direct un registre 32 bits contient une adresse l adressage semi direct que nous n expliciterons pas l adressage logique On
36. ne expression arithm tique cod e en postfixe par une cha ne de caract res il suffit de parcourir cette derni re et d empiler les entiers que l on rencontre lorsque l on rencontre un op rateur il nous faut d piler les 2 derniers entiers leur appliquer l op rateur empiler le r sultat une fois le parcours termin le r sultat du calcul devrait tre d pil et affich Exercice 12 Convertion de la notation infixe la notation postfixe On se propose de compl ter l exercice pr c dant de mani re ce que l entr e soit une cha ne ce caract res repr sentant le codage infixe d une expression arithm tique on s autorise l utilisation des parenth ses Pour ce faire il nous faut convertir ce codage infixe en codage postfixe Pour implanter notre premi re tape on va s aider d un automate Il s agit d une repr sentation d un algo rithme compos e d tats et de transitions Dans la figure 4 1 les transitions correspondent aux fl ches du diagramme et les tats aux encadr s Dans le programme assembleur associ les transitions seront implant es par des sauts et les tats par des bouts de code On suppose que la formule de d part est stock e en m moire sous la forme d une cha ne de caract res cod e par le standard ASCII la fin de la cha ne est repr sent e par une virgule On dispose d une pile et d une adresse RES o le r sultat sera stock
37. nt la somme de 5 entiers stock s en m moire et qui stocke le r sultat en m moire ce fichier nous permettra de nous familiariser avec la structure d un programme assembleur Remarque 4 Tout texte compris entre les symboles et est un commentaire qui n est pas pris en compte par le compilateur Il existe bien d autres d limiteurs de commentaires par exemple d pendant de l architecture et qui sont d crit dans le manuel de gas Le fichier source d un programme assembleur est divis en au moins deux segments 1 Le segment de donn es 2 Le segment de texte qui contient le code source assembleur 1 4 1 Segment de donn es Ce segment commence par la ligne data Remarque 5 Tout nom commen ant par est une directive de compilation une instruc tion au compilateur et non pas une instruction que le compilateur doit traduire en langage machine L ensemble des directives est disponible dans la section Pseudo Ops du manuel en ligne info as Dans notre cas il s agit de pr ciser que ce qui suit sont des donn es Pour organiser les segments on utilise des labels aussi appel tiquette A nsi pour stocker des donn es 5 entiers longs par exemple et une cha ne de caract res le fichier source assembleur doit contenir dans son segment de donn es le texte suivant UnNom long 43 d efinition d un entier cod e sur 4 octets long 54 long 23 on aurait pu d efinir cette s
38. ogramme int 0x80 assembleur et sont indispensables Explicitons pr sent l instruction movl 0 ds 4 edx 4eax 2 Elle place la constante 0 dans la m moire l adresse sp cifi e par le registre de segment ds dans le segment dont le num ro est dans le registre ds i e dans le segment de donn es le registre de base edx ce registre contient la base du d placement relatif et dans notre cas l offset de l tiquette var cette base s ajoute un entier d fini par le registre de d calage eax qui contient 2 dans notre exemple multipli par le facteur de d calage qui est 2 dans notre exemple auquel pour finir on ajoute le d placement 4 dans notre cas Ce qui donne offset de var 2 x 2 4 offset de var Ainsi dans l exemple ci dessus l instruction movl 0 ds 4 edx eax 2 est une fa on compliqu e d crire movl 0 var Remarque 10 Le facteur de d calage peut prendre les valeurs 1 2 4 ou 8 s il n est pas sp cifi sa valeur par d faut est 1 Les r f rences m moire peuvent pr senter une syntaxe simplifi e ainsi dans la r f rence valide 4 ebp seuls le registre de base et le d placement sont sp cifi s Attention le registre de segment dans ce cadre est ss comme indiqu dans l annexe A 1 foo eax 4 le registre de segment non indiqu est ds Le segment de base est nul et on utilise le d placement sp cifi par l tiquette foo en guise de base
39. ogramme dans l environement gdb kill arr t d finitif d un programme Manipulation des points d arr t break FCT placer un point d arr t au d but de la fonction FCT break ADDR placer un point d arr t l adresse ADDR break NUML placer un point d arr t la ligne NUML disable NUM inactive le point d arr t NUM enable NUM r active le point d arr t NUM delete NUM supprime le point d arr t NUM delete supprime tous les point d arr ts 97 step step NUM next next NUM until LOC continue continue NUM finish where list list NUML disas disas ADDR Ex cution d un programme pas pas ex cute une instruction l mentaire ex cute NUM instructions l mentaires ex cute une instruction y compris les fonctions appel es ex cute NUM instructions y compris les fonctions appel es ex cute les instructions jusqu ce que LOC soit atteint reprend l ex cution reprend l ex cution en ignorant les points d arr t NUM fois ex cute jusqu ce que la fin de la fonction en cours affiche la position actuelle Affichage du code et des donn es affiche le code source par paquet de 10 lignes affiche le code source a partir de NUML affiche le code autour de la position courante affiche le code autour l adresse ADDR disas ADDR1 ADDR2 affiche le code entre les adresses ADDR1 et ADDR2 print REG print x REG print t SREG print c REG print a
40. onditionnel Elle ne modifie pas les drapeaux courant indiqu s ci dessous L adresse des tination peut tre sp cifi e de mani re absolue une adresse stock e dans un registre une m moire ou relative une valeur imm diate ventuellement n gative Drapeaux OF DF IF TF SF ZF AF PF CF 50 C 4 Appel de fonction leave Instruction pr c dent la fin d une fonction en C Syntaxe gas ATT et op randes possibles leave Description Cette instruction copie le contenu du registre de cadre ebp dans le registre de pile esp puis d pile la pile destination du registre ebp Cette instruction pr c de g n ralement l instruction ret Drapeaux OF DF IF TF SF ZF AF PF CF call Appel de fonction Syntaxe gas ATT et op randes possibles dest reg call dest mem idata offset Description Cette instruction empile l adresse de l instruction qui la suit et effectue un saut l adresse dest L adresse destination peut tre sp cifi e de mani re absolue une adresse stock e dans un registre une m moire ou relative une valeur imm diate ventuellement n gative Par exemple l instruction call 0x3 effectue un branchement une ins truction se trouvant 3 octets plus loin dans le segment de code Drapeaux OF DF IF TF SF ZF AF PF CF
41. opl op2 cmp opl op2 idata reg cmpb opl op2 idata mem cmpl opl op2 reg reg cmpw opl op2 mem reg reg mem Description Cette instruction compare op1 op2 et positionne des drapeaux du registre EFLAGS suivant le r sultat Condition Comparaison sign e Comparaison non sign e opl j op2 ZF 0 et SF OF ZF Det CF opl j op2 SF OF CE a opl op2 ZF 1 ZE SS 4 opl op2 ZF 1 ou SF OF ZF 1 ou CF 1 Drapeaux OF DF IF TF SF ZF AF PF CF dec d cr mentation Syntaxe gas ATT et op randes possibles dec op decb op a decw op reg decl op Description Cette instruction soustrait 1 op Drapeaux OF DF IF TF SF ZF AF PF CF 45 div division d entiers non sign s Syntaxe gas ATT et op randes possibles div op divb op oP divw op ee divl op isk Description Si l op rande de cette instruction est cod e sur 8 bits le contenu du registre AX est divis par l op rande le quotient est stock dans AL et le reste dans AH Si l op rande de cette instruction est cod e sur 16 bits l entier d fini par la paire de registre DX AX est divis par l op rande le quotient est stock dans AX et le reste dans DX Dans la pair de registre DX AX le poids faible est AX Si op rande
42. r la commande print espoir lifl fr sedoglav home Sources gdb q sum gdb break 27 Breakpoint 1 at 0x804807e file sum s line 27 gdb run Starting program home Sources sum Breakpoint 1 _start at sum s 27 27 movl UnNom ecx ECX va lt lt pointer gt gt sur 1 el ement Current language auto currently asm gdb print ecx 1 0 gdb step 29 top addl ecx ebx gdb print ecx 2 134516896 gdb print x ecx 3 0x80490a0 gdb printf registre x en hexa et d en decimale n ecx ecx registre 80490a0 en hexa et 134516896 en decimale gdb info register eax 0x5 5 ecx 0x80490a0 134516896 edx 0x0 0 ebx 0x2b 43 esp Oxbffff710 Oxbffff710 ebp 0x0 0x0 esi 0x0 0 edi 0x0 0 eip 0x8048085 0x8048085 eflags 0x200306 2097926 cs 0x23 35 ss 0x2b 43 ds 0x2b 43 es 0x2b 43 fs 0x0 0 12 gs 0x0 0 fctrl Ox37f 895 fstat 0x0 0 ftag Oxffff 65535 fiseg 0x0 0 fioff 0x0 0 foseg 0x0 0 fooff 0x0 0 fop 0x0 0 gdb Remarquez que l on peut aussi utiliser la commande printf qui nous permet d afficher le contenu du registre comme en C ici en hexad cimal dans une chaine de caract res La commande info register fournie la liste des registres ainsi que leurs contenus En utilisant les m mes commandes il nous est possible de d terminer le contenu du segment de donn es en m moire l aide des labels gdb print UnNom 4 43 gdb print amp UnNo
43. rruptions d entr e sortie il nous faut pr senter les notions de descripteur de fichier et de num ro d acc s Un descripteur de fichier correspond une cha ne de caract res ASCII d au plus 128 octets termin e par un 0 Cette cha ne est compos e d un chemin d acc s et d un nom de fichier Ce nom est la seule information non optionnelle Le descripteur peut tre compos de caract res sp ciaux etc Un num ro d acc s est associ par le syst me d exploitation chaque fichier Ce num ro cod sur 2 octets permet d identifier le fichier lors des manipulations De plus no tons que certains p riph riques sont g r s comme des fichiers ainsi l entr e standard usuellement le clavier correspond le num ro d acc s 0 et on a les correspondances num ro support 0 1 2 3 4 entr e standard sortie standard usuellement cran sortie d erreur idem sortie auxiliaire usuellement un port sortie d impression 3 3 1 Lecture et criture Exercice 7 Entr e et sortie standard 1 Ecrire un programme qui lit au clavier un entier N cod sur un caract re de 0 9 donc et affiche une ligne de N caract res 2 crire un programme qui lit au clavier un entier N cod sur plusieurs caract res saisie finie par retour chariot code ASCII 13 et affiche une ligne de N caract res 3 Ecrire un programme qui lit au clavier un
44. s 32 bits de type Intel poss dent quatre re gistres de 32 bits usage g n raux nomm s eax ebx ecx et edx Il est possible de n utiliser qu une portion de ces registres constitu e de 16 bits dans le cas du registre eax cette portion est nomm e ax les processeurs intels tait l origine d une capacit de 16 bits le e de eax signifiant extended Pour finir notons que chacun de ces registres 16 bits peut tre d composer en deux registres de 8 bits Par exemple le registre ax est constitu des registres ah et al High et Low respectivement Ce principe est illustr par la Figure 1 1 registres 16 et 8 bits registres 32 bits bits 15 8 7 0 bits 31 16 15 0 ax Zah al eax Tax bx bh bl ebx bx ex ch el ecx ex dx dh dl edx dx Fic 1 1 Les registres g n ralistes d un processeur Intel 32 bits Remarque 1 Ces registres ne sont pas tous ind pendants si le registre AL est modifi il en est de m me des registre AX et EAX alors que le registre AH n est pas affect ainsi que les autres registres Remarque 2 Des registres 64 bits sont form s par la conjonction de 2 registres 32 bits edx eax et utilis s lors de certaines op rations mul 1 3 Exemple d instruction assembleur le mouvement de donn es Pour stocker des informations dans un registre nous disposons de la famille d instructions assembleur mov
45. s SP est d cr ment e de 4 octets car un emplacement de la pile fait 32 shannons En effet lorsque l on parcourt la pile de la base vers le sommet les adresses d croissent pop reg d piler vers le registre reg Cette instruction incr mente de 4 octets la valeur de SP Attention lorsque la pile est vide SP pointe sous la pile l emplacement m moire en dessous de la base de la pile et un nouveau pop provoquera une erreur Il est aussi possible pour lire ou modifier des valeurs dans la pile d utiliser les r f rences m moire Exercice 11 Implantation d une calculette l mentaire On se propose de r aliser une calculette qui prend en entr e une cha ne de caract res repr sentant une expression arithm tique en notation postfixe et qui affiche le r sultat de l valuation de cette expression Par exemple on d sire fournir notre programme par le biais de l entr e standard la cha ne de caract res 3 5 4 et que notre programme affiche 32 Format des entr es Nous nous limitons l alphabet 0 9 pour faire simple Pour des expressions arithm tiques sur cet alphabet comme par exemple 29 on dispose de plusieurs codages possibles sous forme d une cha ne de caract res pr fixe 1 7 2 4 infixe 1 7 2 4 postfixe 1 7 2 4 Dans cette exercice nous allons utilisez ce dernier codage Principe de l valuation Pour calculer u
46. signant la valeur 1 si le contenu de eax est nul ce comportement est indiqu dans la description de cette instruction dans l annexe C L instruction jnz top provoque un saut si et seulement si le drapeau ZF est positionn 0 Cette instruction est appel e jump if non zero et en tire son nom On obtient ainsi une structure it rative permettant la sommation dans le code ci dessus Le tableau suivant regroupe les instructions conditionnelles de saut ainsi que la valeur des drapeaux correspondantes INSTRUCTION Conditions de saut Indicateurs pour valeurs non sign es JB JNAE below not above or equal CF 1 JAE JNB above or equal not below CF 0 JBE JNA below or equal CF 1 et ZF 1 JA JNBE above not below or equal JE JZ equal zero ZF 1 JNE JNZ not equal not zero ZF 0 pour valeurs sign es JL JNGE less than not greater than SF NOT OF JGE JNL greater or equal not less than SF OF JLE JNG less or equal not greater than ZF 1 ou SF NOT OF JG JNLE greater than not less or equal ZF 0 ou SF OF JP JPE Parity even paire PF 1 JNP JNPO Parity odd impaire PF 0 JS sign SF 1 JNS non sign SF 0 JC retenue CF 1 JNC pas de retenue CF 0 JO overflow OF 1 JNO pas d overflow OF 0 17 2 3 1 Conditionnelles L instruction cmp permet de comparer deux op randes Cette comparaison est bas e sur la soustraction de la premi re op rande ave
47. tenir des offsets lors des op rations d affichage ou de saisie par exemple 39 Le registre EIP Instruction Pointer Le registre EIP contient l offset de la prochaine instruction ex cuter Il est modifi automatique chaque ex cution et peut tre manipul par des instruction du type jmp call ret etc On ne peut pas acc der directement ce registre Le registre EDI Destination Index et le registre ESI Source In dex Ces registres sont utilis s lors des op rations sur les manipulations copie etc de suites d octets Le registre CS Code Segment Ce registre 16 bits contient le num ro du segment m moire dans lequel sont stock es les instructions assembleur du code ex cuter On ne peut pas acc der directement ce registre Le registre SS Stack Segment Ce registre 16 bits contient le num ro du segment m moire dans lequel est stock e la pile On peut acc der directement ce registre ce qui permet d utiliser plusieurs piles Le registre ESP Stack Pointer Ce registre 32 bits contient le d placement pour atteindre le sommet de la pile La partie basse 16 bits de ce registre peut tre utilis e comme le registre SP Le registre EBP Frame Base Pointer Ce registre 32 bits contient un d placement correspondant a une position dans la pile Ce registre sert pointer sur une donn e dans la pile La partie basse 16 bits de ce registre peut tre utilis e comme le registre BP
48. tenu dans eax cltd tend un long sign contenu dans eax en un double long sign contenu dans edx eax Suffixes de conversion Plus g n ralement l instruction mov admet des suffixes 2 ni veaux indiquant une conversion Le premier niveau indique si on tend la taille de codage en conservant le signe movs ou en tendant le codage par des 0 movz Le second niveau indique la taille de d part et celle d arriv e bl de octet long bq de octet quadruple mot bw de octet mot wq de mot quadruple mot wl de mot long lq de long quadruple mot Ainsi l instruction movzbl d1 eax d place l octet contenu dans le registre dl dans le registre eax en le compl tant par des 0 4 2 Manipulation de la pile Sch matiquement une pile est une structure de donn es lin aire pour laquelle les in sertions et les suppressions d l ments se font toutes du m me cot On parle de structure LIFO Last In First Out Plus formellement on peut consid rer un ensemble d l ments E et noter Pil E len semble de toutes les piles sur Par exemple les entiers peuvent constituer l ensemble E la pile vide P est dans Pil Les op rations usuelles sur une pile sont estVide est une application de Pil dans vrai faux est Vide P est vrai si et seule ment si P est la pile Po empiler est une application de E x Pil dans Pil depiler est une application de Pil E
49. tfixe Quand un caract re est r cup r dans la m moire il est soit empil soit stock dans RES Un chiffre est toujours stock dans la m moire Par contre si le caract re est un symbole etc l action a effectu e d pend de ce que contient la pile Consid rons le cas o la cha ne de d part est 1 1 1 les tableaux suivants 1 repr sente chaque tape la m moire contenant la cha ne d entr e 2 repr sente la pile et 3 la m moire contenant le r sultat 1 ee 1 1 40 t 7 Eyal he ag Ci I ess 1 2 3 1 2 6 Le tableau suivant indique les transitions effectu es partir de l tat analyse et d cision Il est malheureusement incomplet n y figure que les transitions d duites des tableaux 31 pr c dents caract re r cup r p aR 5 3 3 sommet de la pile 3 3 fe Oa E vide 4 1 e e eS oI Reo ik OO oe vide 5 4 3 3 1 5 1 5 D Fic 4 2 Table de d cisions utilis es dans l tat analyse et d cision Questions 1 Construisez un programme qui prend en entr e une cha ne ce caract res repr sentant le codage infixe d une expression arithm tique on s autorise l utilisation des parenth ses et qui affiche le codage postfixe correspondant 2 Modifiez le programme de l exercice pr c dent afin que l entr e soit un codage infixe 3 Modifiez vos programmes afin que l on p
50. tion voir 2 De plus en utilisant la commande info as dans un interpr teur de commande on acc de au manuel d utilisation de gas Conventions typographiques Dans ce document nous utilisons les conventions sui vantes foo repr sente la commande foo dans un interpr teur de commandes foo repr sente la commande foo dans un environement par exemple gdb foo repr sente une instruction assembleur Le guide d utilisation de gas Ce document n est pas un manuel pr sentant le gnu assembleur pour ce faire nous sugg rons l utilisation du guide d utilisation accessible depuis un interpr teur de commandes par l instruction info gas lqui rapport l architecture Chapitre 1 Prise en main de l assembleur gas L objectif de cette section est d crire compiler et ex cuter sans trop de douleur son premier programme assembleur 1 1 Descriptif sommaire de la famille des processeurs Intel iAPx86 Il s agit d une famille de processeurs compatibilit ascendante i e le code des plus anciens est toujours compris et correctement ex cut par les plus r cents Dans cette famille on peut citer 1978 le 8086 dispose d un bus de 16 bits pour les donn es Sa capacit d adressage est de 1 Mo et il est cadenc 4 77 ou 8 Mhz 1979 le 8088 est la version 8 bits du 8086 il a les m mes caract ristiques mais un assembleur plus r duit 1982 le 80286 est une machine 16 bits pouvant adr
51. uisse manipuler des nombres et non plus des chiffres 32 Chapitre 5 Appel de fonction et passage d argument 34 Annexe A Architecture de type Intel 32 bits A 1 Les registres d un processeur 32 bits de type Intel Pour plus d information sur ce sujet nous renvoyons au manuel 1 Un processeur 32 bits de type Intel dispose de 16 registres qui sont classables en trois cat gories les 8 registres g n ralistes utilis s pour contenir des donn es et des pointeurs les registres de segments utilis s pour contenir l adresses des diff rents segments donn es code etc les registres de contr le et de statut qui donnent des informations sur l ex cution du programme en cours Le registre d accumulation eax Ce registre g n raliste peut contenir les donn es des utilisateurs Remarque 11 Ce registre joue le r le d op rande implicite dans de nombreuses op rations mul div etc Dans ce cas le r sultat de l op ration est stock dans ce m me registre Le registre ebx base index utilis comme pointeur sur les donn es Usuellement ce registre contient un offset relatif au segment de donn es permettant de rep rer une information de ce segment Le registre ECX utilis comme compteur Ce registre est utilis pour les boucles et les op rations sur les cha nes de caract res Le registre EDX utilis pour les entr es sorties Ce registre est g n ralement utilis pour con
52. uite d entiers long 32 par long 43 54 32 76 long 76 string hello world Des donn ees dont on ne se sert pas float 3 14 Les directives long indiquent le codage des entiers sur 32 bits et la directive string indique qu une suite d octets cons cutifs sera r serv e et instanci e en m moire lors de l ex cution un octet pour le code ascii de chaque lettre de la cha ne plus un dernier octet initialis 0 Notez que pour coder un flottant on utilise la directive float Le label UnNom peut tre utilis dans le segment de code afin de r f rencer les donn es correspondantes cf section suivante Remarque 6 Il est possible de r server de l espace non initialement affect par exemple le texte UnAutre space 4 permet de r server 4 octets en m moire 1 4 2 Segment de texte Ce segment commence par la directive text Afin d ex cuter le code r sultant de la compilation de notre programme assembleur il faut d finir un point d entr e i e un point de d part Pour ce faire on utilise la directive globl et un label Par exemple le code globl _start indique que le label _start peut tre accessible par tous programmes l utilisant condition que l dition de liens entre ce programme et le programme que nous sommes en train d crire aura t fa te Par d faut l ex cution du programme commencera par l instruction assembleur imm diatement post rieure au
53. un premier temps puis l inter face graphique ddd Un r capitulatif des principales commandes de gdb est disponible dans l annexe E IL auteur n arrivant pas utiliser correctement cette interface peu de place y sera consacr e dans ces notes L environnement gdb permet d ex cuter des programmes pas pas et d examiner la m moire Il dispose d un guide utilisateur accessible par la commande info gdb Pour utiliser gdb il suffit de l invoquer dans son interpr teur de commandes en lui indiquant le fichier examiner espoir lifl fr sedoglav home Sources gdb sum GNU gdb 5 3 22mdk Mandrake Linux Copyright 2002 Free Software Foundation Inc GDB is free software covered by the GNU General Public License and you are welcome to change it and or distribute copies of it under certain conditions Type show copying to see the conditions There is absolutely no warranty for GDB Type show warranty for details This GDB was configured as i586 mandrake linux gnu gdb Ce programme propose une aide en ligne accessible par la commande help gdb help help Print list of commands gdb help quit Exit gdb Ex cution du programme Le programme consid r peut tre ex cut dans l environnement gdb en utilisant la com mande run gdb run Starting program home Sources sum Program exited normally gdb Comme lors de l ex cution par le biais d un interpr teur de commande
54. user buf size_t count sys_open Ouverture d un flux Description Cette fonction ouvre un flux un fichier de nom filename et retourne l identificateur assoc Entr e s eax 5 ebx un pointeur sur la cha ne de caract re repr sentant le nom du fichier ecx des drapeaux 00 read only 01 write only 10 read write 11 special edx le mode disons 0 sans plus de d tails Sortie s eax contient l identificateur associ au fichier Prototype C asmlinkage long sys_open const char _user filename int flags int mode sys_close Fermeture d un flux Description Cette fonction ferme le flux d identificateur fd Entr e s Yeax 6 ebx l identificateur du flux Sortie s Prototype C asmlinkage long sys _close unsigned int fd 54 D 2 sys_exit Fin de processus Description Cette fonction permet de terminer le processus courant en retournant l entier error_code au processus p re Entr e s eax 1 ebx un entier error _ code Sortie s eax contient le nombre d octets lu Prototype C asmlinkage long sys_exit int error_code 59 96 Annexe E R capitulatif des commandes gdb Lancement et arr t de gdb gdb fichier lancement de l environement gdb quit sortie de l environement gdb Remarque Le raccourci clavier CTRL C ne provoque pas la terminaison de gdb mais in terrompt la commande courante Commandes g n rales run lancement d un pr
55. utilise pour ce faire une adresse logique Cette adresse est com pos e du num ro du segment contenu dans un registre 16 bits et d un offset contenu dans un registre 32 bits C est ce dernier mode d adressage que nous utiliserons Citons comme exemple d adresse logique l adresse de la prochaine instruction ex cuter 15 le registre eip Instruction Pointer contient l offset de la prochaine instruction ex cuter le registre cs Code Segment contient le num ro du segment m moire dans lequel sont stock les instructions assembleur du code ex cuter Effectuer un saut vers une instruction dans le flux d instructions consiste remplacer le contenu du registre eip par l offset de cette instruction Pour illustrer ce point nous allons d crire dans la section suivante une instruction effectuant cette op ration 2 2 Instruction de saut inconditionnelle jmp Cette instruction provoque un saut une adresse pouvant tre sp cifi e par diff rents types d op randes une tiquette d finie dans le segment de code Remarquez que vous pourriez utiliser une tiquette d finie dans un segment de donn es sans que le compilateur ne bronche ce n est qu l ex cution qu une erreur surviendrait un registre g n raliste Si on utilise un registre 8 bits le saut est qualifi de court puisqu il ne peut modifier la valeur du registre eip que d au plus 127 L usage est d

Download Pdf Manuals

image

Related Search

Related Contents

Hardware Manual  OPTICORD / EASYCORD PRESSING  Nilfisk-ALTO Patio Heater Range User's Manual  取付説明書 - TOEX  

Copyright © All rights reserved.
Failed to retrieve file