Leçon 2 - Modes d'adressage sur 6809 Examinons plus en détail le 6809 ... nos c
Leçon 2 - Modes d'adressage sur 6809 Examinons plus en détail le 6809 ... nos commandes doivent se charger de ou de sauvegarde à quelque part, et le 6809 nous offre un large éventail de choix de `` mode d'adressage '' à cet effet, essayons tous et apprenez-en davantage sur eux. Adressage inhérent L'adressage inhérent est des commandes qui ne prennent pas de paramètre, la «destination» de la commande est intégrée à la commande. Dans ce cas ... INCA utilisera toujours A comme source et destination voici le résultat Inscription adressage L'adressage de registre est l'endroit où nous spécifions un registre par son nom comme source ou destination La source et la destination sont des registres - nous avons copié A vers B! Adressage immédiat Nous avons déjà vu l'adressage immédiat , c'est là qu'une valeur fixe est spécifiée avec la commande avec un symbole #, et cette valeur est utilisée comme paramètre Voici le résultat Adressage direct de la page L'adressage de page directe est fondamentalement le même que l'adressage de page zéro ... mais grâce au registre DP, la page directe peut être à n'importe quelle adresse! Nous spécifions un seul octet (sans #) ... ceci est utilisé comme l'octet du bas d'une adresse - l'octet du haut est extrait du registre DP ... cette adresse contient le paramètre source de la commande Dans cet exemple, nous avons spécifié 80 $ et DP = 00 ... nous avons donc chargé à partir de l'adresse $ 0080 Adressage direct indirect des pages L'adressage de page direct indirect utilise également le DP - cependant les deux octets à l'adresse DP spécifiée sont utilisés comme adresse ... et le paramètre est chargé à partir de cette adresse! L'adresse DP à un octet est entre crochets L'adresse spécifiée est 81 $ dans l'exemple ... donc comme DP = 00 nous chargeons à partir de 0081 $ ... les deux octets ici sont 1213 $ ... cela devient l'adresse source de notre paramètre - à l'adresse $ 1213 est 42 $ - donc ceci est la valeur qui finit par être chargée dans A N'oubliez pas! Contrairement au 6502, le 6809 est BIG ENDIAN ... la valeur de 1234 $ sera Cela semble logique si vous êtes habitué au 68000 - mais ce sera un choc pour les utilisateurs Adressage direct étendu L'adressage direct étendu semble complexe, mais ce n'est pas le cas ... Si nous spécifions une adresse à un octet, nous chargeons à partir de la page directe, mais si nous étendons notre adresse à deux octets, nous spécifions l'adresse directe à partir de laquelle charger Dans ce cas, nous spécifions 2000 $ - donc le paramètre est lu à partir de l'adresse $ 2000 Adressage indirect étendu L'adressage indirect étendu est l'endroit où nous chargeons notre paramètre à partir de l'adresse à une adresse (spécifiée en 16 bits - une adresse complète) L'adresse DP à deux octets est entre crochets Dans cet exemple, nous avons spécifié [$ 2000] ... à cette adresse est $ 1A1B (Big Endian) ... donc le paramètre chargé dans A est lu à partir de $ 1A1B ($ CC) Adressage indexé L'adressage indexé utilise un registre plus un offset ... l'offset vient en premier, suivi d'une virgule, puis le registre L' offset peut être zéro - auquel cas nous pouvons l'omettre. Le décalage peut être positif ou négatif et le registre peut être X, Y, S ou U (pas D) Voici les résultats. Y indiquait 2000 $ (le 1A) ... U désignait 2002 $ (le 1C) Nous pouvons utiliser un symbole pour donner une étiquette à un offset numéroté. Sur le 6809 on peut même avoir un offset 16 bits ! Les deux fonctionnent très bien! Il existe plusieurs façons de spécifier un décalage zéro Voici les résultats En fait, le décalage n'a pas besoin d'être un nombre fixe - nous pouvons utiliser Cela a un nom différent cependant ... "Décalage de l'accumulateur à partir du re Compteur de programme relatif Nous pouvons spécifier une étiquette comme paramètre par offset en utilisant PCR comme paramètre, une étiquette comme offset, l'assembleur calculera l'offset pour nous. Les données ont été chargées dans Indirect avec décalage constant Plutôt que de lire un paramètre à partir d'un registre + offset, nous pouvons lire le paramètre à partir de l'adresse au registre d'adresse + offset ... Nous spécifions un offset et un registre entre crochets [] c'est indirect avec un adressage à décalage constant dans le premier exemple, nous avons chargé à partir de [$ 80, X] ... à l'adresse $ 0080 + 1 est 1213 $ - cela devient l'adresse source du paramètre ... à l'adresse $ 1213 vaut 42 $ dans le deuxième exemple que nous avons chargé à partir de [$ 2000, X] ... à l'adresse $ 2000 + 1 est $ 1B1C - cela devient l'adresse source du paramètre ... à l'adresse $ 1B1C est la valeur $ AB Décalage de l'accumulateur par rapport au registre de base Plutôt qu'un décalage fixe, nous pouvons utiliser un accumulateur ( A , B ou D) comme décalage d'un registre d'index (X, Y, S, U), ce qui est connu sous le nom de décalage d'accumulateur à partir du registre de base dans cet exemple Le paramètre sera chargé à partir de l'adresse en A + X ou B + X Voici les résultats Décalage indirect de l'accumulateur par rapport au registre de base Plutôt que d'utiliser l'adresse Accumulator + Base comme adresse du paramètre ... nous pouvons indirectement utiliser l'adresse à cette adresse comme source. Pour Y X = 0080 $ et A = 1 ... donc nous regardons l'adresse $ 0080 - à cette adresse est 1213 $ ... donc cela devient l'adresse source du paramètre - à l'adresse 1213 $ vaut 4243 $ Pour D X = 0080 $ et A = 2 ... donc nous regardons l'adresse $ 0080 - à cette adresse est 1314 $ ... donc cela devient l'adresse source du paramètre - à l'adresse $ 1314 vaut 3334 $ Post incrémentation et pré-décrémentation AutoIncrement lira à partir de l'adresse dans un registre, et ajoutera 1 ou 2 au registre APRÈS la lecture. On met juste un + ou ++ à la fin du registre - le registre peut être X, Y, S ou U Voici les résultats AutoDecrement va diminuer le registre AVANT la lecture de 1 ou 2 On vient de mettre un - ou - à la fin du registre - le registre peut être X, Y, S ou U Voici les résultats Post-incrémentation indirecte et pré-décrémentation Tout comme avec Post Increment, nous pouvons changer le registre d'index - mais nous pouvons l'utiliser indirectement, et l'adresse à l'adresse vers laquelle pointe le registre devient l'adresse du paramètre Nous mettons juste un + - ou + + à la fin du registre pour un Inc de 1 ou 2 ... nous utilisons des crochets [] pour désigner l'indirection - le registre peut être X, Y, S ou U Voici les résultats ... Les registres X et Y sont incrémentés ... et l'adresse dans ces registres est utilisée pour générer une adresse qui est la source du paramètre On peut aussi utiliser l'indirection avec Pre- Decrement, et l'adresse à l'adresse vers laquelle pointe le registre devient l'adresse du paramètre On vient de mettre un - ou - au début du registre pour un Dec de 1 ou 2 ... nous utilisons des crochets [] pour désigner l'indirection - le registre peut être X, Y, S ou U Voici les résultats ... Les registres X et Y sont incrémentés .. et l'adresse dans ces registres est utilisée pour générer une adresse qui est la source du paramètre Adressage relatif du programme Les commandes de branche utilisent un «décalage relatif» par rapport à la destination, représenté dans le code d'octet sous la forme d'un nombre positif ou négatif. Ceci est calculé automatiquement par l'assembleur ... BRA utilise un décalage d'un octet, donc ne peut sauter que sur de courtes distances ... LBRA (Long Branch) peut sauter de longues distances Voici les résultats! Charger l'adresse effective Toutes les commandes ci-dessus calculeront une adresse et utiliseront le paramètre à cette adresse. Cependant, il peut y avoir des moments où nous voulons calculer l'adresse, mais enregistrez-la pour plus tard ... Load Effective Address le fait pour nous! C'est un «gain de temps» pratique si nous devons utiliser une adresse calculée plusieurs fois - il est plus rapide de stocker l'adresse dans un registre, puis d'utiliser cette adresse pré-calculée pour les commandes futures. Dans le premier exemple , nous avons utilisé un décalage de 100 $ à partir de Y. Comme Y = 2000 $, le résultat chargé dans U est 2100 $ Dans le deuxième exemple , nous avons pré-décrémenté Y de 2. Comme Y était de 2000 $, Y est descendu à 1FFE $, et cette valeur est chargée int X Dans le troisième exemple , nous avons chargé l'adresse indirecte à 0080 $ ... à l'adresse $ uploads/Industriel/ modes-d-x27-adressage-6809 1 .pdf
Documents similaires
-
19
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Jan 19, 2022
- Catégorie Industry / Industr...
- Langue French
- Taille du fichier 0.5621MB