GÉNIE ÉLECTRIQUE
Dernière mise à jour |
Fonction: Traitement programmé de l'information. Les différents modes d’adressage: Le mode d’adressage caractérise lors de l’exécution d’une instruction, comment le microprocesseur effectue les échanges avec la mémoire. Les unités centrales de la famille 6800 de Motorola utilisent six modes d’adressage différents.
En adressage immédiat, l’instruction est suivie directement par la donnée sur un ou deux octets suivant le type de registre utilisé. Le mode d’adressage immédiat est indiqué lors de l’écriture d’un programme en assembleur par le symbole # qui précède la donnée. Exemple: On désire charger l’accumulateur A avec la valeur hexadécimale 8B. Cette opération en assembleur se traduit par: "ldaa #$8B" (# pour immédiat, $ pour hexadécimal). Cette instruction sera convertie par l’assembleur en: "86 8B". Lors de l’exécution d’un programme, lorsque le code 86 est présent sur le registre "Décodeur d’instruction", le microprocesseur va charger l’accumulateur A avec la donnée qui se trouve juste à l’adresse suivante.
Dans ce type d’adressage l’opérande se trouve à l’adresse spécifiée sur un ou deux octets qui suivent l’instruction. En adressage direct, l’adresse apparaît de façon explicite sur un octet à la suite de l’instruction. C’est l’octet de poids faible, l’octet de poids fort est implicitement à $00. L’adressage direct ne peut être effectué qu’en page 0. C’est à dire de l’adresse $0000 à l’adresse $00FF. Exemple: On désire charger l’accumulateur B avec 8B qui est rangée à l’adresse $0005. Cette opération en assembleur se traduit par: "ldab $05". Cette instruction sera convertie par l’assembleur en: "D6 05". Lors de l’exécution d’un programme, lorsque le code D6 est présent sur le registre "Décodeur d’instruction", le microprocesseur va charger l’accumulateur A avec la donnée 8B qui se trouve à l’adresse $0005. En adressage étendu, l’adresse apparaît de façon explicite sur deux octets à la suite de l’instruction. La donnée peut se trouver n’importe où dans les 64 Koctets de mémoire. Exemple: On désire charger l’accumulateur A avec 8B qui est rangée à l’adresse $F105. Cette opération en assembleur se traduit par: "ldaa $F105". Cette instruction sera convertie par l’assembleur en: "B6 F105". Lors de l’exécution d’un programme, lorsque le code B6 est présent sur le registre "Décodeur d’instruction", le microprocesseur va charger l’accumulateur A avec la donnée 8B qui se trouve à l’adresse $F105.
En adressage inhérent l’instruction se suffit à elle-même. Le code hexadécimal de l’instruction est alors suivi par aucun octet. C’est le cas par exemple des instructions "aba" qui additionne le contenu de l’accumulateur A au contenu de l’accumulateur B et qui range le résultat dans l’accumulateur A ou encore de l’instruction "swi" qui réalise une interruption logicielle.
L’adressage relatif est utilisé pour effectuer des branchements dans un programme. Ces branchements doivent être possible en amont ou en aval de l’instruction. Pour cela l’adressage relatif utilise des nombres signés codés sur 8 bits. Les branchements sont seulement possible sur +127 octets ou sur -128 octets. En langage Assembleur l’instruction de branchement est simplement suivie par l’étiquette de l’adresse correspondant au branchement. Exemple: On désire tester le bit 7 du port C. Tant que celui-ci n’est pas à 0, le test est effectué. Programme: TEST ldaa PORTC B6 10 03 lecture du port C bmi TEST 2B FB Effectue un saut négatif à TEST tant que PC7 est à 1 swi
L’adressage indexé est utile pour accéder successivement aux éléments d’une table. Le contenu du registre d’index est ajouté à l’adresse pour fournir l’adresse finale. De cette façon l’adresse pourrait être l’adresse de début d’une table et le registre d’index serait utilisé pour accéder successivement à tous les éléments de la table. Exemple: Nous allons tester dans une table de 100 éléments, la présence de la valeur "0". L’adresse de départ de cette table est appelée DEB et est supposée inférieure à 256 ($100). Algorithme du programme: 1-Initialiser pour pointer le registre DEB. 2-Charger la valeur du registre pointé . 3-Comparer à la valeur "0": 31-Si la valeur du registre pointé est égale à "0" aller à l’étape 5 32-Si non, pointer le registre suivant et continuer.. 4-Tester si c’est le dernier registre de la table: 41-Si oui, aller à l’étape 5 42-Si non, retourner à l’étape 2 5-Fin Programme: ldx #$00 SUIVANT ldaa DEB,X cmpa #$00 beq TROUVE inx cpx #100 bne SUIVANT TROUVE swi HECTOR M Décembre 2001 |
|