Title: Base des langages de programmation : l'assembleur'
1Base des langages de programmation l'assembleur.
Qu'est-ce que c'est ? Version humaine du langage
machine. Correspond aux instructions de base du
processeur.
Il permet d'accéder à la mémoire (pile et
tas). aux registres. d'effectuer des
opérations.
A quoi ça ressemble ? mov ax,10 //le registre ax
reçoit la valeur 10 boucle mov
tabax,0 //instruction étiquettée où la variable
indicée par ax reçoit 0 dec ax
//ax est décrementé de 1 jnz
boucle //branchement si bit du zéro est
différent de 1
Remarque ces lignes en assembleur reproduisent
Pour i de 10 à 1 faire tabbleaui0 ii-1 Fait
2Systèmes de numération (1/4)
Système de numération de l'homme L'homme a 10
doigts et compte donc en base 10. Ainsi un nombre
s'écrivant 34452 signifie en réalité en base 10
31044103410251012100 Les
machines n'ont pas de doigts mais des transistors
Un transistor ayant deux états, son système de
numération est le code binaire. Ainsi 1011
signifie en binaire 123022121120821
11. Blague "Il y a 10 sortes de personnes,
celles qui comprennent le binaire et celles qui
ne le comprennent pas".
3Systèmes de numération (2/4)
Passage de la base 10 à la base 2 n
an2na222a121a0 On divise le nombre
par 2 de manière itérative. Exemple sur 150
150 275 0 75 237 1 37 218 1 18
29 0 9 24 1 4 22 0 2 21 0 1
20 1 D'où l'écriture 10010110 de 150 en base
2.
4Systèmes de numération (3/4)
Autres systèmes de numération répandus L'octal
n'a que 8 signes, on reprend donc les chiffres de
0 à 7, ainsi en octal 12 signifie en réalité
18210. L'hexadécimal aurait besoin de 16
chiffres, comme on n'a que 10 chiffres arabes on
ajoute 6 lettres a,b,c,d,e et f. Ainsi ff
signifie 255 en décimal ou encore 11111111 en
binaire.
f
f
5Systèmes de numération (4/4)
De l'importance que le système de numération soit
une puissance de 2 Notons s un tel système s
contient les "chiffres" (s1,s2,..,sn) avec n
2k. Si c'est le cas, 10 dans le système s est
égal à 100 en base binaire avec k zéros, de
sorte que 11 en base binaire avec k fois 1 se
réécrirait sn en base s. Exemples 111 en base
binaire s'écrit 7 en base octale. 1111 en base
binaire s'écrit f en base hexadécimale. 11111 en
base binaire s'écrit v en base 32, s (0, 1, 2,
3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, g, h, i,
j, k, l, m, n, o, p, q, r, s, t, u, v). En bref,
l'intérêt est de permettre de faire des paquets
de 1 !
6Nombres négatifs (1/2)
Représentation d'un entier négatif ou positif
(entier signé) avec un bit de signe Le bit de
poids fort i.e celui qui est le plus à gauche
donne le signe, tandis que la partie droite donne
la valeur absolue du nombre. Ainsi 124 puisque
124 64 32 16 8 4 s'écrit
7Nombres négatifs (2/2)
Représentation d'un entier négatif ou positif en
complément à 2 Les nombres positifs s'écrivent de
la même manière sous les deux conventions. Codage
d'un nombre négatif 1)On écrit sa valeur
absolue 01111100 pour 124 2)On complémente ce
nombre en remplaçant les 0 par des 1 et
vice-versa et on obtient 10000011 3)Enfin, on
ajoute 1 10000100 Remarque la troisième
étape permet de faire en sorte que l'addition
d'un nombre et de son opposé donne 0.
8La mémoire
Avant propos L'unité la plus petite est le bit,
mais on préfère compter en paquets de 8 bits,
c'est-à-dire en octets. On parle aussi de kilo
octets (Ko) 1024 octets, de méga octets (Mo) 1024
Ko, de giga octets (Go) 1024 Mo et de tera
octets (To) 1024 Mo. 1024 et non 1000 car 1024
est une puissance de deux.
Les mémoires RAM Random Access Memory
(Mémoire à accès aléatoire). ROM Read Only
Memory (mémoire en lecture seule). disque dur
le périphérique de stockage par excellence des
données d'un ordinateur. Clefs USB CDROM /
DVD Bande magnétique mémoire bon marché.
9Précisions sur la RAM
RAM mémoire accessible en lecture et en
écriture, c'est dans son espace que sont stockés
les programmes en cours d'exécution. Elle est
mise à zéro à chaque allumage de
l'ordinateur. On distingue la pile et le tas
dans la RAM, cette distinction est logicielle et
non matérielle. Pile (stack) la pile est gérée
comme une file lifo (Last In First Out). Les
données sont ajoutées et enlevées comme sur une
pile d'assiettes.
6
On dépile (pop)
On dépile (pop)
On ajoute 18
5
2
6
push 18 en assembleur
18
5
Tas (heap en anglais) tout ce qui n'est pas
pile.
10Précisions sur l'assembleur (1/3)
Les registres Les registres sont de petits
emplacements mémoire 2 ou 4 octets situés au cur
du processeur. Ils sont très peu nombreux
environ quelques dizaines, on en distingue
plusieurs types Les registres généraux AX, BX,
CX et DX par exemple, servent à effectuer des
opérations. Les registres de segment CS Code
Segment / Segment de code adresse début des
instructions. DS Data Segment / Segment de
données adresse de début des données. SS
Stack segment / Segment de pile adresse de
debut de la pile Le registre d'IP (Instruction
Pointer) contient la valeur du décalage
(offset) par rapport au segment de code
permettant de répérer la prochain instruction à
exécuter. Le registre d'état contient un
ensemble de valeurs d'état. Bit de résultat nul,
de retenue etc.
11Précisions sur l'assembleur (2/3)
Opérations en vrac mov AX,10 // met 10 dans
AX mov BX,DX // BX DX mov AX,CS10 // met
dans AX le contenu de la case mémoire située à
CS10 o add AX,BX and AX,BX rol
AX //permutation circulaire des bits de AX vers
la gauche jmp CS20 //saut inconditionnelle à
l'adresse spécifiée jz CS20 //saut
conditionnel, uniquement si le bit d'état zéro
est à 1, //par exemple suite à une
soustraction égale à 0. inc AX //incrémente AX
de 1. call sousprog //appel du sous-programme
sousprog
Remarque un sous-programme est une portion de
code indépendante, également appelée routine,
fonction et procédure.
12Précisions sur l'assembleur (3/3)
Appel de fonction "call sousprog" change la
valeur du registre IP pour qu'il pointe sur la
zone mémoire où commence le fonction sousprog
mais auparavant empile la valeur courante
d'IP pour pouvoir savoir où continuer l'exécution
du programme au retour du sous-programme. Ce que
doit faire la fonction Sauvegarder dans la pile
tous les registres susceptibles d'être modifiés
dans le sous-programme afin de les restituer tels
quels au retour. Variables locales/Variables
globales Les variables locales sont des
emplacements mémoires dans la pile auxquels
n'accède que le sous-programme. Les variables
globales sont situées dans le tas et donc sont
accessibles en permanence pourvu que leurs
adresses soient connues.
13Perl
Perl Practical Extraction and Report
Language Langage pratique d'extraction et de
génération de rapports. Langage crée en 1986 par
Larry Wall Langage devenu populaire pour
diverses raisons gratuit portable simple
(gestion automatique de la mémoire,
fonctions de haut niveau) Utilisé
actuellement essentiellement pour
ladministration système le traitement de
texte les bases de données ? Ce que Perl ne
peut pas faire du calcul massif, sur un exemple
de 100 millions de multiplications, il est 100
fois plus lent quun programme en C !
Références www.perldoc.com/perl5.6 Introduction
à Perl chez OReilly Programmation avancée en
Perl chez OReilly
14Premier programme
Endroit où se trouve linterpréteur Indique que
ce qui va suivre est du perl
!/usr/bin/perl print "bonjour le monde\n"
commande perl affichant du texte
? Ne pas oublier que tout ceci se trouve dans un
fichier quil faut rendre exécutable avec la
commande chmod.
15Notion de variable
Registres
Bus dadresses
Bus de données
Une variable est une entité logicielle auquelle
correspond une adresse dans la mémoire et une
valeur à cette adresse. Une variable se note
généralement nom_de_variable en Perl et de
manière similaire dans tous les autres langages
(C, Pascal, TCL, Java )
Mémoire Vive (RAM)
toto
16Autre exemple de programme Perl
Comptage du nombre de ligne d'un fichier
Ouverture du fichier bonjour.perl en lecture
!/usr/bin/perl open (F, 'lt bonjour.perl') i0
while (ligneltFgt) i close
F print "Nombre de lignes i\n"
On initialise la variable i à 0
Tant quil y a des lignes à lire
On incrémente le nombre de lignes
On ferme le fichier
17Types de données (1/5)
A)Constantes 3 3.489 'Toto est ici.\n' "Toto
est ici.\n" valeur spéciale "undef" pour une
variable non définie, se teste avec la fonction
defined. B)Variables scalaires va
'titi' print "toto et va" gt toto et
titi print 'toto et va' gt toto et
va variables spéciales _ (variable par défaut)
et ! (variable derreur) C)Tableaux _at_tab
() gt liste vide _at_tab (13,4,5) gt liste à
trois éléments tableau spéciale de passage de
paramètres _at__
18Types de données (2/5)
C)Tableaux (suite)
Accès aux éléments d'un tableau ex 1) _at_tab
(13,'titi',5) print tab1 gt 'titi' ex
2) accès au dernier élément print
tabtab gt 5 ex 3) accès à tous les
éléments foreach element (_at_tab) print
element."\n"
19Types de données (3/5)
C)Tableaux (suite)
Fonctions spéciales de manipulation de
tableaux _at_tab () ex 1) Insertion d'un
élément à la fin push _at_tab , 1 gt (1) push
_at_tab , 2 gt (1,2) ex 2) Suppression d'un
élément à la fin pop _at_tab gt (1) ex
3) Insertion d'un élément au début unshift
_at_tab, 3 gt (3,1) ex 4) Suppression d'un
élément au début shift _at_tab gt (1)
20Types de données (4/5)
C)Tableaux (suite)
Fonctions spéciales de manipulation de
tableaux ex 1) Inversion d'un tableau _at_a
(titi,toto,tata,vautour) _at_a reverse
_at_a gt ('vautour','tata','toto','titi') ex
2) Tri d'un tableau _at_a sort _at_a gt
('tata','titi','toto','vautour')
21Types de données (5/5)
D)Tableaux associatifs ou tables de
hachage Indiçage des valeurs par des chaînes de
caractères et non plus par des entiers. 1)
Accès à un élément d'une table de hachage print
table_hachage"toto" 2)Création d'une table
de hachage table_hachage ("toto" gt 4,
"titi"gt14, "tata" gt 10) 3)Ajout dune entrée
dans la table de hachage table_hachage"toto"
15 4)Fonctions spéciales _at_k keys
table_hachage gt ('toto','titi','tata') _at_v
values table_hachage gt (4,14,10) exists
table_hachage"toto" gt renvoie 1 si la clef
existe et 0 sinon delete table_hachage"toto"
gt supprime l'entrée "toto" gt 4
22Opérateurs
Opérateurs arithmétiques , -, , /,
(puissance), (modulo) Opérateur booléens
(ou), (et), ! (négation) Sur les chaînes de
caractères concaténation 'sdfl'.'toto' gt
'sdfltoto' fonction spéciale chomp c gt
supprime le caractère de fin de ligne de la
chaîne de caractères a Comparaison de
nombres gt,gt,lt,lt,,! Comparaison de chaînes
de caractères gt,ge,lt,le,eq,ne
23Structures de contrôle (1/2)
!/usr/bin/perl a5 if (a 1) print "a
est égale à 1\n" elsif (a 2) print "a
est égale à 2\n" else print "a n'est ni
égale à 1, ni égale à 2\n" unless (a 1)
print "a nest pas égale à 1\n"
Structure de contrôle if
Structure de contrôle unless contraire de if
24Structures de contrôle (2/2)
Boucle for !/usr/bin/perl for (i
0ilt10i) print "i\n"
Boucle foreach !/usr/bin/perl _at_tab(0,1,2,3,4,5,6
,7,8,9) foreach element (_at_tab) print
"element\n "
Boucle while !/usr/bin/perl i 0 while (i lt
10) print "i\n" i
25Exemple sur les matrices (1/2)
Matrices pas de moyen direct mais on peut
utiliser des tableaux de tableaux.
!/usr/bin/perl _at_mat (1,2,3,4,5,6,7,8,9)
for(i0ilt3i) for(i0ilt3i)
print matij
print \n
26Exemple sur les matrices (2/2)
Multiplication de matrices
!/usr/bin/perl _at_mat1 (1,1,1,4,5,6,7,8,9)
_at_mat2 (1,2,3,4,5,6,7,8,9) for(i0ilt3
i) for(j0jlt3j)
mat3ij0 for(k0klt3k)
mat3ijmat1ikmat2kj
for(i0ilt3i)
for(j0jlt3j) print "mat3ij
" print "\n"
27Entrées/Sorties (1/3)
Passage darguments à un programme avec
_at_ARGV ARGV0 contient le premier argument et
ARGV le nombre darguments Ouverture d'un
fichier en lecture open (FIC1,"ltfichier_entree")
Ouverture d'un fichier en écriture open
(FIC2,"gtfichier_sortie") gt écriture en
création open (FIC2,"gtgtfichier_sortie") gt
écriture en ajout Lecture dune ligne a
ltFIC1gt Lecture dune ligne de lentrée
standard a ltSTDINgt ltSTDINgt est également
possible, le résultat est alors stocké dans _
28Entrées/Sorties (2/3)
Exemple de programme permettant la copie d'un
fichier !/usr/bin/perl open (FIC1,"ltfichier_entre
e") open (FIC2, "gtfichier_sortie") while
(ltFIC1gt) print FIC2 _ close FIC1 gt
fermeture du fichier d'entrée close FIC2 Sortie
formatée c chaine de caracteres v
3.14159 printf " s f\n ", c,v
29Entrées/Sorties (3/3)
Exemple de programme écrivant de manière formatée
dans un fichier !/usr/bin/perl open
(FIC, "gtfichier_sortie") c chaine de
caractères v 3.14159 printf FIC " s
.2f\n ", c,v
30Modularité (1/4)
La modularité et son importance La
modularité d'un programme est la qualité de son
découpage en fonctions. Si les fonctions
correspondent à des traitements élémentaires, le
développement du programme et sa maintenance
sont plus faciles. On peut en effet se concentrer
plus facilement sur un ensemble réduit de lignes
de code. Quand le nombre de fonctions devient
important, celles-ci sont réparties dans
différents fichiers. Par exemple, un fichier
traitera des entrées-sorties, un autre des
aspects réseaux etc.
Fichier prog2.perl
Fichier prog1.perl
!/usr/bin/perl sub coucou print
coucou\n 1
!/usr/bin/perl require(prog2.perl) coucou()
31Modularité (2/4)
!/usr/bin/perl Exemple de sous-programme sub
marine n variable globale print
" Hello, marin numéro n !\n " Appel du
sous-programme marine gt 1 marine gt
2 Passage de paramètres sub somme my(a,b)
_at__ variables locales my c ab
print " c\n "
32Modularité (3/4)
Valeurs de retour implicite (dernière opération
du sous- programme) sub somme my(a,b)
_at__ ab explicite (utilisation de
return) sub somme my(a,b) _at__ my
cab return c
33Modularité (4/4)
Manière rapide décrire la fonction somme sub
somme _0_1 Appel de la fonction
somme somme(1,2) ou somme(_at_AB) si auparavant
_at_AB (1,2) Utilisation dune table de
hachage resultat somme(a gt 1,b gt
2) sub somme hachage _at__hachageahach
ageb
34Expressions régulières (1/7)
Quest-ce ? Motif permettant de décrire un
ensemble de chaînes de caractères.
Exemple de recherche de motif _ " Toto est
parti en vacances " if (/est/) print " motif
trouvé\n " Métacaractères caractères
spéciaux permettant de décrire un motif par
exemple le point . représente nimporte quel
caractère. Quantificateurs ? gt 0 ou 1 fois,
exemple dutilisation /ab?/ gt a suivi ou non
de b gt nombre quelconque de fois gt au
moins 1 fois n gt n fois n,m gt n à m fois
35Expressions régulières (2/7)
Alternative /tototiti/ gt chaîne toto ou chaîne
titi Classes de caractères /ab01w/ gt
nimporte quel caractère parmi a, b, 0, 1 et
w Raccourcis a-z tout lalphabet en
minuscules A-Z tout lalphabet en
majuscules 0-9 tous les chiffres Métacaractère
tous les caractères sauf ceux
indiqués /a3/ gt tous les caractères sauf a
et 3 \s caractères despacement
\w un caractère de mot, cest-à-dire
0-9a-zA-Z_ Ancres début de chaîne de
caractères fin de chaîne de caractères
36Expressions régulières (3/7)
Parenthèses de mémorisation () regroupement et
mémorisation de parties de motifs Utiles pour
les références arrières /(.)\1/ gt nimporte
quel caractère répété une fois /((tototiti)\s(ta
ta))\s\1/ gt toto tata toto tata ou
titi tata titi tata convient par
exemple /(tototiti)\s(tata)\s\1/ gt toto tata
toto ou titi tata titi /(tototiti)\s(t
ata)\s\2/ gt toto tata tata ou titi
tata tata Utiles pour les variables de
mémorisation une fois la correspondance réalisée
on utilise 1, 2, au lieu de \1, \2
37Expressions régulières (4/7)
Règles de priorité 1. les parenthèses 2. les
quantificateurs ,,?, 3. les ancres , , \b,
\B et la concaténation (/toto/ concatène t, o, t
et o) 4. lopérateur ou Attention à un
motif tel que /toto/ qui signifie totoooooo
par exemple différent de /(toto)/ qui lui peut
signifier totototototo
38Expressions régulières (5/7)
Recherche de motif avec _ par défaut on peut
également écrire m// au lieu de //. Recherche de
motif sur une autre variable toto wumBLE
diddle doo if (toto /did/) print " did
trouve\n " Insensibilité à la casse avec i
toto /ble/i permet de trouver BLE Variables
de correspondances automatiques texte
correspondant au motif texte correspondant à
ce qui précède le motif texte correspondant à
ce qui suit le motif
39Expressions régulières (6/7)
- Substitutions
- _ "Il fait beau aujourdhui\n "
- s/beau/mauvais
- print "_\n " si la correspondance échoue _
reste intacte - _ toto et tata
- s/(\w) et (\w)/2 ou 1/
- toto ou tata
- Remarque
- Une substitution renvoie vrai en cas de réussite
et faux sinon. - Remplacements globaux avec g
- _ " toto et toto "
- s/toto/tata/g renvoie en plus le nombre de
substitutions
40Expressions régulières (7/7)
Opérateur split Segmente une chaîne de caractères
suivant un séparateur décrit par une expression
régulière. _at_tab split /motif/,chaîne Exemple
_at_tab split /ltgt/, abcltgt103ltgt4w gt
(abc,103,4w) Opérateur join _at_tab
(abc,103,4w) colle ltgt chaine join
colle,_at_tab gt chaine abcltgt103ltgt4w