Systèmes embarqués - Modes d'adressage

Un addressing modefait référence à la manière dont vous vous adressez à un emplacement mémoire donné. Il y a cinq manières différentes ou cinq modes d'adressage pour exécuter cette instruction qui sont les suivantes -

  • Mode d'adressage immédiat
  • Mode d'adressage direct
  • Enregistrer le mode d'adressage direct
  • Enregistrer le mode d'adressage indirect
  • Mode d'adressage indexé

Mode d'adressage immédiat

Commençons par un exemple.

MOV A, #6AH

En général, on peut écrire,

MOV A, #data

Il est appelé immediate car les données 8 bits sont immédiatement transférées vers l'accumulateur (opérande de destination).

L'illustration suivante décrit l'instruction ci-dessus et son exécution. L'opcode 74H est enregistré à l'adresse 0202. Les données 6AH sont enregistrées à l'adresse 0203 dans la mémoire programme. Après lecture de l'opcode 74H, les données à l'adresse mémoire de programme suivante sont transférées vers l'accumulateur A (E0H est l'adresse de l'accumulateur). Comme l'instruction est de 2 octets et est exécutée en un cycle, le compteur de programme sera incrémenté de 2 et pointera sur 0204 de la mémoire de programme.

Note- Le symbole '#' avant 6AH indique que l'opérande est une donnée (8 bits). En l'absence de «#», le nombre hexadécimal serait considéré comme une adresse.

Mode d'adressage direct

C'est une autre façon d'adresser un opérande. Ici, l'adresse des données (données source) est donnée sous forme d'opérande. Prenons un exemple.

MOV A, 04H

La banque de registres # 0 (4e registre) a l'adresse 04H. Lorsque l'instruction MOV est exécutée, les données stockées dans le registre 04H sont déplacées vers l'accumulateur. Lorsque le registre 04H contient les données 1FH, 1FH est déplacé vers l'accumulateur.

Note- Nous n'avons pas utilisé '#' en mode d'adressage direct, contrairement au mode immédiat. Si nous avions utilisé '#', la valeur de données 04H aurait été transférée vers l'accumulateur au lieu de 1FH.

Maintenant, jetez un œil à l'illustration suivante. Il montre comment l'instruction est exécutée.

