29/01/2021 Apprendre l'assembleur https://benoit-m.developpez.com/assembleur/tu
29/01/2021 Apprendre l'assembleur https://benoit-m.developpez.com/assembleur/tutoriel/index.php 1/33 Apprendre l'assembleur Table des matières I. Introduction II. PREMIÈRE PARTIE II-A. L'ARITHMÉTIQUE SIGNÉE II-B. LA MÉMOIRE VIVE II-B-1. La segmentation de la mémoire II-B-2. Structure d'un programme en mémoire II-B-3. Les fichiers COM II-B-4. Les fichiers EXE II-B-5. Les cycles de lecture-écriture II-C. LE MICROPROCESSEUR - LES REGISTRES II-C-1. Généralités sur les registres II-C-2. Les registres généraux II-C-3. Les registres de segment II-C-4. Les registres d'offset II-C-5. Le registre des indicateurs II-D. LES INTERRUPTIONS II-D-1. Introduction II-D-2. La table des vecteurs d'interruptions II-D-3. Sauvegarde de l'état des registres lors de l'appel III. DEUXIÈME PARTIE III-A. PREMIER EXEMPLE : LES FICHIERS COM III-B. DEUXIÈME EXEMPLE : LES FICHIERS EXE IV. TROISIÈME PARTIE IV-A. DÉFINITION DE DONNÉES ET ADRESSAGE IV-A-1. Les définitions de données IV-A-2. L'adressage IV-A-2-a. L'adressage immédiat IV-A-2-b. L'adressage indexé et/ou basé IV-B. SAUTS INCONDITIONNELS, PROCÉDURES ET MACROS IV-B-1. Les sauts inconditionnels IV-B-1-a. Les procédures IV-B-1-a-i. appels de procédures IV-B-1-a-ii. le passage des paramètres IV-B-1-b. Les macros IV-B-1-c. La directive EQU IV-B-1-d. L'inclusion de fichiers IV-C. LES PRINCIPALES INSTRUCTIONS DU LANGAGE MACHINE IV-C-1. L'instruction NOP (« No Operation ») IV-C-2. L'instruction MOV (« Move ») IV-C-3. L'instruction XCHG (« Exchange ») IV-C-4. L'instruction JMP (« Jump ») IV-C-5. L'opérateur CMP (« Compare ») IV-C-6. Les instructions de saut conditionnel IV-C-6-a. les sauts de comparaison IV-C-6-a-i. les sauts de test sur les flags IV-C-6-a-ii. le saut de test sur le registre CX IV-C-6-b. Les instructions arithmétiques IV-C-6-b-i. L'instruction INC (« Increment ») IV-C-6-b-ii. L'instruction ADD (« Addition ») IV-C-6-b-iii. L'instruction ADC (« Add with Carry ») IV-C-6-b-iv. L'instruction DEC (« Decrement ») IV-C-6-b-v. L'instruction SUB (« Substract ») IV-C-6-b-vi. L'instruction SBB (« Substract with Borrow ») IV-C-6-b-vii. L'instruction MUL (« Multiply ») IV-C-6-b-viii. L'instruction IMUL (« Integer Multiply ») IV-C-6-b-ix. L'instruction DIV (« Divide ») IV-C-6-b-x. L'instruction IDIV (« Integer Divide ») IV-C-6-b-xi. L'instruction NEG (« Negation ») IV-C-6-c. Les instructions logiques IV-C-6-c-i. L'instruction NOT (« Logical NOT ») IV-C-6-c-ii. L'instruction OR (« Logical OR ») IV-C-6-c-iii. L'instruction AND (« Logical AND ») FORUMS TUTORIELS FAQ BLOGS CHAT NEWSLETTER EMPLOI ÉTUDES DROIT CLUB Programmation Algorithmique 2D-3D-Jeux Assembleur C C++ D Go Kotlin Objective C Pascal Perl Python Rust Swift Qt XML Autres ACTUALITÉS ASSEMBLEUR FORUM ASSEMBLEUR FAQ ASSEMBLEUR TUTORIELS ASSEMBLEUR LIVRES ASSEMBLEUR SOURCES ASSEMBLEUR OUTILS ASSEMBLEUR WIKI ASSEMBLEUR Leader Technique DevOps - H/F - LABSOFT - Toulouse (31000) 1 Chef de Projet Web (F/H) - DEV6GROUP - Lyon (69000) DI/DSI Solutions d'entreprise Cloud IA ALM Microsoft Java Dév. Web EDI Programmation SGBD Office Mobiles Systèmes 29/01/2021 Apprendre l'assembleur https://benoit-m.developpez.com/assembleur/tutoriel/index.php 2/33 IV-C-6-c-iv. L'instruction TEST (« Test for bit pattern ») IV-C-6-c-v. L'instruction XOR (« Exclusive logical OR ») IV-C-6-c-vi. L'instruction SHL (« Shift logical Left ») IV-C-6-c-vii. L'instruction SHR (« Shift logical Right ») IV-C-6-c-viii. L'instruction ROL (« Rotate Left ») IV-C-6-c-ix. L'instruction ROR (« Rotate Right ») IV-C-6-c-x. L'instruction RCL (« Rotate through Carry Left ») IV-C-6-c-xi. L'instruction RCR (« Rotate through Carry Right ») IV-C-6-d. Les instructions de manipulation des flags IV-C-6-d-i. L'instruction CLC (« Clear Carry flag ») IV-C-6-d-ii. L'instruction STC (« Set Carry flag ») IV-C-6-d-iii. L'instruction CLD (« Clear Direction flag ») IV-C-6-d-iv. L'instruction STD (« Set Direction flag ») IV-C-6-d-v. L'instruction CLI (« Clear Interrupt flag ») IV-C-6-d-vi. L'instruction STI (« Set Interrupt flag ») IV-C-6-d-vii. L'instruction CMC (« Complement Carry flag ») IV-C-6-d-viii. L'instruction LAHF (« Load AH from Flags ») IV-C-6-d-ix. L'instruction SAHF (« Store AH into Flags ») IV-C-6-e. Les instructions de gestion de la pile IV-C-6-e-i. L'instruction PUSH (« Push Word onto Stack ») IV-C-6-e-ii. L'instruction POP (« Pop Word off Stack ») IV-C-6-e-iii. L'instruction PUSHF (« Push Flags onto Stack ») IV-C-6-e-iv. L'instruction POPF (« Pop Flags off Stack ») IV-C-6-e-v. L'instruction PUSHA (« Push All registers onto Stack ») IV-C-6-e-vi. L'instruction POPA (« Pop All registers off Stack ») IV-C-6-f. Les instructions de gestion des chaînes d'octets IV-C-6-f-i. L'instruction MOVSB (« Move String Byte ») IV-C-6-f-ii. L'instruction SCASB (« Scan String Byte ») IV-C-6-f-iii. L'instruction LODSB (« Load String Byte ») IV-C-6-g. Les instructions de gestion des chaînes de mots IV-C-6-g-i. L'instruction MOVSW (« Move String Word ») IV-C-6-g-ii. L'instruction SCASW (« Scan String Word ») IV-C-6-g-iii. L'instruction LODSW (« Load String Word ») IV-C-6-g-iv. L'instruction STOSW (« Store String Word ») IV-C-6-g-v. L'instruction CMPSW (« Compare String Word ») IV-C-6-h. Les instructions de gestion des chaînes de doubles-mots IV-C-6-h-i. L'instruction MOVSD (« Move String Double Word ») IV-C-6-h-ii. L'instruction SCASD (« Scan String Double Word ») IV-C-6-h-iii. L'instruction LODSD (« Load String Double Word ») IV-C-6-h-iv. L'instruction STOSD (« Store String Double Word ») IV-C-6-h-v. L'instruction CMPSD (« Compare String Double Word ») IV-C-6-i. Les instructions d'appel IV-C-6-i-i. L'instruction CALL (« Procedure Call ») IV-C-6-i-ii. L'instruction RET (ou RETN) IV-C-6-i-iii. L'instruction RETF IV-C-6-j. Les instructions de boucle IV-C-6-j-i. L'instruction LOOP IV-C-6-j-ii. L'instruction LOOPE (« Loop while Equal ») IV-C-6-j-iii. L'instruction LOOPNE (« Loop while not Equal ») IV-C-6-k. Les instructions d'adressage IV-C-6-k-i. L'instruction LEA (« Load effective address ») IV-C-6-k-ii. L'instruction LDS (« Load pointer using DS ») IV-C-6-k-iii. L'instruction LES (« Load pointer using ES ») IV-C-6-l. Les instructions de conversion arithmétique IV-C-6-l-i. L'instruction AAA (« ASCII Adjust for Addition ») IV-C-6-l-ii. L'instruction AAD (« ASCII Adjust for Division ») IV-C-6-l-iii. L'instruction AAM (« ASCII Adjust for Multiplication ») IV-C-6-l-iv. L'instruction AAS (« ASCII Adjust for Substraction ») IV-C-6-l-v. L'instruction CBW (« Convert Byte to Word ») IV-C-6-l-vi. L'instruction CWD (« Convert Word to Double Word ») IV-C-6-l-vii. L'instruction DAA (« Decimal Adjust for Addition ») IV-C-6-l-viii. L'instruction DAS (« Decimal Adjust for Substraction ») IV-C-6-l-ix. L'instruction MOVSX (« Move with Sign Extend ») IV-C-6-l-x. L'instruction MOVZX (« Move with Zero Extend ») IV-C-6-l-xi. L'instruction XLAT (« Translate ») IV-C-6-m. Les instructions d'entrée-sortie IV-C-6-m-i. L'instruction IN (« Input from port ») IV-C-6-m-ii. L'instruction OUT (« Output to port ») V. QUATRIÈME PARTIE V-A. LECTURE ET ÉCRITURE DE FICHIERS AVEC LES HANDLES V-A-1. Ouverture d'un fichier V-A-2. Lecture dans un fichier V-A-3. Écriture dans un fichier V-A-4. Existence d'un pointeur de fichier V-A-5. Fermeture d'un fichier V-A-6. Conclusion V-B. LES FONCTIONS DE RECHERCHE DE FICHIERS V-B-1. La fonction 4eh V-B-2. La fonction 4fh V-B-3. Conclusion V-B-4. EXEMPLE DE PROGRAMME V-B-5. Entrée bufferisée au clavier V-B-6. Le programme VI. CONCLUSION 29/01/2021 Apprendre l'assembleur https://benoit-m.developpez.com/assembleur/tutoriel/index.php 3/33 L'auteur Benoît-M L'article Publié le 3 janvier 2003 - Mis à jour le 15 février 2013 Version PDF Version hors-ligne ePub, Azw et Mobi Liens sociaux I. Introduction▲ « Désormais, pour apprendre le français, il faudra SAVOIR le français ! » disait Coluche. De même, ce tutoriel s'adresse à tous ceux qui connaissent déjà les rudiments d'un langage évolué tel que le BASIC, le FORTRAN, le C ou le PASCAL et qui souhaitent apprendre l'assembleur. Une connaissance même sommaire d'un de ces langages suffit ! Aucune connaissance en programmation système n'est requise : le but de ce cours est justement d'en introduire les fondements. Contrairement aux langages évolués, l'assembleur, ou « langage d'assemblage » est constitué d'instructions directement compréhensibles par le microprocesseur : c'est ce qu'on appelle un langage de bas niveau. Il est donc intimement lié au fonctionnement de la machine. C'est pourquoi il est relativement difficile à assimiler, en tout cas beaucoup plus que les langages de haut niveau. Cela explique également pourquoi il existe au moins autant de langages d'assemblage que de modèles de microprocesseurs. Avant d'apprendre l'assembleur INTEL 80x86, il est donc primordial de s'intéresser à quelques notions de base concernant par exemple la mémoire ou le microprocesseur. C'est là en effet que se trouvent les principales difficultés pour le débutant. Ne soyez pas rebuté par l'abstraction des concepts présentés dans les premiers paragraphes : il est normal que durant la lecture, beaucoup de choses ne soient pas claires dans votre esprit. Tout vous semblera beaucoup plus simple quand nous passerons à la pratique dans le langage assembleur. Le microprocesseur peut fonctionner sous deux modes : le mode réel et le mode protégé. Le mode protégé permet d'accéder à 232 octets de mémoire vive, alors que le mode réel ne peut en adresser que 220 = 1 Mo. Nous ne traiterons dans ce cours que le mode réel. C'est celui qu'utilisent la plupart des programmes DOS. Convention : toutes les adresses sont écrites en notation hexadécimale. Les autres nombres seront la plupart du temps représentés en base décimale. Dans le cas contraire, nous ajouterons la lettre ‘h' après les chiffres. II. PREMIÈRE PARTIE▲ II-A. L'ARITHMÉTIQUE SIGNÉE▲ On appelle arithmétique non signée l'arithmétique dans laquelle tous les entiers sont positifs. En arithmétique signée au contraire, les nombres peuvent être soit positifs, soit négatifs. Un nombre signé n'est donc pas forcément négatif. Les données informatiques se présentent sous la forme d'une succession de chiffres binaires, les bits. Nous supposerons que les systèmes de numération binaire et hexadécimal vous sont déjà familiers. Il est en revanche fort possible que vous ne connaissiez pas la façon dont un ordinateur représente les nombres négatifs. Il existe deux conventions : la notation en signe et valeur absolue et la notation en complément uploads/Litterature/ apprendre-l-x27-assembleur.pdf
Documents similaires










-
25
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Jui 26, 2021
- Catégorie Literature / Litté...
- Langue French
- Taille du fichier 0.5668MB