<index<

Langage d'Assemblage 1

1. Introduction

1.1 Notre mission

Dans le cadre de la 3eme année MIC 2014-2015, nous avons : Le cours et les TD doivent apporter une compétence en langage d'assemblage applicable aux architectures les plus courantes, y compris le développement d'applications mixtes C/assembleur, et faire le lien avec l'enseignement d'architecture matérielle (SFO)
Le TP portera sur la programmation du microcontrôleur STM32, basé sur un coeur Cortex M3 de la famille ARM, aussi cette plateforme aura un rôle privilégié dans le cours.

1.2 Qu'est-ce que le langage d'assemblage ?


Dans l'ordinateur les données et instructions sont traitées uniquement sous forme binaire (d'autres approches ont été tentées mais aucune n'a abouti à un résutat exploitable).
Dans les premiers temps l'interface utilisateur était aussi en binaire !
Pour représenter les données binaires "sur papier" on a utilisé : La notation hexadécimale est devenue favorite suite à la généralisation des mots de données multiples de 8 bits (système Unix).
Pour faciliter l'écriture des programmes, on a développé une représentation textuelle du code utilisant des symboles alphanumériques : Cette représentation textuelle est le langage d'assemblage (ASM).
Le programme qui la traduit en code machine (binaire) est l'assembleur.
L'assembleur fait plus qu'une traduction mot-à-mot, il calcule l'adresse effective de chaque instruction et chaque donnée en vue d'attribuer une valeur numérique à chaque label.
Exemple de programme en langage d'assemblage (Plateforme INSA pour TP d'architecture LILAS/NEXYS3),
avec la disposition caractéristique en 3 colonnes (label, opcode, arguments) :
        thumb
        area    zecode, code, readonly
;
diproc  proc
        push    { r4, r5, r6, lr }
        mov     r4, r0
        mov     r5, #0          ; X = 0
        mov     r6, #0x80000000 ; 2 puissance 31
boucle  orr     r5, r6          ;
        mov     r0, r5          ;
        blx     r1              ; appel indirect
        cmp     r0, r4          ; comparer
        bls     go_ok           ; "ls" = "unsigned lower or same"
        eor     r5, r6          ;
go_ok   lsrs    r6, #1          ;
        bne     boucle          ;
        mov     r0, r5          ;
        pop     { r4, r5, r6, pc }
        endp
        end
En plus du code binaire exécutable, l'assembleur restitue un compte-rendu textuel dit listing d'assemblage :
00000000                     thumb
00000000                     area    zecode, code, readonly
00000048             ;
00000048             dicho   proc
00000048 B570                push    { r4, r5, r6, lr }
0000004A 4604                mov     r4, r0
0000004C F04F 0500           mov     r5, #0
00000050 F04F 4600           mov     r6, #0x80000000
00000054 EA45 0506   boucle  orr     r5, r6
00000058 4628                mov     r0, r5
0000005A 4788                blx     r1
0000005C 42A0                cmp     r0, r4
0000005E D901                bls     go_ok
00000060 EA85 0506           eor     r5, r6
00000064 0876        go_ok   lsrs    r6, #1
00000066 D1F5                bne     boucle
00000068 4628                mov     r0, r5
0000006A BD70                pop     { r4, r5, r6, pc }
0000006C                     endp
0000006C                     end
Ici la première colonne donne les adresses mémoire, la seconde les données, qui constituent le code exécutable, tout cela en hexadécimal.

1.3 Pourquoi s'y intéresser ?

Le langage d'assemblage a mauvaise réputation : Pour ces raisons (surtout la dernière), la part relative de l'ASM dans les activités de développement logiciel diminue continuellement.
Cependant bienqu'on développe peu de code en ASM, celui-ci reste une composante indispensable de la technologie moderne.

Modèle en couches des technologies impliquées dans l'informatique moderne

applications (web, multimedia, etc...)
langage interprêtés (javascript, python, php, etc...)
programmation orientée objet (C++, java, etc...)
systèmes d'exploitation
langage C
programmation en langage d'assemblage
architecture des ordinateurs
automates séquentiels, FSM, microprogrammation
systèmes logiques, algèbre de Boole
électricité : signaux et circuits électroniques
technologie et modélisation des composants à semi-conducteurs (et autres)
physique du solide, mécanique quantique
Dans ce type de représentation, la disposition est telle que la couche N utilise les services de la couche N-1 (en dessous) pour satisfaire les besoins de la couche N+1 (au dessus).
La programmation dite "bas niveau" concerne le plus souvent des fonctions élémentaires génériques ou proches du matériel (calcul intensif, accés aux périphériques) qui sont mises à disposition des couches supérieures sous forme de bibliothèques de fonctions.

Comparaison de langages de programmation


Cette vision est très simpliste : La comparaison d'efficacité est établie en supposant que la totalité d'un système est bâti avec un seul langage. Dans la pratique, on tend vers un mélange optimal de langages.

Exemple : Une photo dans une page web :

1.4 Domaines d'application

Par ailleurs la maîtrise du langage d'assemblage est indispensable à :

Compétition ASM/C

Lorsque l'objectif est la performance machine et qu'on dispose d'un compilateur C avec de bonnes capacités d'optimisation, la solution ASM ne sera retenue que si elle surclasse la solution C optimisée.
Quelques raisons qui peuvent amener un expert développeur ASM à "battre" de compilateur C :
Suite...