PROGRAMMATION EN
LANGAGE D’ASSEMBLAGE
[Link]
Cours n°2 : Premiers pas
Le Fil_Rouge….
Le projet Fil_Rouge est constitué
de
4 fichiers en langage
d’assemblage
STM32F10X.s
[Link]
[Link]
Fil_Rouge.asm
1 fichier objet.
serial.o
Que fait Fil_Rouge ?
Il ne suffit Ce programme calcule le
pas d’être moyenne de deux nombres et
génial pour
être un affiche le résultat…
génie…
Facile En langage C :
pour
moi… printf(%d\n, (ValUn+Valdeux)/2);
En langage d’assemblage :
listing de deux pages pleines
Sauf qu’en LA on fait tout !
De l’initialisation du processeur …
…à la gestion des flux sortant pour
l’affichage.
Premier constat...
Un programme n’est pas un
fichier….(cela pourrait l’être…)
Adjonction d’un ficher objet : serial.o
= bibliothèque qui permet
l’utilisation d’une des
communications série du STM32
STM32F10x.s : fichier d’initialisation
du processeur….écrit en assembleur
par Keil et repris par l’équipe
pédagogique INSA
Autres fichiers : écrit en assembleur
par le programmeur
Chaine de développement Vous pouvez
parler un peu
moins fort…
Je bosse
moi !
•Traduit le listing en langage machine…
• Les fichiers « objet » construit sur des
adresses relatives
•Réunit les différents objets…
• Les adresses deviennent absolues
• Les « liens » sont faits
•Charge le fichier éxécutable en mémoire
• Protocole (physique et logiciel) de comunication
Le fichier Fil_Rouge.asm
Est-ce aussi incompréhensible ? Pourquoi ?
Un fichier en LA : suite
PROGRAM LIMITE
REAL U1, U2, U3, E
J’ai écrit de caractères
INTEGER I, R = fichier
cette ligne
rien que source
PRINT*, 'Limite
1)'
de peut être
la suite U(n+1) écrit
= U(n) - U(n-
pour TOI… avec n’importe
PRINT*, 'U(1)
READ*, U1, U2
et U(2) ?' quel
éditeur….
PRINT*, 'Rang maximum'
READ*, R
PRINT*, 'Precision'
Avantage du syntaxique
READ*, E
…
I=3
des parties non
WHILE ((I .LE. R) .AND. (ABS(U2-U1) .GT. E)) DO
U3 = (U2-U1)/(U2+U1)
C’est la ligne homogènes U1 = U2
70 sur ton U2 = U3
listing
Langage peu
ENDWHILE
I=I+1
compréhensible en
IF (ABS(U2-U1) .LE. E) THEN
PRINT*, 'U(inf) = ', U2
première lecture …
ELSE
PRINT*, 'Desole'
ENDIF
STOP
La ligne type
Symbole :
Une ligne type estVariable,
constituée de 4
Constante,
LABEL5 ADDS R2,R11,R3
Procédure, Section,
champs
Etiquette,….
LABEL5 est une étiquette
Elle qui vaut (par exemple)
0x08000044
Le champs [Etiquette]
Les crochets [ ] : Le champs est facultatif
Toujours sur la première colonne de la ligne
C’est symbole (choisi par l’utilisateur)
L’étiquette repère une adresse : c’est un point
de rendez-vous (code)
Etiquette sur ligne vide : repère la ligne suivante
La ligne type
Une ligne type est constituée de 4
champs
Le champs mnémonique
Mnémonique = instruction en elle-même : ce que
doit faire le processeur à ce cycle d’horloge.
Ici B c’est à dire Branch
Ensemble des mnémoniques = jeu d’instructions
Champs obligatoire (sauf si c’est une seule ligne
de commentaires)
La ligne type
Une ligne type
Sans est: NOP
opérande constituée de 4
Un opérande : BX LR
champsDeux opérandes MOV R1,#2
Trois opérandes ADDS
R2,R11,R3
Le champs Opérandes
De 0 à 3 (exceptionnellement 4) opérandes
possibles – séparés par des virgules
Le nombre dépend de l’instruction mais aussi
des choix du programmeur et des possibilités de
codage….
Opérandes = matériel sur lequel travaille le
processeur.
Je passe beaucoup
La ligne type
de temps à
commenter mon
travail …car les
gensligne
Une qui me relisent
type est constituéeIntérêt
de 4de
n’ont pas mon génie
champs L’éditeur
! syntaxique
Le champs Commentairesssssss
Listings durs à lire : les commantaires sont
salvateurs
Débutent n’importe où et après un ;
Finissent avec la ligne
Peuvent constituer une ligne entière
Abondant et intelligents – pas une redite du code
Les instructions
Un programme = une suite d’instructions…
Que peut – on faire ?
Peu de chose à chaque cycle
1 instruction = 1 opération rudimentaire
Avec quoi ou Sur quoi travaille l’instruction
Uniquement des octets (8), ½ mots (16) ou mots (32)
Représente des entiers (signée ou non) ou des
caractères.
Si on veut faire + compliqué
Combinaison d’instructions (structure algo par ex.)
Utilisation de bibliothèque (travail en flottant par ex.)
Exécution d’une instruction
Pipeline en 3 étapes
1. Récupération
Lecture en mémoire et incrémentation du
pointeur d’instructions
2. Décodage de l’instruction
3. Exécution
Réalise l’opération demandé
Peut mettre à jour les fanions dans le
registre d’état xPSR
Accès à la mémoire
ATTENTIO
L’architecture duNCortex est de type
Load/Store seules
L’ALU nequelques instructions
spécialisées ont accès à la mémoire.
travaille
QUE sur
L’espace mémoire est de 4Go.
du 32 bits
Adresses possibles : 0x00000000 à 0xFFFFFFFF
Une adresse correspond à un octet
Le processeur peut charger ou affecter
Des octets : contenu d’1 adresse
Des ½ mots : contenu de 2 adresses consécutives
Des mots : contenu de 4 adresses consécutives
Organisation mémoire
De type little-endian par défaut
(configurable)
Choix de
représentation
@ croissantes vers le
haut
Contenu en héxa
(largeur fixe 1 digit héxa = 4bits)
Registre :
Récupération
Espace mémoire
Avec :
dont le contenu
MOV
Une adresse = 1 quantité 8 bits
affecte directement
Une R1,#0XAA
instruction = 1 quantité 16 bits (jeu
la fonctionnement
Je mets
Thumb) ou170 dans(jeu du
32 bits Thumb-2)
processeur
le registre R1
Machine Harvard : code stockée dans la zone
adresse : 0x00000000 àProcesseur
0x1FFFFFFF 32
bits : tous les
Le pointeur d’instruction (PC) est un registre
registres sont 32
qui contient l’adresse oùbitsse trouve
l’instruction courante.
Une fois l’instruction lue, PC est incrémenté
de 2 (Thumb) ou 4 (Thumb-2)
PC est aussi appelé R15
Exécution
Avec :
Le processeur effectue l’instruction :
MOVS
MOV R1,#0XAA
R1,#0XAA
R1 sera affecté
Je fais avec 170
le même
chose.. les fanions = compte
Possibilité d’affecter
rendu de ce qui s’est passé
Nécessite le suffixe S au mnémonique
Vrai pour la grosse majorité des instructions
Coté facultatif : particularité de l’assembleur ARM
Il existe 5 fanions = 5 bits de PF du
registre d’état xPSR
Le registre xPSR
Registre trois-en-un
Contient des informations sur le processeur
xPSR
APSR : Applicatif – Mode courant – Celui qui
intéresse le programmeur – Contient les fanions
Le registre xPSR
Registre trois-en-un
Contient des informations sur le processeur
xPSR
IPSR : Interruption – Contient le numéro
courant de l’exception ou de l’interruption
Le registre xPSR
Registre trois-en-un
Contient des informations Avec
sur le: processeur
LDM R2,{R4-R7}
xPSR Je charge les registres R4
à R7 avec ...
…trop compliqué pour
vous !
EPSR : Exécution - Contient des informations
lors du déroulement d’instructions particulières
Le registre xPSR
On ne s’en occupe généralement pas
directement en programmation …
… mais essentiel dans le fonctionnement
et donc utilisation indirecte
On le regarde en mise au point
Les fanions
Utilité
Pour conditionner des instructions (notamment de saut)
Mise en place de structures algorithmiques
Fanion C (APSR.29): Carry
Représente la retenue lors du calcul sur des grandeurs
entières (non signées).
C = 1 débordement lors de l’instruction précédente
(résultat faux).
La connaissance de ce bit permet de travailler en
précision multiple.
Fanion Z (APSR.30) : Zéro
Vaut 1 si le résultat est nul.
Les fanions
Indicateur N (APSR.31): Negative
Recopie le bit de poids fort du résultat.
N à 1 résultat négatif.
Indicateur V (APSR.28): oVerflow
V = 1 débordement de la représentation
signée (résultat signé faux ).
Indicateur Q (APSR.27) : Sticky saturation flag
Sens que pour 2 instructions de saturation
USAT et SSAT :
Q = 1 saturation de la variable traitée.