Documentation Assembleur AQA

Documentation Assembleur AQA

Traduction de la documentation d’AQA #

Contexte #

L’objectif de ce simulateur est de permettre aux étudiants de se familiariser avec le langage assembleur spécifié par AQA et utilisé dans les niveaux AS et A des examens de science informatique.

Remarque du traducteur : AQA est un centre d’examen qui offre aux lycéens du royaume uni un diplome équivalent du baccalauréat. Il comporte une option science informatique. A level ~ baccalauréat. AS level ~ baccalauréat technologique.

Suppositions #

AQA ne spécifie pas son langage assez précisemment pour créer un assembleur donc certaines suppositions ont dû être faites.

Remarque du traducteur : cette partie n’intéresse que les enseignants qui cherchent à créer un sujet et le tester dans l’assembleur.

Le jeu instructions AQA #

  • LDR Rd, <memory ref> charge une valeur enregistrée en mémoire à une adresse précisée par <memory ref> dans un registre d

  • STR Rd, <memory ref> enregistre la valeur du registre d dans la mémoire à l’adresse <memory ref>.

  • ADD Rd, Rd, <operand2> ajoute la valeur spécifiée dans <operand2> à celle enregistrée dans le registre n et l’enregistre dans le registre d

  • SUB Rd, Rd, <operand2> soustraie la valeur spécifiée dans <operand2> à celle enregistrée dans le registre n et l’enregistre dans le registre d

  • MOV Rd, <operand2> copie la valeur spécifiée par <operand2> dans le registre d.

  • B <label> (branch) réalise un saut (sans condition) jusqu’à l’instruction située à la position <label> dans le programme.

  • B<condition> <label> réalise un saut jusqu’à la position <label> si la dernière comparaison réalisée vérifie une condition. Les valeurs possibles pour <condition> sont : EQ (équal, égal), NE (not equal, différent), GT (Greater Than, plus grand que), LT (Less than, plus petit que).

  • AND Rd, Rn, <operand2> réalise un ET logique bit à bit entre la valeur du registre n et <operand2> et l’enregistre dans le registre d

  • ORR Rd, Rn, <operand2> réalise un OU logique bit à bit entre la valeur du registre n et <operand2> et l’enregistre dans le registre d

  • EOR Rd, Rn, <operand2> réalise un OU exclusif (XOR) logique bit à bit entre la valeur du registre n et <operand2> et l’enregistre dans le registre d

  • MVN Rd, <operand2> réalise un NON logique bit à bit de <operand2> et l’enregistre dans le registre d

  • LSL Rd, Rn, <operand2> Réalise un décalage à gauche (logical shift left) de <operand2> bits sur la valeur du registre n et l’enregistre dans le registre d. RQ cela revient à multiplier par 2 ** <operand2>

  • LSR Rd, Rn, <operand2> Réalise un décalage à droite (logical shift right) de <operand2> bits sur la valeur du registre n et l’enregistre dans le registre d. RQ cela revient à faire la division entière par 2 ** <operand2>

  • HALT arrête le programme

  • <operand2> peut être un nombre noté #234 pour $234$ ou un registre, noté Rd.

  • Les registres vont de R0 à R12.

Extensions INP et OUT #

  • INP Rd, 2 lit un nombre depuis la zone de saisie et l’enregistre en registre d, OUT Rd, 4 affiche un nombre.

    Changer le numéro 4 change le mode :

    • 4 : nombre signé
    • 5 : nombre non signé
    • 6 : hex
    • 7 : caractère

Commentaire #

Tout ce qui suit un / est un commentaire. J’ai partout utilisé // dont l’usage est fréquent dans les langages haut niveau.

Suite #

beaucoup de commentaires trop techniques pour nous.

boucle Récupérer et exécuter (Fetch / Execute cycle) #

Elle est animée par des blocs qui se déplacent. Ainsi qu’on peut s’en douter, certains navigateurs ont des soucis avec les blocs de nombre trop grands.

Sources #

Auteur : peterhigginson

Traducteur : qkzk