Maison >tutoriels informatiques >connaissances en informatique >Pourquoi le processeur 8086 possède-t-il 20 lignes d'adresse alors que l'espace de stockage adressable maximum n'est que de 1 Mo ?
Réponse : La plage d’adressage du processeur 8086 est de 1 Mo. En effet, le processeur 8086 possède 20 lignes d'adresse et 2 ^ 20 équivaut à 1 024 Ko, soit 1 Mo. Cependant, dans le système 8086, les instructions ne fournissent que des adresses de 16 bits et les registres liés à l'adressage ne font que 16 bits. Par conséquent, la plage d’adressage n’est que de 64 Ko. Afin de pouvoir traiter 1 Mo d'espace mémoire, le CPU 8086 divise la mémoire en quatre segments logiques. Lorsque le processeur accède à la mémoire, le contenu du registre de segment (adresse de base du segment) est automatiquement décalé de 4 bits vers la gauche (en représentation binaire), puis ajouté au décalage d'adresse de 16 bits dans le segment pour former un physique de 20 bits. adresse.
Dans la mémoire segmentée, chaque adresse logique se compose d'une adresse de base de segment de 16 bits et d'une adresse de décalage.
Adresse physique : L'adresse absolue de la mémoire, de 00000H~FFFFFH, est l'adresse d'adressage réelle (également appelée adresse absolue) du CPU lors de l'accès à la mémoire
L'adresse de base du segment de 16 bits est décalée de 4 bits vers la gauche (équivalent à ajouter 4 "0" après le bit le plus bas de l'adresse de base du segment) et est ajoutée à l'adresse de décalage pour obtenir l'adresse physique.
Adresse physique = adresse de base du segment*16+adresse décalée
?
Dans la mémoire segmentée, chaque adresse logique se compose d'une adresse de base de segment de 16 bits et d'une adresse de décalage.
Adresse physique : L'adresse absolue de la mémoire, de 00000H~FFFFFH, est l'adresse d'adressage réelle (également appelée adresse absolue) du CPU lors de l'accès à la mémoire
L'adresse de base du segment de 16 bits est décalée de 4 bits vers la gauche (équivalent à ajouter 4 "0" après le bit le plus bas de l'adresse de base du segment) et est ajoutée à l'adresse de décalage pour obtenir l'adresse physique.
Adresse physique = adresse de base du segment*16+adresse décalée
(1/2) Langage d'assemblage. 1. L'espace de stockage maximum autorisé par le processeur 8086/8088 est de (1 Mo+65520) et son numéro d'adresse physique est de (00000) à (ffff0+ffff+1=10FFF0)H. 2. La représentation hexadécimale du nombre décimal -46 est (0FFD2h ou 0D2H)
La représentation hexadécimale du nombre décimal 46 est 2EH
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:Administrateur Documents et paramètres>débogage
-a
0AFE:0100 mov hache,2e
0AFE:0103 xor bx,bx
0AFE:0105 sous bx,ax
0AFE:0107
-t
AX=002E BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0AFE ES=0AFE SS=0AFE CS=0AFE IP=0103 NV UP EI PL NZ NA PO NC
0AFE:0103 31DB XOR BX,BX
-t
AX=002E BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0AFE ES=0AFE SS=0AFE CS=0AFE IP=0105 NV UP EI PL ZR NA PE NC
0AFE:0105 29C3 SUB BX,AX
-t
AX=002E BX=FFD2 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0AFE ES=0AFE SS=0AFE CS=0AFE IP=0107 NV UP EI NG NZ AC PE CY
0AFE:0107 0029 AJOUTER [BX+DI],CH DS:FFD2=00
-
Les registres sont en 16 bits. Par exemple, AX, BX, SI et DI sont tous en 16 bits. Les codes d'adresse qu'ils peuvent représenter ne sont que en 16 bits. 2 à la puissance 16 est égal à 64 Ko, qui est l'espace mémoire auquel nous, en tant que programmeur, pouvons accéder directement via les registres. Le bus d'adresses fourni par le processeur 8086/8088 comporte 20 bits, et 2 puissance 20 équivaut à 1 Mo. Il s'agit de l'espace mémoire maximum auquel le processeur peut accéder par lui-même.
Il y a une contradiction : le CPU peut accéder à 1 Mo de mémoire, mais le registre ne peut représenter que 64 Ko de taille de mémoire. Par conséquent, les concepts d'adresse de segment et d'adresse de décalage sont introduits. Divisez cet espace mémoire de 1 Mo en segments de 64 Ko, spécifiez quel segment, puis ajoutez une « adresse de décalage » au début de ce segment. Cela ne vous permet-il pas d'accéder à n'importe quel espace dans 1 Mo de mémoire ?
Comment obtenir l'adresse du segment :
Par exemple, une variable de caractère STR est déclarée quelque part dans le segment de données d'assemblage
MOV DX, SEG STR
Grâce à la déclaration SEG, l'adresse de segment de STR peut être extraite et envoyée à DX.
J'espère que le contenu ci-dessus vous sera utile !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!