1- Introduction
Le langage assembleur, ou langage machine, est un ensemble d'instructions qui permettent de traiter l'information de base d'un microprocesseur.
Un microprocesseur traite les informations en utilisant un programme qui se trouve en mémoire RAM : il exécute les instructions les unes après les autres.
Pour mémoire, l'information de base est un ensemble de 0 et 1 organisés en octet (code ascii par exemple) ou multiple d'octets (représentation d'un nombre décimal avec la norme IEEE).
Chaque microprocesseur à son propre jeu d'instructions qui permettent de globalement de :
- lire/écrire en mémoire RAM (pour mémoire la RAM n'est pas dans le microprocesseur, mais à côté)
- lire/écrire dans les registres (pour mémoire les registres sont dans le microprocesseur et permettent de mémoriser à très court terme des informations)
- faire des calculs plus ou moins poussé selon le jeu d'instructions du microprocesseur,
- faire des tests logiques (égalité, plus grand ou plus petit...),
- faire une rupture de séquence (par exemple, en fonction d'un test, d'indiquer au microprocesseur où se trouve la prochaine instruction à exécuter).
L'objectif de cette activité n'est pas de vous apprendre à programmer en assembleur, mais de comprendre comment fonctionne un programme assembleur.
2- Utilisation de l'interface d'un simulateur de micro-processeur selon l'architecture de Von Neumann
L'utilisation est simple :
Le registre PC, le compteur d'instructions, indique l'adresse de la prochaine instruction à exécuter.
Sur la capture d'écran, la première instruction qui correspond à MOV R0,#42 est située à l'adresse 0 (surlignée en rose).
3- Quelques instructions de base
a- Écrire un nombre dans un registre et stocker cette valeur en RAM
Recopier le code ci-dessous afin de lancer la simulation.
MOV R1,#40
STR R1,35
HALT
Les instructions sont issues de l'anglais : MOV pour move et STR pour store.
Ce programme est l'équivalent python de varA=40.
C'est le système d'exploitation qui choisirait alors à quelle adresse stocker cette variable.
Il existe aussi l'instruction LDR (pour load) dont un exemple est donné ci-dessous.
b- Additionner une valeur de la RAM avec un nombre et stocker le résultat en RAM
Pour faciliter la suite du travail, vous sélectionner dans les options signed.
Recopier le code ci-dessous dans la zone de code.
LDR R3,25
ADD R1,R3,#15
STR R1,27
HALT
Cliquer dans la RAM à l'adresse 25 pour y écrire le chiffre -13 et lancer la simulation.
Ce programme est l'équivalent python de :
varC = varA + 15, sachant que varA est déjà en mémoire à l'adresse 25.
Plusieurs variantes d'opérations sont possibles :
ADD R1,R2,R3 ⇾ signifie R1=R2+R3
SUB R1,R3,#15 ⇾ signifie R1=15-R3
SUB R1,R2,R3 ⇾ signifie R1=R3-R2
c- Comparer deux valeurs et indiquer où continuer le déroulement du programme
Voici 3 nouvelles instructions :
- CMP R0,R1 ⇾ compare R0,R1 : comparer les valeurs des registres R0 et R1
- BEQ true ⇾ branch equal : si les deux valeurs comparées sont égales, aller à l'étiquette true.
- B sauv ⇾ branch sauv : aller à l'étiquette sauv.
À noter qu'une étiquette est en réalité une adresse mémoire indiquant la prochaine instruction à exécuter.
Afin de savoir comment elles s'utilisent, faites l'exercice suivant.
Compléter l'algorigramme qui est l'équivalent du programme assembleur.
Compléter l'état des registres et de la RAM une fois le programme fini.
Plusieurs variantes de comparaison sont possibles :
CMP R0,R1 suivi de :
BNE étiquette ⇾ branch not equal
BGT étiquette ⇾ branch greater : R0 > R1
BLT étiquette ⇾ branch lowest : R0 < R1
4- Écrire un programme simple
Vous allez reproduire l'algorigramme suivant avec le simulateur.
Je vous conseille de regarder le cours en ressource de David Roche pour vous aider.
La variable x est à stocker à l'adresse 20 et c'est le registre R1 qui l'utilise.
La variable y est à stocker à l'adresse 21 et c'est le registre R2 qui l'utilise.
Coller le code de votre programme assembleur et indiquer l'état des registres et de la mémoire une fois le programme fini.
Ne valider qu'une fois toutes les données saisies : je corrigerai votre proposition.