Vous êtes sur la page 1sur 8

Espace mmoire

Espace adressable L'espace mmoire adressable du 80c196 fait 64k octets. Cependant, ces adresses ne sont pas toutes disponibles pour l'utilisation 0000H 00FFH et 1FFEH 207FH sont affectes des fonctions spciales. Toutes les autres cases mmoire peuvent tre utilises pour du code, des donnes ou des entres-sorties par projection mmoire.

FFFFH +---------------------------+ | | | Mmoire ou E/S externes | | | 4000H +---------------------------+ | ROM/EPROM interne ou | | mmoire ou E/S externes | 2080H +---------------------------+ | Reserv | 2040H +---------------------------+ | 8 vecteurs d'interruption | 2030H +---------------------------+ | cl de scurit ROM/EPROM | 2020H +---------------------------+ | Reserv | 2019H +---------------------------+ | Octet de configuration | 2018H +---------------------------+ | Reserv | 2014H +---------------------------+ | 10 vecteurs d'interruption| 2000H +---------------------------+ | Port 3 et port 4 | 1FFEH +---------------------------+ | Mmoire ou E/S externes | 0200H +---------------------------+ | RAM interne 80c196KC | 0100H +---------------------------+ | Registres et SFRs | 0000H +---------------------------+ Espace adressable du 80c196

Registres (RAM interne) Les adresses 00H OFFH correspondent aux 232 registres gnraux et aux 24 registres spciaux (SFRs). L'unit de registres arithmtique et logique peut travailler directement avec n'importe lequel de ces 256 registres internes, mais il est impossible d'excuter du code depuis cette mmoire. Si l'on essaie d'excuter du code une adresse situe entre 00H et OFFH, les instructions correspondantes seront cherches en mmoireexterne. Cette zone est traditionnellement utilise par les systmes de dveloppement Intel. Les adresses 018H OFFH correspondent aux registres gnraux. Ces registres sont utiliss comme des registres 8 bits, 16 bits ou 32 bits et peuvent tre considrs comme 232 accumulateurs. Les adresses 018H et O19H contiennent le pointeur de pile. Lors de l'criture d'une donne dans la pile (PUSH), le pointeur de pile est pr-dcrment, ce qui impose de l'initialiser lors du dmarrage d'un programme 2 octets au-dessus de la plus grande des adresses alloues la pile. Le pointeur de pile pointe obligatoirement sur une adresse de mot (i.e. paire). Registres spciaux. (SFRs) Les adresses 00H O17H correspondent aux registres de contrle des entressorties ou registres spciaux. Tous les lments priphriques du 80c196 sont contrls travers ces registres. Les fonctions des registres spciaux sont contrles travers trois fentres. La commutation d'une fentre l'autre est effectue par le registre spcial WSR (Window Shift Register) situ l'adresse 014H. Ce cours ne traite que la fentreWSR = 0. Certains des registres spciaux ont une fonction diffrente suivant qu'ils sont accds en lecture ou en criture. Zones rserves Les adresses 1FFEH et O1FFFH sont utilises respectivement par les ports 3 et 4. De nombreuses cases spciales ou rserves se trouvent entre les adresses 2000H et 2080H. Ainsi les 18 vecteurs d'interruption, l'octet de configuration et la cl de scurit. Toutes les cases signales comme tant rserves, situes dans cette zone doivent tre programmes avec la valeur 0FFH. L'adresse normale de dmarrage pour un programme est 2080H. L'interruption de redmarrage reset redmarre l'excution du programme l'adresse 2080H.

Oprandes
Le 80c196 peut travailler avec diffrents types de donnes :

des octets (8 bits) des mots (16 bits). Les mots doivent tre aligns sur une adresse paire. Le 80c196 est une machine little endian, ce qui signifie qu'il stocke l'octet de poids faible l'adresse paire du mot concern, et l'octet de poids forts l'adresse impaire. des doubles-mots (32 bits). Les double-mots sont utiliss uniquement par des instructions de dcalage, comme dividende d'une division ou comme rsultat d'une multiplication. Pour ces oprations, le double mot concern doit obligatoirement se trouver dans la zone des registres (adresses 00H 100H), et tre align sur une adresse multiple de 8.

