Upload
sarah-berrada
View
216
Download
0
Embed Size (px)
Citation preview
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.html7/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.html7/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.html7/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