initiation a la programmation en assembleur.pdf
(
980 KB
)
Pobierz
http://www.jourlin.com
page 1 sur 116
http://www.jourlin.com
Table des matières
Avant-Propos.........................................................................................5
1. Introduction.......................................................................................5
1.1. Petits rappels sur la structure des ordinateurs...................................6
1.3. Qu'est-ce qu'un programme en assembleur ?.................................10
2. Arithmétique entière........................................................................15
2.1. Un mot sur les registres généraux et leur capacité.........................15
2.2. Entiers signés et non signés............................................................17
2.3. Débordements.................................................................................21
3. Instructions de branchement ...........................................................24
3.1. Le registre RIP (Re-Extended Instruction Pointer)........................24
3.2. Branchement inconditionnel : instruction jmp (de « jump » : sauter)
................................................................................................................25
3.3. Branchements conditionnels ..........................................................26
4. Structure des données : pointeurs, tableaux, matrices, etc. .............28
4.1. Registres « pointeurs »....................................................................28
4.2. Mode d'adressage « indirect ».........................................................29
4.3 Mode d'adressage « indirect indexé »..............................................30
4.4. Indexations complexes....................................................................32
5. Comparaisons et autres branchements conditionnels.......................34
6. Équivalents des structures algorithmiques avancées........................39
7. Utilisation de la pile.........................................................................42
8. Procédures.......................................................................................44
8.1 Les instructions call et ret................................................................44
8.2 Les interruptions et les exceptions ..................................................48
9. Autres instructions d'arithmétique entière.......................................52
9.1 Multiplication et division sur des entiers non signés.......................52
9.1.1. Multiplication non signée.................................................................52
9.1.2. Division non signée .........................................................................53
9.2 Multiplication et division sur des entiers signés..............................54
10. Opérateurs logiques.......................................................................55
page 2 sur 116
9.2.1 Multiplication signée.........................................................................54
9.2.2 Division signée..................................................................................55
http://www.jourlin.com
11. Calculs en virgule flottante............................................................57
11.1 Introduction....................................................................................57
11.2. La norme IEEE 754......................................................................58
11.3 Les registres du processeur à virgule flottante (x87).....................60
11.4 Principales instructions de calcul...................................................61
11.5 Comparaisons et branchements conditionnels...............................63
12. Parallélisme (MMX, SSE, 3DNow!).............................................64
12.1 Registres MMX..............................................................................65
12.2 Instructions MMX..........................................................................66
13. Bibliographie.................................................................................69
14. Exercices........................................................................................70
14.1 Capacité des cases mémoires (valide section 1.1.)........................70
14.2. Poids des chiffres, parties hautes et basses d'un nombre (valide
section 1.1.1)..........................................................................................71
14.3 À combien de cases mémoires distinctes peut-on accéder avec des
adresses hexadécimales allant de 0 à FFFF ?........................................72
14.4 Opérandes (valide section 1.3)......................................................73
14.5 Registres généraux (section 2.1)...................................................73
14.6 Arithmétique entière (sections 2.2 et 2.3)......................................75
14.7 La pile (section 7)..........................................................................78
15. Travaux dirigés..............................................................................80
15.1. Instructions de copie.....................................................................80
15.2. Instructions additives....................................................................81
15.3. Sauts conditionnels et inconditionnels (chapitre 3 du cours).......83
15.4. Adressage indirect (section 4.2 du cours).....................................86
15.5. Adressage indirect indexé ( 4.3)...................................................89
15.6. Indexations complexes (section 4.4 du cours)..............................92
15.7. Algorithme de tri « Bulle » (chapitres 5 et 6 — comparaisons et
structures)...............................................................................................94
15.8. Tri « bulle » procédural (sections 7 et 8)......................................98
15.9. Plus Petit Commun Multiple (Chapitre 8.2, 9 et 10)..................101
15.10. Calcul arithmétique flottant (chapitre 11).................................110
15.11. Produit scalaire via instructions SIMD.....................................111
16. Travaux pratiques : Programmer en Assembleur sous GNU/Linux...
114
16.1 Premiers pas.................................................................................114
16.2 Programmes corrigés....................................................................116
page 3 sur 116
http://www.jourlin.com
page 4 sur 116
http://www.jourlin.com
Avant-Propos
Ce cours est destiné à des étudiants de 2e année de licence en informatique. Il
est souhaitable pour le suivre dans de bonnes conditions d'avoir quelques
prérequis en algèbre, en structure des ordinateurs et éventuellement en
programmation structurée (langage C). Seuls de brefs rappels seront faits
lorsque cela sera nécessaire.
D'autre part, pour diverses raisons, ce cours prend pour support le jeu
d'instructions des processeurs de la famille
80x86
et la syntaxe assembleur
AT&T.
Toutefois, l'objectif de ce cours est seulement de permettre à l'étudiant
d'acquérir les concepts fondamentaux de la programmation en assembleur. Le
cours est donc loin d'être exhaustif, mais après avoir suivi ce cours,
l'apprentissage d'autres syntaxes, d'autres instructions et éventuellement
d'autres jeux d'instructions devrait être trivial.
1. Introduction
Tous les langages de programmation dits « évolués » (« structurés », « orientés
objet », etc.), qu'ils soient compilés ou interprétés doivent d'une manière ou
d'une autre être « traduits » en langage machine avant de pouvoir être exécutés
par un ordinateur.
Or, s'il est indiscutable que ces langages ont un grand nombre d'atouts pour le
développement de logiciels complexes, en termes de conception, de lisibilité,
de portabilité et de maintenance, le revers de la médaille est qu'ils masquent
fortement sinon totalement, les limitations de la machine.
Ne pas avoir conscience de ces limitations peut pourtant avoir des
conséquences fâcheuses :
●
1
en terme de performance, dans le cas d'une sous-exploitation des
capacités du processeur
1
.
voir, par exemple, l'apparition de processeurs 64 bits et des
Single Instruction
Multiple Data
(dont font partie les jeux d'instructions
MMX, SSE
et
3D now!)
dans
les dernières versions des processeurs Intel et AMD. Les SIMD permettent de
réaliser jusqu'à 16 opérations arithmétiques en parallèle. Rares sont les
compilateurs exploitent ces instructions, encore plus rares sont les programmes qui
en tirent profit. La plupart des ordinateurs personnels présents sur le marché ont un
page 5 sur 116
Plik z chomika:
musli_com
Inne pliki z tego folderu:
6502 Assembly-Language Programming for Apple, Commodore, and Atari Computers [Lampton 1985].pdf
(36445 KB)
Guide to Assembly Language Programming in Linux [Dandamudi 2005-07-15].pdf
(31414 KB)
ARM Assembly Language with Hardware Experiments [Elahi & Arjeski 2014-12-09].pdf
(14458 KB)
64 Bit Intel Assembly Language Programming for Linux.pdf
(5008 KB)
Assembly Language Primer for the IBM PC & XT [Lafore 1984-05-29].pdf
(12297 KB)
Inne foldery tego chomika:
3D Design - Programming
ActionScript
Actionscript - Flash - Flex - Air
Ada
ADO
Zgłoś jeśli
naruszono regulamin