Modes d'adressage Le 80c196 accde aux oprandes situs dans la limite de son espace adressable en utilisant l'un de ses 6 modes d'adressage. Certains dtails de fonctionnement de ces modes d'adressage sont cachs par le langage assembleur. Tout au long de ce chapitre, les oprations dcrites sont illustres de courts extraits de code. Tous ces extraits supposent la dfinition pralable des symboles suivants : AX, BX, CX, DX sont des registres 16 bits AL, AH reprsentent respectivement les poids faibles et les poids forts de AX BL, BH reprsentent respectivement les poids faibles et les poids forts de BX CL, CH reprsentent respectivement les poids faibles et les poids forts de CX DL, DH reprsentent respectivement les poids faibles et les poids forts de DX Ces dnominations sont les mmes que celles des registres gnraux du 8086. Il est important de remarquer que dans le cas du 80c196 ces registres ne sont pas des registres ddis, mais des symboles affects par le programmeur quatre mots pris parmis les 232 registres gnraux. Adressage direct Le mode d'adressage direct est utilis pour accder directement un registre, dont l'adresse est indique par un champ de 8 bits dans le corps de l'instruction. Cette adresse doit tre conforme aux directives d'alignement pour le type de donne concern.

Exemples ADD INCB

AX,BX,CX ; (AX)16 <-- (BX)16 + (CX)16 CL ; (CL)8 <-- (CL)8 + 1

Remarque importante : Une instruction ne peut contenir qu'une seule rfrence un oprande qui ne soit pas en mode d'adressage direct. Tous les autres oprandes devront tre en adressage direct. Adressage indirect Le mode d'adressage indirect est utilis pour accder un oprande dont l'adresse est contenue dans un registre 16 bits. Cette adresse peut pointer n'importe o dans l'espace adressable, mais doit tre conforme auxdirectives d'alignement. L'adresse du registre concern est indique par un champ de 8 bits dans le corps de l'instruction. Exemples LD ADDB POP

BX,[AX] AL,BL,[CX] [AX]

; (BX)16 <-- ((AX)16)16 ; (AL)8 <-- (BL)8 + ((CX)16)8 ; ((AX)16)16 <-- ((SP)16)16 ; (SP)16 <-- (SP)16 + 2

Adressage indirect avec post-increment Ce mode d'adressage est le mme que le mode indirect, sauf que le contenu du registre concern est automatiquement incrment aprs avoir servi trouver l'oprande. Si l'oprande est un octet, alors l'adresse sera incrmente de 1, s'il s'agit d'un mot l'adresse sera incrmente de 2. Exemples LD ADDB PUSH

AX,[BX]+ ; (AX)16 <-- ((BX)16)16 ; (BX)16 <-- (BX)16 + 2 AL,BL,[CX]+ ; (AL)8 <-- (BL)8 + ((CX)16)8 ; (CX)16 <-- (CX)16 + 2 [AX]+ ; (SP)16 <-- (SP)16 - 2 ; ((SP)16)16 <-- ((AX)16)16 ; (AX)16 <-- (AX)16 + 2

Adressage immdiat Ce mode d'adressage autorise un oprande tre spcifi directement dans le corps de l'instruction. Si l'oprande est un octet alors ce champ fera 8 bits, s'il s'agit d'un mot ce champ fera 16 bits. Exemples ADD PUSH

AX,#340 #1234H

; (AX)16 <-- (AX)16 + 340 ; (SP)16 <-- (SP)16 - 2

DIVB

AX,#10

; ((SP)16)16 <-- 1234H ; (AL)8 <-- (AX)16 / 10 ; (AH)8 <-- (AX)16 % 10

