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.