Comme le montre l'illustration ci-dessus, il s'agit d'une instruction de 2 octets qui nécessite 1 cycle pour se terminer. Le PC sera incrémenté de 2 et pointera sur 0204. Le code opération pour l'instruction MOV A, l'adresse est E5H. Lorsque l'instruction en 0202 est exécutée (E5H), l'accumulateur est rendu actif et prêt à recevoir des données. Ensuite, le PC passe à l'adresse suivante comme 0203 et recherche l'adresse de l'emplacement de 04H où se trouvent les données source (à transférer vers l'accumulateur). En 04H, la commande trouve les données 1F et les transfère à l'accumulateur et donc l'exécution est terminée.

Enregistrer le mode d'adressage direct

Dans ce mode d'adressage, nous utilisons directement le nom du registre (comme opérande source). Essayons de comprendre à l'aide d'un exemple.

MOV A, R4

À la fois, les registres peuvent prendre des valeurs de R0 à R7. Il existe 32 registres de ce type. Afin d'utiliser 32 registres avec seulement 8 variables pour adresser les registres, des banques de registres sont utilisées. Il y a 4 banques de registres nommées de 0 à 3. Chaque banque comprend 8 registres nommés de R0 à R7.

À la fois, une seule banque de registres peut être sélectionnée. La sélection d'une banque de registre est rendue possible grâce à unSpecial Function Register (SFR) nommé Processor Status Word(PSW). PSW est un SFR 8 bits où chaque bit peut être programmé selon les besoins. Les bits sont désignés de PSW.0 à PSW.7. PSW.3 et PSW.4 sont utilisés pour sélectionner les banques de registres.

Maintenant, jetez un œil à l'illustration suivante pour bien comprendre son fonctionnement.

Opcode EC est utilisé pour MOV A, R4. L'opcode est stocké à l'adresse 0202 et lorsqu'il est exécuté, le contrôle passe directement à R4 de la banque de registres respectée (qui est sélectionnée dans PSW). Si la banque de registres n ° 0 est sélectionnée, les données de R4 de la banque de registres n ° 0 seront déplacées vers l'accumulateur. Ici 2F est stocké à 04H. 04H représente l'adresse de R4 de la banque de registres # 0.

Le mouvement des données (2F) est mis en évidence en gras. 2F est transféré vers l'accumulateur à partir de l'emplacement de mémoire de données 0C H et est affiché en pointillés. 0CH est l'emplacement d'adresse du registre 4 (R4) de la banque de registres n ° 1. L'instruction ci-dessus fait 1 octet et nécessite 1 cycle pour une exécution complète. Cela signifie que vous pouvez économiser la mémoire du programme en utilisant le mode d'adressage direct du registre.

Enregistrer le mode d'adressage indirect

Dans ce mode d'adressage, l'adresse des données est stockée dans le registre comme opérande.

MOV A, @R0

Ici, la valeur à l'intérieur de R0 est considérée comme une adresse, qui contient les données à transférer vers l'accumulateur. Example: Si R0 a la valeur 20H et que les données 2FH sont stockées à l'adresse 20H, alors la valeur 2FH sera transférée à l'accumulateur après l'exécution de cette instruction. Reportez-vous à l'illustration suivante.

Donc, l'opcode pour MOV A, @R0est E6H. En supposant que la banque de registres # 0 est sélectionnée, le R0 de la banque de registres # 0 contient les données 20H. La commande de programme passe à 20H où elle localise les données 2FH et transfère 2FH à l'accumulateur. Il s'agit d'une instruction de 1 octet et le compteur de programme s'incrémente de 1 et passe à 0203 de la mémoire de programme.

Note- Seuls R0 et R1 sont autorisés à former une instruction d'adressage indirect de registre. En d'autres termes, le programmeur peut créer une instruction en utilisant @ R0 ou @ R1. Toutes les banques de registre sont autorisées.

Mode d'adressage indexé

Nous prendrons deux exemples pour comprendre le concept de mode d'adressage indexé. Jetez un œil aux instructions suivantes -

MOVC A, @A+DPTR

et

MOVC A, @A+PC

où DPTR est le pointeur de données et PC est le compteur de programme (les deux sont des registres 16 bits). Prenons le premier exemple.

MOVC A, @A+DPTR

L'opérande source est @ A + DPTR. Il contient les données source de cet emplacement. Ici, nous ajoutons le contenu de DPTR avec le contenu actuel de l'accumulateur. Cet ajout donnera une nouvelle adresse qui est l'adresse des données sources. Les données pointées par cette adresse sont ensuite transférées vers l'accumulateur.

L'opcode est 93H. DPTR a la valeur 01FE, où 01 est situé dans DPH (8 bits supérieurs) et FE est situé dans DPL (8 bits inférieurs). L'accumulateur a la valeur 02H. Ensuite, une addition de 16 bits est effectuée et 01FE H + 02H donne 0200 H. Les données à l'emplacement 0200H seront transférées vers l'accumulateur. La valeur précédente à l'intérieur de l'accumulateur (02H) sera remplacée par les nouvelles données de 0200H. Les nouvelles données de l'accumulateur sont mises en évidence dans l'illustration.

Il s'agit d'une instruction de 1 octet avec 2 cycles nécessaires pour l'exécution et le temps d'exécution requis pour cette instruction est élevé par rapport aux instructions précédentes (qui étaient toutes d'un cycle chacune).

L'autre exemple MOVC A, @A+PCfonctionne de la même manière que l'exemple ci-dessus. Au lieu d'ajouter DPTR avec l'accumulateur, ici les données à l'intérieur du compteur de programme (PC) sont ajoutées avec l'accumulateur pour obtenir l'adresse cible.