Adressage index court Dans ce mode un champ de 8 bits dans le corps de l'instruction dsigne un registre (16 bits) contenant une adresse. Un second champ de 8 bits (dplacement) est converti en 16 bits (extension de signe), et algbriquement additionn au contenu du registre d'index pour former l'adresse de l'oprande. Etant donn que le dplacement est algbrique, l'oprande peut se trouver n'importe o entre -128 et +127 octets relativement l'adresse contenue dans le registre d'index. Exemples LD AX,12[BX] MULB AX,BL,3[CX] Adresage index long

; (AX)16 <-- ((BX)16 + 12)16 ; (AX)16 <-- (BL)8 * ((CX)16 + 3)8

Ce mode s'apparente au mode index court, sauf que le dplacement est cette fois-ci spcifi sur 16 bits. L'opration d'extension de signe est dans ce cas, bien entendu inutile. Exemples AND ST ADDB

AX,BX,TABLE[CX] ; (AX)16 <-- (BX)16 . (TABLE16 + (CX)16)16 AX,TABLE[BX] ; (AX)16 <-- (TABLE16 + (BX)16)16 <-- (AX)16 AL,BL,TABLE[CX] ; (AL)8 <-- (BL)8 + (TABLE16 + (CX)16)8

Les six modes de base dcrits ci-dessus peuvent tre combins avec l'utilisation de registres spcifiques tels le pointeur de pile ou le registre ZERO, pour raliser d'autres oprations d'adressage fort utiles. Adressage direct en mmoire Ce mode est obtenu en indexant le registre spcial ZERO, situ l'adresse 0 et qui contient toujours 0. En plus du fait de fournir la constante 0 qui peut tre utilise lors de calculs ou de comparaisons, ce registre peut tre utilis comme registre d'index avec un dplacement long. La combinaison du mode index long avec le registre ZERO permet d'accder directement n'importe quelle case de l'espace adressable. Exemples ADD POP Accs la pile

AX,1234[0] 5678[0]

; (AX)16 <-- (AX)16 + (1234)16 ; (5678)16 <-- ((SP)16)16 ; (SP)16 <-- (SP)16 + 2

Le pointeur de pile se trouve l'adresse 18H, parmi les registres spciaux. Le fait que le pointeur de pile soit accessible comme n'importe quel autre registre, non seulement facilite les oprations sur le pointeur de pile lui-mme, mais aussi les oprations sur les donnes contenues dans la pile. On peut par exemple accder au sommet de la pile en adressage indirect, en faisant rfrence au pointeur de pile. Il est galement possible d'accder aux donnes empiles en adressage index court, en utilisant le pointeur de pile comme registre d'index. Exemples LD PUSH

AX,[SP]

LD

; copy top of stack into AX ; (AX)16 <-- ((SP)16)16 [SP] ; duplicate top of stack ; (SP)16 <-- (SP)16 - 2 ; ((SP)16)16 <-- ((SP)16 + 2)16 <-BX,2[SP] ; copy next to last data on stack into BX ; (BX)16 <-- ((SP)16 + 2)16

Certains dtails de ces modes d'adressage sont cachs par le langage assembleur qui automatise et simplifie sous divers aspects le choix du mode d'adressage le plus appropri : L'assembleur choisit automatiquement entre l'adressage direct et l'adressage index long avec le registre ZERO en fonction de l'adresse de l'oprande. Le programmeur peut simplement utiliser le nom symbolique de l'oprande sans se proccuper de sa localisation en mmoire. Si l'oprande se trouve parmi les 256 registres internes, alors l'instruction gnre comportera une rfrence en mode direct, si l'oprande se trouve ailleurs alors l'instruction gnre comportera une rfrence en mode index long.

