Assembleur : AQA


Le yeti explorateur de mathématique et d'informatique. yeti

Jeu d'instruction AQA traduit en français.

  • LDR Rd, <adresse mémoire> Charge la valeur enregistrée dans l'<adresse mémoire > dans le registe d
  • STR Rd, <adresse mémoire> Enregistre la valeur du registre d dans la mémoire spécifiée par <adresse mémoire >
  • ADD Rd, Rn, <operand2> ajoute la valeur spécifiée par <operand2> à la valeur du registre d et enregistre le résultat dans le registre d
  • SUB Rd, Rn, <operand2> Soustrait la valeur de <operand2> à la valeur du registre n et enregistre le résultat dans le registre d
  • MOV Rd, <operand2> Copie la valeur <operand2> dans le registre d
  • CMP Rn, <operand2> Compare la valeur de registre n avec la valeur de <operand2>.
     
  • B <label> Branchement inconditionnel jusqu'à la positon <label> dans le programme.
     
  • B<condition> <label> Branchement conditionnel vers la position <label> dans le programme si la dernière comparaison rempli le critère spécifié par <condition>. Les valeurs possibles sont : EQ:égal à ; NE: n'est pas égal à; GT:Plus grand que; LT: Moins grand que.
  • AND Rd, Rn, <operand2> Effectue l'opération bit à bit logique AND (ET) entre la valeur du registre n et la valeur <operand2> et enregistre le résultat dans le registre d.
  • ORR Rd, Rn, <operand2> Effectue l'opération bit à bit logique OR (OU) entre la valeur du registre n et la valeur <operand2> et enregistre le résultat dans le registre d.
  • EOR Rd, Rn, <operand2> Effectue l'opération bit à bit logique XOR(OU exclusif) entre la valeur du registre n et la valeur <operand2> et enregistre le résultat dans le registre d.
  • MVN Rd, <operand2> Effectue l'opération bit à bit logique NOT (NON) sur la valeur <operand2> et enregistre le résultat dans le registre d.
  • LSL Rd, Rn, <operand2> Décale de <operand2> bit(s) vers la gauche la valeur du registre n et enregistre le résultat dans le registre d
  • LSR Rd, Rn, <operand2> Décale de <operand2> bit(s) vers la droite la valeur du registre n et enregistre le résultat dans le registre d
  • HALT Arrête l'execution du programme.
  • <operand2> peut être #nnn (c'est à dire un nombre, exemple #42) ou bien Rm (c'est à dire le registre m , par exemple R1 est le registre numéro 1)
     
  • Les registres vont de R0 à R12.

Compléments data, INP et OUT :

  • la pseudo instruction DAT vous permet de mettre un nombre dans la mémoire en utilisant l'assembleur. Un label peut aussi être pris comme donnée.
  • INP Rd,2 lis un nombre dans le registre d.
    OUT Rd,4 retourne en sortie le nombre du registre d
    Pour OUT, vous pouvez retourner des nombres signés (paramètre 4), des nombres non signés (paramètre 5), des hexadécimaux (paramètre 6) ou des charactères (paramètre 7).
    Vous pouvez entrer des hexa comme 0xnnn partout où un nombre est attendu.

A traduire, les ajouts de la version 0.07 : 

  • Video Memory. The output area can also be addressed as a 32 column by 24 row array, starting at address 256 in the top left and ending at address 1023 in the bottom right. The STR instruction is used to write a 24 bit HTML Colour Code to the pixel address. (So, for example, 0 is black and 0xff0000 is red.) Note that the top 8 bits in the register are ignored and the 24 bit pattern can be read using LDR.
  • Additional Input Device Codes. INP Rd,4 reads the Key Code of the last key pressed on the keyboard into the register d. If no key has been pressed a zero is returned. (Device Code 5 clears the character on read so you can tell if a new key has been pressed.) The Key Code for a (or A) is 65 and for 1 is 49. Beware that using any key with a Browser function may behave unpredictably.
  • Additional Input Device Code. INP Rd,8 reads a random 32 bit pattern into the register d.
  • Additional Output Device code. OUT Rd,8 uses the contents of the register d as the address of a null terminated ASCII string in memory which is written to the output area. Note the characters need to be in little-endian order.
  • Numeric <memory ref>. In previous versions of this simulator <memory ref> can only be a label because my original understanding was that the addressing of memory was hidden (particularly because of the bytes/words conflict). However AQA have set questions that use numeric <memory ref> and so that is now permitted. (Note this does not apply to branch which still requires a label.)
  • Extended Immediate Range for MOV. AQA do not specify the allowed range of immediate operands. The simulator implements the range allowed by ARM - a simplified version of which is a byte in any of the four positions in a word. It is hard to explain to students why, for example, MOV R1,#768 is valid but MOV R1,#767 is not allowed. To avoid this unnecessary complication and to make HTML Colour Codes usable as immediate operand values, I have implemented an extended immediate range for the MOV instruction. Any 26 bit positive value can be used (only with MOV). AFAIK this is the only departure from valid ARM op-codes. (Assuming you had a handler for SPI used for HALT, INP and OUT. The extended MOV uses other SPI and co-processor op-codes and so is unlikely to be affected by any extension to the AQA instruction set.)