La page suivante propose d’écrire quelques programmes en assembleur.
https://pixees.fr/informatiquelycee/n_site/nsi_prem_sim_cpu.html
Elle utilise la simulation de Peter Higginson qui simule le langage assembleur AQA.
http://www.peterhigginson.co.uk/AQA/
Voici un programme Python très simple :
x = 4
y = 8
if x == 10:
y = 9
else :
x=x+1
z=6
et voici maintenant voici son équivalent en assembleur :
MOV R0, #4
STR R0,30
MOV R0, #8
STR R0,75
LDR R0,30
CMP R0, #10
BNE else
MOV R0, #9
STR R0,75
B endif
else:
LDR R0,30
ADD R0, R0, #1
STR R0,30
endif:
MOV R0, #6
STR R0,23
HALT
Après avoir analysé très attentivement le programme en assembleur ci-dessus, vous essaierez d’établir une correspondance entre les lignes du programme en Python et les lignes du programme en assembleur. À quoi sert la ligne “B endif” ? À quoi correspondent les adresses mémoires 23, 75 et 30 ?
Source: pixees.fr CC-BY-SA
Voici une traduction de la documentation proposée à partir du bouton INFO
Les registres sont numérotés de R0
à R12
.
Les opérations peuvent être effectuées sur deux types de valeurs (notées <opérande2>
dans la suite):
#nnn
. Ex: #12
:
la valeur décimale 12.Rn
. Ex: R1
:
la valeur contenie dans le registre 1.On peut ajouter des étiquettes dans le programme (notées <label>
);
il suffit de noter le nom de
l’étiquette de son choix et de le faire suivre de deux points.
exemple:
asm test:
Toute référence à cette étiquette fera “sauter” le programme à la case mémoire de l’étiquette et exécutera donc les instructions qui suivent.
les commentaires commencent par au moins un /
.
LDR Rd, <adresse mémoire>
Charge la valeur stockée dans l’emplacement de mémoire spécifié par <adresse mémoire>
dans le
registre d.
STR Rd, <adresse mémoire>
Stocke la valeur qui se trouve dans le registre d dans l’emplacement de mémoire spécifié par
<adresse mémoire>
.
MOV Rd, <opérande2>
Copiez la valeur spécifiée par <opérande 2>
dans le registre d.
ADD Rd, Rn, <opérande2>
Ajouter la valeur spécifiée dans <opérande 2>
à la valeur du registre
n et stocker le résultat dans le registre d.
SUB Rd, Rn, <opérande2>
Soustrayez la valeur spécifiée par <opérande 2>
de la valeur du
registre n et stockez le résultat dans le registre d.
CMP Rn, <opérande2>
Comparez la valeur stockée dans le registre n avec la valeur spécifiée
par <opérande 2>
B <condition> <label>
Connectez conditionnellement l’instruction à la position <label>
dans
le programme si la dernière comparaison a répondu aux critères spécifiés par la <condition>
. Les
valeurs possibles pour <condition>
et leur signification sont les
suivantes:
EQ
: égal à,NE
: différent de,GT
: supérieur à,LT
: inférieur à. B <label>
Toujours relier l’instruction à la position <label>
dans le
programme.
HALT
: Arrête l’exécution du programme.AND Rd, Rn, <opérande2>
:Effectue une opération ET logique au niveau du bit entre la valeur du
registre n et la valeur spécifiée par <opérande 2>
et stocke le
résultat dans le registre d.
ORR Rd, Rn, <opérande2>
:Effectue une opération OU logique au niveau des bits entre la
valeur du registre n et la valeur spécifiée par <opérande 2>
et stocke
le résultat dans le registre
d.
EOR Rd, Rn, <opérande2>
:Effectue une opération logique ou binaire exclusive au sens des bits
entre la valeur du registre n et la valeur spécifiée par <opérande 2>
et stocke le résultat dans le
registre d.
MVN Rd, <opérande2>
:Exécutez une opération NOT logique au niveau des bits sur la valeur
spécifiée par <opérande 2>
et stockez le résultat dans le registre d.
LSL Rd, Rn, <opérande2>
:Décalez logiquement vers la gauche la valeur stockée dans le registre
n du nombre de bits spécifié par <opérande 2>
et stockez le résultat
dans le registre d.
LSR Rd, Rn, <opérande2>
:Décalez logiquement à droite la valeur stockée dans le registre n du
nombre de bits spécifié par <opérande 2>
et stockez le résultat dans
le registre d.