assembleur_resume.pdf

Upload: sarah-berrada

Post on 21-Feb-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/24/2019 assembleur_resume.pdf

    1/6

    Init Info Techno Hardware OS Rseaux Internet Math Info

    Programmation Liens

    CoursTechInfo>Programmation> Introduction l'assembleur

    But de ces pages

    Les registres du CPU

    Les adresses mmoire

    Assembleur avec DEBUG

    Modes d'adressage

    Assemblage et dition de liens

    Introduction au langage assembleur

    But de ce sujet

    L'objectif de ces pages est de donner un aperu succinct du langage assembleur. Celangage est dit de "bas niveau " car il est troitement li l'architecture du microprocesseur."Registres" , "Adresses mmoires", "Interruptions", "Appels systme" ... voil une srie denotions qui risquent fort de rester thoriques. Ce serait dommage, alors qu'il est si simplede les aborder par la pratique l'aide du langage assembleur et en visualisant l'aide d'undebugger les instructions qui s'excutent et les registres o cela se passe.

    Les registres du processeur

    Les registres dcrits ci-dessous sont les registres du 8086, l'anctre des processeurs quisont au c?ur de nos PC actuels. Ces processeurs ont volu depuis tout en restantcompatibles avec leur anctre (compatibilit ascendante). Cette description devrait doncsuffire se faire une ide de la structure d'un microprocesseur.

    http://www.courstechinfo.be/InitInfo/sommaire.htmlhttp://www.courstechinfo.be/InitInfo/sommaire.htmlhttp://www.courstechinfo.be/Techno/sommaire.htmlhttp://www.courstechinfo.be/Techno/sommaire.htmlhttp://www.courstechinfo.be/Hard/sommaire.htmlhttp://www.courstechinfo.be/Hard/sommaire.htmlhttp://www.courstechinfo.be/OS/sommaire.htmlhttp://www.courstechinfo.be/OS/sommaire.htmlhttp://www.courstechinfo.be/Reseaux/sommaire.htmlhttp://www.courstechinfo.be/Reseaux/sommaire.htmlhttp://www.courstechinfo.be/Internet/sommaire.htmlhttp://www.courstechinfo.be/Internet/sommaire.htmlhttp://www.courstechinfo.be/MathInfo/sommaire.htmlhttp://www.courstechinfo.be/MathInfo/sommaire.htmlhttp://www.courstechinfo.be/Programmation/sommaire.htmlhttp://www.courstechinfo.be/Programmation/sommaire.htmlhttp://www.courstechinfo.be/Liens.htmlhttp://www.courstechinfo.be/Liens.htmlhttp://www.courstechinfo.be/index.htmlhttp://www.courstechinfo.be/index.htmlhttp://www.courstechinfo.be/Programmation/sommaire.htmlhttp://www.courstechinfo.be/Programmation/sommaire.htmlhttp://www.courstechinfo.be/Programmation/sommaire.htmlhttp://www.courstechinfo.be/Programmation/IntroASM.html#Buthttp://www.courstechinfo.be/Programmation/IntroASM.html#Buthttp://www.courstechinfo.be/Programmation/IntroASM.html#Registreshttp://www.courstechinfo.be/Programmation/IntroASM.html#Registreshttp://www.courstechinfo.be/Programmation/IntroASM.html#Adresseshttp://www.courstechinfo.be/Programmation/IntroASM.html#Adresseshttp://www.courstechinfo.be/Programmation/IntroASM.html#DEBUG_Ahttp://www.courstechinfo.be/Programmation/IntroASM.html#DEBUG_Ahttp://www.courstechinfo.be/Programmation/IntroASM.html#ModeAdressagehttp://www.courstechinfo.be/Programmation/IntroASM.html#ModeAdressagehttp://www.courstechinfo.be/Programmation/IntroASM.html#CmdLignehttp://www.courstechinfo.be/Programmation/IntroASM.html#CmdLignehttp://www.courstechinfo.be/Programmation/IntroASM.pdfhttp://www.courstechinfo.be/Programmation/sommaire.htmlhttp://www.courstechinfo.be/Programmation/TstBcc32V55.htmlhttp://www.courstechinfo.be/http://www.courstechinfo.be/Programmation/IntroASM.htmlhttp://www.courstechinfo.be/Programmation/IntroASM.htmlhttp://www.courstechinfo.be/Programmation/IntroASM.html#CmdLignehttp://www.courstechinfo.be/Programmation/IntroASM.html#ModeAdressagehttp://www.courstechinfo.be/Programmation/IntroASM.html#DEBUG_Ahttp://www.courstechinfo.be/Programmation/IntroASM.html#Adresseshttp://www.courstechinfo.be/Programmation/IntroASM.html#Registreshttp://www.courstechinfo.be/Programmation/IntroASM.html#Buthttp://www.courstechinfo.be/Programmation/IntroASM.html#hauthttp://www.courstechinfo.be/Programmation/sommaire.htmlhttp://www.courstechinfo.be/index.htmlhttp://www.courstechinfo.be/Liens.htmlhttp://www.courstechinfo.be/Programmation/sommaire.htmlhttp://www.courstechinfo.be/MathInfo/sommaire.htmlhttp://www.courstechinfo.be/Internet/sommaire.htmlhttp://www.courstechinfo.be/Reseaux/sommaire.htmlhttp://www.courstechinfo.be/OS/sommaire.htmlhttp://www.courstechinfo.be/Hard/sommaire.htmlhttp://www.courstechinfo.be/Techno/sommaire.htmlhttp://www.courstechinfo.be/InitInfo/sommaire.html
  • 7/24/2019 assembleur_resume.pdf

    2/6

    Registres de donnes

    AX, BX, CXet DXCe sont des registres 16 bits du 8086, ils peuvent chacun tre scindspour y entreposer deux variables d'un octet

    Ainsi, le registre 16 bits AX peut tre considr comme l'adjonction dedeux registres 8 bits AH et AL (H =high, L =low)

    Certaines instructions ddient ces registres des rles spcifiques :

    AX "accumulator"l'accumulateur est privilgi pour certaines oprations arithmtiques ainsi que lesoprations d'entre/sortie

    BX "base register"il est appel registre de base car l'adressage en mmoire peut se faire par sonintermdiaire

    CX "count register"est implicitement le registre compteurs de boucles pour les instructionsrptitives.(CL pour les oprations de dcalage)

    DX "data register"sert dans certaines circonstances d'extension l'accumulateur.

    Registres d'adresses

    Registres dits d'index : SI "Source index"

    DI "Destination index"

    Registres de base BP "Base pointer"

    SP "Stack pointer"

    Registres de segments

    CS "Code Segment" = adresse de base pour le programme

    DS "Data Segment" = adresse de base pour les donnes

    ES "Extra Segment" = adresse de base pour d'autres donnes

    SS "Stack Segment" = adresse de base pour la pile

    Registre d'tats

  • 7/24/2019 assembleur_resume.pdf

    3/6

    Ce registre contient les flags, ce sont des bits qui basculent d'un tat l'autre en fonction des rsultats de l'excution d'oprations arithmtiquesou logiques.

    - Le flagCarrypasse 1 si une addition donne lieu un report.- Le flag Signepasse 1 si le bit le plus significatif du rsultat vaut 1.- Le flag Zeropasse 1 si le rsultat de la dernire opration est nul.

    - etc.Ces flags servent entre autre aux instructions de sauts conditionnels.

    L'inst ruct ion pointeur

    IP Aussi appel compteur ordinal est un registre qui s'incrmente sanscesse. Il contient en permanence l'adresse de la prochaine instruction excuter. "Faire un saut" dans un programme revient inscrire dans leregistre IP l'adresse de l'instruction o le programme doit se rendre.L'incrmentation de l'Instruction Pointerreprend alors depuis cettenouvelle valeur pour poursuivre la nouvelle squence d'instructions.

    Les adresses mmoires

    Les Pentium et AMD actuels utilisent deux modes de fonctionnement : le mode rel et lemode protg.Le mode protg est gr par Windows ou Unix, le mode rel (on devrait dire modesegment) est l'tat dans lequel on se trouve au dmarrage de la machine. La capacitd'adressage est limite 1 Mo comme pour les premiers 8086.Les adresses sont donnes sous la forme Segment : Offset

    Exemple :

    Sous DOS ( mais Windows mule parfaitement la chose)l'adresse B800:0000est l'adresse de base de la mmoire vido en modetexte. Cette adresse est donc celle du byte contenant le code ASCII ducaractre situ dans le coin suprieur gauche de l'cran.Le segment B800dbute l'adresse physique B8000.L'adresse physique s'obtient en calculant Segment x 16 + Offset

    Manipulation :

    Avec l'utilitaireDEBUG,crivons 41H= le code ASCII du A majuscule l'adresseB800:0400= adresse physique B8400de sorte faireapparatre ce 'A' au milieu de l'cran.

    C:\>debug

    -e B800:400

    B800:0400 20.41 07.4E 20.

    -q

    Utilisation des registres pour former des adresses

    Les adresses 20 bits sont constitues dans les registres en associant les registres desegment et les registres d'adresses. Les registres d'adresses sont associs par dfaut chacun des registres de segment.CSest toujours utilis avec IP pour former l'adresse logique CS:IPSS est associ au Stack Pointer SPpour former l'adresse du dessus de la pile SS:SPle Base Pointer BPest lui aussi par dfaut associ auStack Segment SSDSle Data Segmentsert en principe de segment de base pour les adresses formes avecles registresSI, DIet BX(source index, destination index et base register)

    Ecrire en assembleur avec l'utilitaire DEBUG

    http://www.courstechinfo.be/OS/Debug.htmlhttp://www.courstechinfo.be/OS/Debug.htmlhttp://www.courstechinfo.be/OS/Debug.htmlhttp://www.courstechinfo.be/OS/Debug.html
  • 7/24/2019 assembleur_resume.pdf

    4/6

    Toujours avec le programmedebug, la commande 'a' permet d'encoder des instructionssaisies en assembleur.

    a

    mov ax,B800

    mov ds,ax

    mov cx,4E41

    mov di,400mov [di],cx

    ret

    Utilisez la commande T pour tracer une une, les instructions de ce bout de programme.

    Elles placent l'adresse du segment B800 dans le registre DS (data segment)Le registre CL reoit le code ASCII d'un 'A' majuscule (41) (Ne soyez pas troubls par lavaleur 4E inscrite dans le registre CH, elle va joindre des attributs au code ASCII contenudans CL pour faire ressortir le caractre en jaune sur fond rouge)Le nombre plac dans le registre DI indique le dplacement par rapport au dbut de lammoire cran.

    Les modes d'adressage

    Nous n'avons encore utilis qu'une instruction, l'instruction MOV.L'exemple ci-dessus illustre dj le fait que les oprandes peuvent tre spcifies dediffrentes manires. Ce sont les modes d'adressage.

    MOV DS , AX Adressage de registresla valeur du registre AX est recopies dans le registre DS

    MOV CX , 4E41 Adressage immdiatla valeur immdiate 4E41 est recopie dans CX

    MOV [DI] , CX Adresse en mmoire[DI] mis entre crochets signifie " l'adresse donne par DI"

    (cette adresse est l'offset ajouter au segment de donnes)

    L'instruction MOV attend deux oprandes, le premier indique la destination du dplacementde la donne, le second oprande indique la source.La destination peut tre un registre, une adresse mmoire ou un registre de segment (saufpour le registre CS qui ne peut jamais tre une destination)La source peut tre un registre, une adresse mmoire, un registre de segment ou unevaleur immdiate.

    Le tableau ci-dessous inventorie toutes les manires d'utiliser l'instruction MOV

    MOV r1 , r2 r1 reoit la valeur identique celle contenue dans r2

    MOV r , i Le registre r est initialis avec une valeur immdiate

    MOV m , i Ecriture d'une valeur immdiate en mmoireMOV r , m Lecture en mmoire l'adresse m en destination du registre r

    MOV m , r Ecriture en mmoire partir du registre r

    Echanges entre registres de segment et la mmoire

    MOV s , m Lecture: s := m

    MOV m , s Ecriture: m := s

    Echanges entre registres gnraux et registres de segment

    MOV s , r

    MOV r , s

    Dans cette liste les adresses 'm' sont spcifies en plaant une valeur de

    l'offset et/ou des noms de registres entre crochets. Exemples : [2000] ; [BP] ;[BP+2000] ; [SI] ; [BP+SI] ; [BP+SI+2000]

    http://www.courstechinfo.be/OS/Debug.htmlhttp://www.courstechinfo.be/OS/Debug.htmlhttp://www.courstechinfo.be/OS/Debug.htmlhttp://www.courstechinfo.be/OS/Debug.html
  • 7/24/2019 assembleur_resume.pdf

    5/6

    En fait toutes les combinaisons ne sont pas acceptes ! Les combinaisons valides sontcelles que l'on forme en ne prenant pas plus d'un lment dans l'une des trois colonnes dutableau :

    BX SInombre

    BP DI

    Autrement dit, il ne peut pas il y avoir simultanment dans une adresse 2 registres de base(dont le nom commence par b) ni 2 registres d'index (dont nom se termine par i )

    Il est parfois ncessaire de prciser la taille de la valeur lire. On fait alors prcderl'adresse de la donne par BYTE PTR ou par WORD PTR selon que l'adresse dsigne unou deux octets.

    Aperu rapide de quelques autres instructions

    Les instructions MOV nous ont t utiles pour illustrer les modes d'adressage mais avec lesMOV il nous est juste possible de dplacer les donnes d'un endroit l'autre. Il nous faut

    d'autres instructions pour faire des oprations arithmtiques et logiques, des sauts, desappels des fonctions, des interruptions etc.

    Voici donc d'autres instructions. La liste est loin d'tre complte mais elle doit suffire pourse faire une ide de ce que sont les instructions en gnral.

    Oprations arithmtiques et logiques lmentaires: ADD SUB CMP AND TEST ORXOR

    Modes d'adressage accepts: r,m m,r r,r m,i et r,i

    Multiplications et divisions: MUL IMUL DIV IDIV

    Exemples : MUL BYTE PTR Valeur AX := AL x Valeur

    MUL WORD PTR Valeur DX.AX := AX x Valeur

    DIV BYTE PTR Valeur AL := AX / ValeurDIV WORD PTR Valeur AX := DX.AX / Valeur

    Incrmentation, dcrmentation, inversion logique, ngation : INC DEC NOT NEG

    Appel d'un sous-programme : CALL label

    Sauts inconditionnelsJMP label

    Sauts conditionnelsJZ (=JE) JNZ ( = JNE) JC JNC JS JNS

    Assemblage et dition de liens

    TASM est l'assembleur de Borland. Nous l'utilisons avec la commande TLink dj utiliseavec l'environnement de dveloppement intgr TC ou le compilateur TCC. La vrificationde l'excution se fait avec le Turbo Debugger " TD ". Tapez simplement TASM pour voir lesoptions disponibles. Ces options sont assez rbarbatives aussi une fois que l'on sait cellesqui nous conviennent on a tout intrt les fixer une fois pour toute dans un fichier decommande.

    Voici les fichiers A.bat pour commander l'assemblage et L.bat pour demander l'dition deliens.

    A.bat : TASM /zi /c /la %1.asm;

    L.bat : TLINK /v /k %1.obj;

    Pour rappel, on part d'un code source ".asm" L'assemblage en fait un code objet ".obj"relogeable qui son tour est trait par l'diteur de lien pour en faire un code excutable".exe" Accessoirement l'assembleur produit aussi un "listing" qui est un document destin

  • 7/24/2019 assembleur_resume.pdf

    6/6

    tre imprim. On y retrouve cte cte, le code source et le code binaire correspondantnot en hexadcimal.

    ... suivre

    CoursTechInfo>Programmation> Introduction l'assembleur

    http://www.courstechinfo.be/index.htmlhttp://www.courstechinfo.be/index.htmlhttp://www.courstechinfo.be/Programmation/sommaire.htmlhttp://www.courstechinfo.be/Programmation/sommaire.htmlhttp://www.courstechinfo.be/Programmation/sommaire.htmlhttp://www.courstechinfo.be/Programmation/sommaire.htmlhttp://www.courstechinfo.be/Programmation/TstBcc32V55.htmlhttp://www.xiti.com/xiti.asp?s=254710http://jigsaw.w3.org/css-validator/check/refererhttp://validator.w3.org/check?uri=refererhttp://validator.w3.org/check?uri=refererhttp://validator.w3.org/check?uri=refererhttp://www.courstechinfo.be/Programmation/sommaire.htmlhttp://www.courstechinfo.be/index.html