Ecrire de l’assembleur sur un simulateur

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/

De python à l’assembleur

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

AIDE: L’ensemble d’instructions AQA

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):

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 /.

Affectations

Charge la valeur stockée dans l’emplacement de mémoire spécifié par <adresse mémoire> dans le registre d.

Stocke la valeur qui se trouve dans le registre d dans l’emplacement de mémoire spécifié par <adresse mémoire>.

Copiez la valeur spécifiée par <opérande 2>dans le registre d.

Opérations

Ajouter la valeur spécifiée dans <opérande 2>à la valeur du registre n et stocker le résultat dans le registre d.

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.

Comparaisons

Comparez la valeur stockée dans le registre n avec la valeur spécifiée par <opérande 2>

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:

Sauts(JUMP)

Toujours relier l’instruction à la position <label> dans le programme.

Fin du programme
Non utilisées dans ce TD

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.

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.

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.

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.

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.

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.

Sources