|
La mémoire en détail 3.1 Segmentation de la mémoire La taille maximum d'un segment est de 64 Ko. Pour qu' un programme s'exécute, le segment de code et le segment de pile doivent exister. 3.2 Les emplacements réservés Certaines zones de la mémoire sont réservées à des usages particuliers : a) De FFFF0h à FFFFFh, réservé au bootstrap, c'est à dire à l' initialisation du système (vecteur RESET). Note : on trouve en FFFF0h EA E07D F000 = JMP F000 :E07D qui correspond au point d'entrée du BIOS. b) De 0 à 3FFh, réservée aux vecteurs d' interruptions. Chaque vecteur nécessite 4 octets (base + offset. Le microprocesseur est capable de reconnaître jusqu'à 256 niveaux d'interruption. Lorsqu'une interruption est générée, le microprocesseur identifie le demandeur et vient chercher dans la table des vecteurs, l'adresse de la routine de gestion du demandeur.  En résumé :  3.3 La pile C'est une région de la RAM où l' on va stocker ou retirer des informations. L'utilisation de la pile est très fréquente pour la sauvegarde temporaire du contenu des registres et pour le passage de paramètres lorsqu'un langage de haut niveau fait appel à une routine en assembleur La taille de la pile varie en fonction de la quantité d' informations qu'on y dépose ou qu'on en retire. | | SP
| | | | | | | | | | AH | | AH | | AH | | | | | AL | SP
| AL | | AL | SP
| | | | | | BH | | | | | | | | | BL | SP
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | SS | | SS | | SS | | SS | | | | | | | | | | Pile vide | | PUSH AX | | PUSH BX | | POP CX | | Le pointeur de pile (SP) contient au départ l'adresse supérieure de la région qu'elle peut occuper. Ø L'opération consistant à déposer des informations dans la pile (PUSH) effectue une décrémentation du pointeur SP et range ensuite la donnée à l'adresse SS :SP et SS :SP+ 1 (dans le cas de l'exemple puisqu' il s'agit de données sur 16 bits), Ø L'opération consistant à retirer des informations dans la pile (POP) extrait du sommet de la pile le premier mot et incrémente SP (2 positions) pour pointer sur un nouveau mot. 3.4 Les modes d'adressage Domaine physique d'adressage direct : 1 Mo Domaine logique d'adressage direct : 4 * 64 Ko Modes d' adressages : Ø direct registres Ø direct mémoire Ø indirect via registre de base Ø avec ou sans indexation par registre d'index Calcul d'une adresse : 3.4.1 Accès aux instructions L'accès aux instructions fait implicitement appel à IP basé par rapport à CS : 3. 4. 2 Accès aux données Lorsqu' un segment logique est ouvert dans un programme source, a l'assemblage , un compteur lui est alloué. Ainsi l'assembleur fait correspondre à chaque étiquette ou nom de variable une valeur de compteur qui est simplement l'offset du symbole. 3.4.3 Adressage immédiat La donnée est spécifiée immédiatement après l' instruction. Elle est donc située dans le segment de code. Quelques exemples : MOV AX, 20 MOV CL, 8 MOV BX, 15h 3.4.4 Adressage direct registre Quelques exemples : MOV AX, DX MOV CH, AL Attention : les données doivent être de même type, l'instruction suivante est mauvaise : MOV CX, BL . 3.4.5 Adressage direct mémoire (déplacement) L'assembleur traduit les étiquettes en offsets. Les données sont implicitement basées par DS. Il est possible de spécifier une autre base : MOV AX, ES :DATA1 DATA1 est alors basé par rapport à ES Þ l' instruction nécessitera plus de temps lors de l'exécution.  3.4.6 Adressage indirect mémoire 3.4.6.1 Base ou index Lors d'un adressage indirect, la valeur d'affectation n'est plus le contenu d'un registre, mais la valeur contenue à un offset égal au contenu du registre. Quelques exemples : MOV AX, [SI] lecture d' un mot MOV AH, [BX] lecture d' un octet MOV [DI], AL écriture d'un octet MOV [DI], [SI] INTERDIT ! ! ! 3.4.6.2 Base et index Les lignes : MOV AX, [SI][ BX] et MOV AX, [SI + BX] Sont identiques. Cet adressage peut aussi être utilisé pour écrire en mémoire : MOV [DI][ BX], CX Par contre, la ligne suivante est fausse : MOV DX, [SI] [DI] Car l' utilisation simultané de deux index est interdite pour un adressage. 3.4.6.3 Base ou index + déplacement Il est possible d'utiliser ce mode d'adressage pour la lecture ou l'écriture : MOV AX, [BX] DATA1 MOV [SI] DATA2, CX Il est possible aussi d'ajouter un déplacer supplémentaire à l'aide du valeur immédiate : MOV AX, [DI] DATA3( 2) Ici, on effectue un déplacement supplémentaire de deux octets. 3.4.6.4 Base + index + déplacement En résumé : Exemple d' instruction | Mode d' adressage | MOV AX, 5 | Immédiat | MOV AX,BX | Registre | MOV AX, DATA1 | Direct mémoire | MOV AX, [BX] | Indirect base | MOV AX, [SI] | Indirect index | MOV AX, [BX + 5] | Indirect base + déplacement | MOV AX, [SI + 5] | Indirect index + déplacement | MOV AX, [BX][ SI] MOV AX, [BX + DI] | Indirect base + index | MOV AX, [BX][ DI] 5 MOV AX, [BX + SI + 5] | Indirect base + index + déplacement |
|