<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 de ordinateurs (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) :
	ORG	0
	WORD	0x400 ; initialisation SP
	WORD	debut ; initialisation PC
un:	WORD	1
LedBP:	EQU	0x8002
Digit:	EQU	0x8002

;; adresses des variables en RAM
ctr:	EQU	0x200

;; programme
debut:	ORG	0x10
	LDR	R0, #0
	STR	R0, [#ctr] ; initialisation de ctr
	LDR	R1, [#un]
loop:	LDR	R0, [#ctr]
	ADD	R0, R1
	STR	R0, [#ctr]
	STR	R0, [#Digit] ; affichage du ctr
	B	loop
En plus du code binaire exécutable, l'assembleur restitue un compte-rendu textuel dit listing d'assemblage :
0x0000 : 0x0400 /        ; initialisation SP
0x0002 : 0x0010 /        debut /        ; initialisation PC
0x0004 : 0x0001 /un:     
0x0010 : 0x8000 /debut:  LDR R0, #0x0000
       : 0x0000
0x0014 : 0x6800 /        STR R0, [#ctr]; initialisation de ctr
       : 0x0200
0x0018 : 0x8810 /        LDR R1, [#un]
       : 0x0004
0x001c : 0x8800 /loop:   LDR R0, [#ctr]
       : 0x0200
0x0020 : 0x1001 /        ADD R0, R1 
0x0022 : 0x6800 /        STR R0, [#ctr]
       : 0x0200
0x0026 : 0x6800 /        STR R0, [#Digit]; affichage du ctr
       : 0x8002
0x002a : 0xDEf0 /        B loop
Ici la première colonne donne les adresses mémoire, la seconde les données (dont certaines sont des instructions), 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 "SFO"
automates séquentiels, FSM, microprogrammation
systèmes logiques, algèbre de Boole
électricité : signaux et circuits "électronique"
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 :