0% ont trouvé ce document utile (0 vote)
127 vues13 pages

Mode D Adressage

Transféré par

Amine Malih
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
127 vues13 pages

Mode D Adressage

Transféré par

Amine Malih
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF ou lisez en ligne sur Scribd
4.2. LES DIFFERENTS MODES D’ADRESSAGE DU 68¢9 Tout d’abord qu’appelle-t-on mode d’adressage ? Nous avons vu au début de ce chapitre (paragraphe 1) un exemple (addition de deux nombres) ou nous disions que pour connaitre un nombre x, il fallait spécifier son adresse sur 16 bits (ou deux octets). Le fait de définir x par la donnée de son adresse constitue un mode d’adressage : nous appellerons ce mode ” adressage étendu” (car on peut accéder directement, grace 4 lui, a la totalité de l'espace adressable du 6809). Donc, par definition, un mode d’adressage est un moyen d’accé- der 4 une case-mémoire donnée. 4.2.1. L'adrossage implicite L’adressage implicite n’est pas en réalité un véritable mode d’adres- sage. En effet aucune adresse n’est nécessaire pour définir les instruc- tions correspondant 4 ce mode. Le code-opération de ces instructions tient, comme c’est toujours le cas du 6869, sur un ou deux octets. On peut mentionner parmi elles les instructions portant directement sur le contenu de registres internes (instructions de décalage par exemple), les instructions de retour de sous-programme ou d’interruption, les interrup- tions logicielles, les instructions d’échange ou de transfert de registre interne, les opérations sur la pile. Notons que ces deux derniéres sortes d’instructions nécessitent deux octets, l'un pour le code-opération proprement dit, l’autre pour sélectionner les registres concernés (registres destination et source pour les instructions de transfert de registre et registres & sauvegarder ou charger dans le cas d’instructions portant sur la pile). Ce dernier octet se nomme ™ post-octet”’. Nous reviendrons sur ce point dans le chapitre traitant du jeu d’instructions du 6809. Exemples : ASLA. RTI SWI TFR A,B EXG U, S PSHS A, B, X 44 4.2.2. L’'adressage immédiat Dans ce mode d’adressage les instructions comportent deux parties : — le code-opération proprement dit qui est, comme d’habitude, codé sur un ou deux octets, — Vopérande qui comprend, selon le cas, un ou deux octets selon que l’instruction considérée porte sur des mots de 8 bits ou de 16 bits. Cette opérande correspond tout simplement 4 la donnée sur laquelle porte l’instruction considérée. Exemple 1: Soit a additionner la valeur $05 au contenu de Paccumulateur A. Liinstruction sera la suivante: ADDA # $85 Le symbole ” #” précise a l’assembleur que !’on est dans le cas d’un adressage immédiat. Exemple 2: Soit a comparer le contenu du registre S avec la valeur 16 bits $12F3. L’instruction sera la suivante CMPS # $12F3 4.2.3. L’adressage étendu Ce mode d’adressage a déja été rencontre dans ce chapitre. L’opérande est ici une adresse de 16 bits (donc 4 chiffres hexadécimaux). La donnée située a cette adresse (et parfois 4 la suivante dans le cas d’instructions portant sur des mots de 16 bits) est utilisée par l’instruc- tion considérée. Exemple 1: Soit 4 additionner le contenu de la case-mémoire d’adresse $53F8 4 laccumulateur B. instruction s’écrit : ADDB $53F8 45 Grace a cet adressage on peut (nous l’avons déja dit) acceder a la totalité de l’espace-mémoire du 6809. Exemple2: Soit a charger le registreS avec le contenu des cases- mémoire d’adresses $53F8 et $53F9. On écrira: LDS $53F8 4.2.4. L'adressage direct Ce mode d’adressage est similaire 4 l’adressage étendu sauf qu’ici & Vopérande tient sur un seul octet. Elle permet done d’adresser un espace- mémoire de 256 octets. Dans beaucoup de microprocesseurs (et notam- ment dans le cas du 6562) cet espace est situé en page-zéro qui est la premiére page de 256 octets adressable par un microprocesseur (adresses £4 © comprises entre 0 et 255). Dans le 6809 il existe un registre spécial DP © (registre de page directe : ” direct-page register”) qui permet de spécifier >» quelle page est utilisée dans ce mode d’adressage. Cela permet donc . od ‘adresser les_64 K octets du 6809 tout en garantissant une rapidité A fy execution du code due au fait que l’opérande n’est plus codée que sur on WOU Sete |e gckchsadpatallis tele micre 5156 228 cet ek pan Spay * SS 256% PAM | dans le rine or Le contenu du registre DP fixe done l’octet de poids fort def Vadresse 16 bits tandis que l’opérande de l’instruction considérée en fournit octet de poids faible. ah tia hex Exemple: Soit a charger 'accumulateur D avec le contenu des cases- mémoire d’adresses $12 et $13. Remnorques pour frxen DP a uns age dans Yrespord & fo page $ On écrira: b LDD <$12_—— avec: DP = Sag A For TER om ra 8) dons le tear bp Le symbole ”<” est destiné 4 renseigner l’assembleur qu’il est en présence d’un mode d’adressage direct Notons qu’aprés une mise sous tension du 6809 le contenu du registre DP est toujours a zéro. Si donc l'utilisateur ne désire s’intéresser qu’a la page zéro, il lui suffira de ne pas s’occuper de ce registre. 46 4.2.5. L'adressage relatif L’adressage relatif est utilisé uniquement pour les instructions de branchement conditionnel (le branchement n’a lieu que si la condition désirée est réalisée). Ces instructions sont l’€quivalent du IF...THEN en BASIC. Afin de bien saisir le fonctionnement de ce mode d’adressage, le mieux est de donner un exemple. Soit le petit programme suivant: ADDA $53F8 BEQ FIN FIN SWI On effectue I’addition du contenu de la case-mémoire d’adresse $53F8 avec l’accumulateur. L’instruction BEQ veut dire ” branchement si égalité”. Ici il y a donc bhranchement vers FIN si le contenu de l'accumulateur aprés addition est egal a zéro. Le bit Z du registre de condition est alors égal a 1. Sinon, le programme continue et exécute les instructions présentes aprés le BEQ. Supposons que le début du programme (instruction ADDA) soit placé a I’adresse $0200. Nous donnons ci-dessous le contenu de la mémoire a partir de cette adresse ; j 4 so20s. =| ADC ADC . $0201 $F8 SFB nea |_| . $202 $53 $53 eplantasiom $6283 BEQ | BEQ | yo - . i se2n4 FIN = $18 te Z dial en “ | sas | SWI Swi - 4 Nous n’avons pas introduit les codes-opérations des instructions ADDA, BEQ et SWI afin que le programme soit plus explicite. 47 L’étiquette FIN est située a l’adresse $9215. Lors d’un branchement relatif on charge l’octet suivant l’instruction de branchement par la différence (en binaire) qui existe entre la valeur de ladresse_d’arrivée (ici $0215) et la valeur du registre PC pointant sur Vir instruction qui suit immédiatement, Je BEQ, donc ici $0205. Nous char- gerons sven gel sui aun meémoire d’adresse $0204 par la valeur hexadécimale: $6215 — $6205 = $16 re ed qualte TRIN 0 “ Le contenu de la case-mémoire d’adresse $0204 aurait trés bien pu étre négatif (avec la notation en complément a 2) si le branchement avait dai étre effectué vers l’arriére. Par exemple, pour un branchement en $020, le contenu de la case- mémoire d’adresse $6204 aurait été: $0200 — $6265 = $-05 = $FB Nous venons d’envisager des branchements relatifs courts pour lesquels d’une part le code-opération est codé sur un octet et d’autre part le déplacement possible est codé sur un octet également ce qui autorise des déplacements compris entre 127 (branchement relatif vers l’avant) et —128 (branchement relatif vers l’arriére). Il existe également dans le 6869 des instructions de branchement relatif longs. Dans ce cas, le code opération cst codé sur deux octets ct la valeur du déplacement également ce qui permet d’accéder a la totalité de Vespace adressable du 6809. Naturellement lutilisation de ce type d’instructions se fait au détri- ment de la rapidité d’exécution du code assembleur 6809. La syntaxe assembleur relative au mode d’adressage relatif est la suivante: a) Si on utilise unc étiquette: BEQ FIN (cas d’un branchement court) LBEQ FIN (cas d’un branchement long) 48 b) Si le déplacement est connu on peut écrire: BEQ ++ (cas d‘un branchement court) LBEQ ++$12F6 (cas d’un branchement long) La valeur du déplacement ne dépend absolument pas de I’adresse d'implantation en mémoire du programme. L’adressage Telatif permet donc d’avoir des programmes translatables (qui fonctionnent a n’importe quelle adresse-mémoire), ceci 4 condition que les branchements soient tous relatifs a l'intérieur du programme. En particulier il ne doit pas y avoir de sauts inconditionnels ni d’appels de sous-programmes internes. Notons que nous verrons un peu plus loin un mode d’adressage trés utile pour écrire des programmes relogeables et qui est I’adressage relatif au PC. 4.2.6. Les modes d’adressage indexés Ces modes d’adressages font du 6899 un microprocesseur extréme- ment puissant. Ils peuvent se décomposer en quatre grands groupes qui chacun se divisent en sous-groupes: — les modes d’adressage indexés a déplacement constant, — les modes d’adressage indexés par accumulateur, — les modes d’adressage auto-incrémentés et auto-décrémentés, — Ics modes d’adressage relatifs au comptcur ordinal (PC). Nous allons examiner chacun de ces grands groupes a son tour mais nous allons tout d’abord décrire les caractéristiques communes a tous les modes d’adressages indexés. Le code-opération des instructions possédant ce mode d’adressage est, comme toujours, codé sur un ou deux octets. Tout comme dans le cas des instructions de transfert de registre les modes d’adressage indexés nécessitent un post-octet destiné a renseigner le 6899 sur le type exact d’adressage a utiliser. Nous donnerons 4 la fin de ce paragraphe un tableau regroupant les différents modes d’adressage indexés ainsi que les post-octets correspondants. 49 a) Les modes a déplacement constant Dans ce type de mode d’adressage, I’adresse de la donnée consi- dérée est obtenue en ajoutant le contenu d’un registre interne du 6809 a un déplacement fixe. Ce déplacement peut étre: [ * nul et dans ce cas l'adresse de la donnée considérée correspond au contenu du registre spécifié dans l’opérande. L’instruction proprement dite comprend donc le code-opération plus le post-octet qui contient un code de deux bits permettant de connaitre le registre par rapport auquel se fait l’indexation (X, Y, U ou S). Exemple: LDA ,X (* Codé sur 5 bits et dans ce cas l’adresse de la donnée considérée corres- | pond au contenu du registre spécifié dans l’opérande additionné au deéplacement compris entre —16 et +15 spécifié dans lopérande. Liinstruction proprement dite comprend donc le code-opération plus le post-octet qui contient d’une part le code de deux bits dont nous avons parlé ci-dessus, d’autre part le déplacement codé sur 5 bits. Exemple: LDA 12;X “+ codé sur 8 bits ct dans ce cas l’adresse de la donnée considérée est | obtenue en faisant la somme du contenu du registre d'index et du déplacement codé sur 8 bits. Dans ce cas l’instruction proprement dite comporte le code-opération, le post-octet comportant le code de 2 bits dont nous avons parlé ci-dessus et un octet donnant le déplacement sur 8 bits. Exemple: Lafec a dc LDA’ 182, x En notation en complément a deux le déplacement est compris entre —128 et 127. 50 * codé sur 16 bits. Le fonctionnement de ce mode d’adressage est simi- laire au précédent sauf qu’ici le déplacement proprement dit nécessite 16 bits donc 2 octets. Exemple : LDA $12F5,X En notation avec complément a deux le déplacement est compris entre —32768 et 32767. b) Les modes indexés par accumulateur Dans ce cas le contenu des accumulateurs A, B ou D sert comme déplacement. L’adresse de la donnée considérée est donc obtenue en ajoutant le contenn de Pun de ces accumulateurs avec le contenu du registre d’index spécifié. Comme dans les modes a déplacement constant, le post-octet contient un code de 2 bits permettant de sélectionner le registre d’index considéré. Si l'accumulateur est A ou B, le champ adressable par variation du contenu de ces registres sera une page de 256 octets. Par contre si l'accumulateur est D on pourra accéder la totalite de l’espace adres- sable du 6809. Exemple: LDA A,X LDD DU c) Les modes auto-incrémentés et auto-décrémentés Ces modes d’adressage sont extrémement utiles pour I’écriture de boucles. Le registre concerné contient l’adresse de l’opérande. En mode auto-incrémenté ce registre pointe sur une donnée et effectue le traite- ment demande par l’instruction considérée. Il est ensuite incrémenté automatiquement de une ou deux unités ce qui lui permet de pointer 4 Vadresse de la donnée suivante. 51 L’adressage auto-incrémenté d’une unité est utilisé lorsque l’on veut accéder par exemple 4 des tables d’octets. Au contraire, l’adressage auto- incrémenté de deux unités est utilisé lorsque l’on veut accéder a des tables de mots de 16 bits. Dans le cas de I’adressage auto-décrémenté, le contenu du registre es 7 décrémenté de une ou deux unités suivant le cas. Il contient ensuite l’adresse de la donnée désirée. Dans tous ces modes le post-octet contient le code de deux bits carac- téristique du registre d’index utilisé. Exemple: STX 6,U+ (adressage auto-incrémenté de une unité) STIX 6,U++ (adressage auto-incrémenté de deux unites) LDD ,-Y (adressage auto-décrémenté de une unite) LDD ,—-Y (adressage auto-décrémenté de deux unités) d) Les modes d’adressage relatifs au compteur ordinal (PC) Ces modes d’adressage fonctionnent exactement comme les modes a déplacement constant sur 8 ou 16 bits sauf que le registre d’index est ici tout simplement le compteur ordinal. Ceci a comme principal avan- lage de permetire l'écriture de programmes fonctionnant a n‘importe quelle adresse mémoire et ceci sans modification. L’adresse de l’opérande est obtenue en faisant la somme du dépla- cement sur 8 ou 16 bits contenu dans l’opérande et le contenu du registre PC. Exemple: LDA 26,PCR (déplacement sur 8 bits) LDA 23F4,PCR (déplacement sur 16 bits) Le tableau suivant résume les différents modes d’adressage indexés disponibles sur le 6809. 52 T T ] | Type Forme Syntaxe Past ontet | déplacement constant Obits 1RROO100 déplacement constant 5 bits ORRnnnnn déplacement constant 8 bits 1RRO10006 déplacement constant 16 bits 1RRO1001 déplacement accumulateur_ A 1RROG110 déplacement accumulateur B | 1RROO101 deplacement accumulateur 1RRO1011 auto-incrémenté part | 1RROGIGD auto-incrementé par 2 | 1RROGOO1 auto-décrémenté par | 1RROOO10 auto-décrémenté par2 1RROOO11 relatif au PC 8 bits | 1xx91100 relatif au PC 16 bits | 1901101 Dans ce tableau, *nnnnn” représente une valeur binaire codée sur 5 bits et “xx” signifie “n’importe quelle valeur”. Le code "RR” est le code de deux bits dont nous avons parlé précédemment et chargé de spécifier le registre d’'index utilisé. Ainsi si: RR = OH le registre d’index est X RR = 01 le registre d’index est Y RR = 1 le registre d’index est U RR — 11 le registre d’index est S ‘ 4.2.7. Les modes d’adressage indirect / Le 6899 posséde de trés nombreux modes d’adressage indirects qui sont dérivés des modes d’adressage indexés décrits précédemment. Mais tout d’abord voyons ce que I’on appelle par ” adressage indi- rect”. Au lieu que l’adresse spécifiée dans l’opérande donne la donnée sur laquelle porte l’instruction, elle en donne |’adresse. L’adresse effec- tive de la donnée est donc contenue dans la case-mémoire spécifi¢e par l'opérande ainsi que dans la suivante puisqu’il faut deux octets mémoire pour spécifier une adresse. 53 Nous verrons un exemple un peu plus loin. Nous avons donc dit que les modes d’adressage indirects sont déri- vés des modes d’adressage indexés. Nous allons donc les passer en revue. a) Les modes indirects indexés 4 déplacement constant Tout comme il existait des modes d’adressage indexés a déplace- ment constant il existe des modes d’adressage indirect indexés a déplace- ment constant. Dans ce éas le contenu du registre spécifié ajouté au déplacement (sur 8 bits ou 16 bits uniquement) donne |’adresse de I’adresse de la donnée concernée. Exemple : LDA (125,X) Les parenthéses indiquent a l’assembleur qu’il est en présence d’un mode d’adressage indirect. b) Les modes indexés par accumulateur Ici le contenu du registre spécifié additionné au contenu de Vaccumulateur concerné donne l"adresse de l'adresse de la donnée. Exemple: LDX {A,S) c) Les modes indirects auto-incrémentés et auto-décrémentés Seuls les modes incrémentés et décrémentés de deux unités sont autorisés. Cela se congoit aisément puisqu’il faut 2 octets mémoire pour définir une adresse. A chaque exécution d’une instruction, le contenu du registre spéci- fié est incrémenté (ou décrémenté) de deux unités de maniére a aller poin- ter sur I'adresse de lI’adresse suivante. Exemple: LDA (,S++) 54 d) Les modes indirects relatif au PC Le contenu du compteur ordinal, ajouté 4 un déplacement constant, donne l’adresse de l’adresse de la donnée nécessaire a l’instruction. Exemple : ROL (128, PCR) e) L’adressage étendu indirect Ce mode est le seul qui ne soit pas dérivé d’un mode indexé. Tout comme il existe un mode d’adressage étendu, il existe un mode d’adressage étendu indirect. Le nombre spécifié entre crochets donne Vadresse de l’adresse de la donnée concernée. Exemple: Soit Vinstruction : IMP. ($53F8) Le microprocesseur, lorsqu’il rencontre l’instruction JMP de saut inconditionnel, se branche a l’adresse $53F8 et charge son compteur ordinal PC avec les contenus des: cases-mémoire d’adresses $53F8 et $53F9 (l’octet de poids faible du PC est stocké dans la premiére adresse : $53F8). Il y a donc branchement 4 I’adresse $AC26. uMP | SFB $53 $53F8 $20 $53F9 SAC a - SAC20 55 Nous allons maintenant donner un tableau regroupant les différents modes d’adressage indirects disponibles sur le 6809. f Type Forme Syntaxe ret déplacement constant Obits (GR) 1RR10100 déplacement constant 8 bits (n.R) 1RR11000 déplacement constant 16 bits (n,R) 1RR11001 déplacement accumulateur | A | (AR) 1RR10110 déplacement accumulateur | 8 (B,R) 1RR10101 déplacement accumulateur | D (D.R) 1RR11011 auto-incrémenté par 2 (R++) 1RR10001 auto-incrémenté par2 (--R) 1RR10011 relatif au PC 8 bite | (n,PCR) 19111199 relatif au PC 16 bits (n,PCR) 1xx11101 étendu indirect (n) 10011111 56

Vous aimerez peut-être aussi