L'assembleur choisit automatiquement entre l'adressage index court ou l'adressage index long en fonction de la valeur du dplacement. Si le dplacement tient sur 8 bits alors l'adressage index court sera utilis, sinon l'instruction gnre comportera une rfrence en adressage index long. 2.3 Registre des indicateurs Le registre des indicateurs PSW (Program Status Word) est constitu d'un ensemble d'indicateurs boolens concernant l'tat du programme. Les huit bits de statut qui forment l'octet de poids fort du registre PSW ne peuvent tre accds directement car le PSW n'est pas vu parmi les SFRs. Le seul moyen d'y accder (en fentre 0), est indirect et consiste les empiler l'aide de l'instruction PUSHF, puis dpiler vers un registre. Les huit indicateurs sont :

Indicateurs Z : Zro. L'indicateur Zro est mis 1 lorsqu'une opration a eu un rsultat nul. Lors d'une instruction d'addition avec retenue (ADDC) ou de soustraction avec retenue soustractive (SUBB), l'indicateur Z est ventuellement mis 0 mais jamais 1. Ces instructions sont habituellement utilises en conjonction avec les instructions ADD et SUB dans le cadre d'oprations en prcision multiple. La gestion de l'indicateur Z telle qu'elle est dcrite ci-dessus, dans le cadre d'une opration en prcision multiple, lui confre une signification correcte pour l'opration prise dans sa globalit. N : Ngatif. Cet indicateur est positionn pour indiquer qu'une opration a donn un rsultat ngatif (cf. code complment 2). Cet indicateur sera correct et pourra tre utilis mme en cas de dpassement. Pour les oprations de dcalage, l'indicateur N reproduit l'tat du bit de poids fort du rsultat. Ceci est vrai mme si le nombre de dcalages est nul. V : oVerflow. L'indicateur de dpassement est utilis pour indiquer qu'une opration a conduit un rsultat qui n'est pas dans l'intervalle autoris pour le type de donne considr. Pour les oprations de dcalage gauche, cet indicateur sera mis 1 si le bit de poids fort change n'importe quelle tape au cours du dcalage. VT : oVerflow Trap. Cet indicateur est mis 1 comme V, mais uniquement remis 0 par l'une des instructions CLRVT, JVT ou JNVT. Ce fonctionnement permet de vrifier si un dpassement a eu lieu aprs toute une squence d'oprations arithmtiques ce qui est gnralement plus efficace que d'tre oblig de vrifier aprs chacune des instructions. C : Carry. L'indicateur de retenue reflte l'tat du bit de poids fort de l'unit arithmtique et logique lors d'oprations arithmtiques, ou l'tat du bit dcal hors de l'oprande lors d'oprations de dcalage. La valeur de la retenue soustractive (borrow) obtenue aprs une soustraction peut tre obtenue en complmentant la valeur de l'indicateur C (i.e. il y a eu "emprunt" d'un bit si l'indicateur C est zro).

X : Reserv. Doit toujours tre mis 0 par une opration d'criture dans PSW (cf. instruction POPF). I : Interrupt. La mise 0 de cet indicateur interdit globalement l'ensemble des interruptions sauf NMI. ST : STicky bit. Cet indicateur mis 1 lors d'une opration de dcalage pour signifier qu'un bit 1 a d'abord t dcal dans C, puis dcal hors de cet indicateur. L'tat de ST est indfini aprs une multiplication. Cet indicateur peut tre utilis de pair avec l'indicateur C pour valuer de manire fine l'arrondi aprs une opration de dcalage. Soit par exemple multiplier deux grandeurs de 8 bits, puis arrondir 12 bits le rsultat obtenu : MULUB AX,CL,DL ; AX <-- CL*DL SHR AX,#4 ; shift right 4 places Si l'indicateur C est 1 aprs le dcalage, cela signifie que les bits perdus lors du dcalage reprsentent une valeur suprieure ou gale au demi-LSB (bit de poids faible) du rsultat. Sans ST, l'erreur d'arrondi doit tre estime sur la base de l'indicateur C seul. L'utilisation de ST permet une apprciation plus fine de l'erreur d'arrondi : C 0 0 1 1 ST 0 1 0 1 Valeur des bits perdus valeur = 0 0 < valeur < 1/2 LSB valeur = 1/2 LSB valeur > 1/2 LSB