
Page 3.4 © Jacques Guizol
disposer de codes mnémoniques pour les opérations (ADD, SUB, MP, DIV, MOVE,… ), de
directives de déclaration (une table est totalement définie en une ligne d’assembleur qui indique
un nom symbolique (adresse), le type de ses éléments (octet, mot, double mot) et le nombre de ces
éléments)  et  surtout,  il  offre  la  possibilité  de  désigner  adresses,  variables,  noms  de
registres, etc. sous une forme symbolique.
Au  final,  bien  que  l’écriture  d’un  programme  en  assembleur  ne  représente  pas
nécessairement une partie de plaisir, elle s’avère “incomparablement plus” agréable
qu’en langage machine. D’ailleurs, l’assembleur est toujours d’actualité et même si
certains ricanent en parlant des “fêlés de l’assembleur” il n’en reste pas moins vrai
que si certaines portions d’un logiciel sont particulièrement utilisées, on aura tout
intérêt  à  les  écrire  en  assembleur  pour  bénéficier  de  la  meilleure  optimisation
possible.
4JABKEO?ALNKCN=IIAe?NEPAJH=JC=CA=OOAI>HAQNEHB=QP@KJ? HAPN=@QENA AJ
H=JC=CAI=?DEJA0QEOYAJ?D=NCA
L’assembleur !
Oui, en fait le langage lui-même et son traducteur ont le même nom !
 D>KJ"YAOPO=JO@KQPA?AMQAHYKJ=LLAHHAQJ=>QO@AH=JC=CA
La  traduction  va  avoir  pour  effet,  à  partir  du  programme  source,  de  générer  un
programme objet (comme  la  publicité  et  la  presse  de  pacotille  traduisent  la  femme  source  en
femme objet).
3.2.2. L’éditeur de liens.
Ce programme objet produit est rarement complet ; il est improbable qu’il puisse se
suffire à lui-même. Certaines directives ou certaines opérations permettent de faire
le lien avec des informations extérieures.
Ainsi un programme va être constitué d’un regroupement de plusieurs modules de
provenances diverses :
• Un programme gagnera en clarté s’il est découpé en “ morceaux”  chacun
ayant une fonction propre. Ainsi le programme principal se résumera à la
réservation de place pour les données communes aux divers “ morceaux”
et  aux  appels  de  ceux-ci,  aux  endroits  désirés,  grâce  à  une  instruction
regroupant une code spécifique et un argument adresse. Ces “ morceaux”
de programme sont appelés sous-programmes.
• Etant donné qu’il est inutile que chacun réinvente à chaque instant le fil à
couper le beurre, un programme va aussi faire appel à toute une batterie
de fonctions particulières rassemblées dans des librairies (fonctions mathéma-
tiques, statistiques, de traitement de chaînes de caractères, etc.).
• Enfin,  systématiquement,  tout  programme  utilisateur  fait  appel  à  des
“ morceaux”  d’un programme particulier : le logiciel système. C’est le cas
dès que le programme doit opérer des opérations d’entrée-sortie avec un
quelconque périphérique ; c’est aussi le cas si le programme fait appel à
des  primitives  graphiques,  audio  ou  autres  ;  c’est  encore  le  cas  si  une
erreur fatale se produit en cours d’exécution.
Mises à part les routines systèmes, tous ces petits morceaux pris ici ou là sont en fait
sous la forme de  code objet. Chacun ayant  été traduit séparément, les  adresses et
références  internes  supposent  une  adresse  origine  en  0.  Quant  aux  références
externes, appel à des sous-programmes, à des parties de librairies, elles demeurent
non résolues.