Antwort: Der Adressbereich der 8086-CPU beträgt 1 MB. Dies liegt daran, dass die 8086-CPU 20 Adressleitungen hat und 2^20 1024 KB entspricht, was 1 MB entspricht. Im 8086-System stellen Befehle jedoch nur 16-Bit-Adressen bereit, und die mit der Adressierung verbundenen Register sind nur 16 Bit lang. Daher beträgt der Adressbereich nur 64 KB. Um 1 MB Speicherplatz adressieren zu können, unterteilt die 8086-CPU den Speicher in vier logische Segmente. Wenn die CPU auf den Speicher zugreift, wird der Inhalt des Segmentregisters (Segmentbasisadresse) automatisch um 4 Bit nach links verschoben (in binärer Darstellung) und dann zum 16-Bit-Adressoffset innerhalb des Segments addiert, um eine 20-Bit-Physik zu bilden Adresse.
Im segmentierten Speicher besteht jede logische Adresse aus einer 16-Bit-Segmentbasisadresse und einer Offsetadresse.
Physikalische Adresse: Die absolute Adresse des Speichers, von 00000H~FFFFFH, ist die tatsächliche Adressierungsadresse (auch absolute Adresse genannt) der CPU beim Zugriff auf den Speicher
Die 16-Bit-Segmentbasisadresse wird um 4 Bits nach links verschoben (entspricht dem Hinzufügen von 4 „0“ nach dem niedrigsten Bit der Segmentbasisadresse) und zur Offsetadresse addiert, um die physische Adresse zu erhalten.
Physische Adresse = Segmentbasisadresse*16+Offset-Adresse
?
Im segmentierten Speicher besteht jede logische Adresse aus einer 16-Bit-Segmentbasisadresse und einer Offsetadresse.
Physikalische Adresse: Die absolute Adresse des Speichers, von 00000H~FFFFFH, ist die tatsächliche Adressadresse (auch absolute Adresse genannt) der CPU beim Zugriff auf den Speicher
Die 16-Bit-Segment-Basisadresse wird um 4 Bit nach links verschoben (entspricht dem Hinzufügen von 4 „0“ nach dem niedrigsten Bit der Segment-Basisadresse) und zur Offset-Adresse addiert, um die physische Adresse zu erhalten.
Physische Adresse = Segmentbasisadresse*16+Offset-Adresse
(1/2) Assemblersprache. 1. Der von der 8086/8088-CPU maximal zulässige Speicherplatz beträgt (1 MB + 65520) und die physische Adressnummer reicht von (00000) bis (ffff0 + ffff + 1 = 10FFF0) H. 2. Die hexadezimale Darstellung der Dezimalzahl -46 ist (0FFD2h oder 0D2H)
Die hexadezimale Darstellung der Dezimalzahl 46 ist 2EH
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:Dokumente und EinstellungenAdministrator>Debug
-a
0AFE:0100 mov ax,2e
0AFE:0103 xor bx,bx
0AFE:0105 sub 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 ADD [BX+DI],CH DS:FFD2=00
-
Register sind 16 Bit. Beispielsweise sind AX, BX, SI und DI alle 16 Bit. Die Adresscodes, die sie darstellen können, sind nur 16 Bit. 2 hoch 16 entspricht 64 KB. Dies ist der Speicherplatz, auf den wir als Programmierer über Register direkt zugreifen können. Der von der 8086/8088-CPU bereitgestellte Adressbus hat 20 Bit, und 2 hoch 20 entspricht 1 MB. Dies ist der maximale Speicherplatz, auf den die CPU selbst zugreifen kann.
Es gibt einen Widerspruch: Die CPU kann auf 1 MB Speicher zugreifen, das Register kann jedoch nur eine Speichergröße von 64 KB darstellen. Daher werden die Konzepte der Segmentadresse und der Offset-Adresse eingeführt. Teilen Sie diesen 1-MB-Speicherplatz in Segmente mit einer Größe von 64 KB auf, geben Sie das Segment an und fügen Sie dann am Anfang dieses Segments eine „Offset-Adresse“ hinzu. Ermöglicht Ihnen dies nicht den Zugriff auf Speicherplatz im 1-MB-Speicher?
So erhalten Sie die Segmentadresse:
Zum Beispiel wird eine Zeichenvariable STR irgendwo im Assembly-Datensegment deklariert
MOV DX,SEG STR
Über die SEG-Anweisung kann die Segmentadresse von STR herausgenommen und an DX gesendet werden.
Ich hoffe, dass die oben genannten Inhalte für Sie hilfreich sind!
Das obige ist der detaillierte Inhalt vonWarum verfügt die 8086CPU über 20 Adressleitungen, der maximal adressierbare Speicherplatz beträgt jedoch nur 1 MB?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!