%20hinzugef%C3%BCgt%2C%20um%20die%20Segmentadresse%20im%20physischen%20Speicher%20zu%20erhalten%3F%20.png)
Warum müssen wir eine Adresse im Speicher finden, in der 20 Bit freier Speicherplatz vorhanden sind, davon 16 Bit für das Segmentregister und 4 „Null“-Bits?
Wenn das CS-Register beispielsweise 346AH ist, ist das Codesegment im Hauptspeicher 346A0H, also 20 Bit. Warum machen wir das?
Speichersegmente sind 64 KBytes (?) groß. Was passiert mit dem restlichen Speicherplatz, abgesehen von diesen 20 Bits?
Tut mir leid, ich bin nicht so gut in Computerarchitektur!
Antwort1
Wenn das CS-Register beispielsweise 346AH ist, ist das Codesegment im Hauptspeicher 346A0H, also 20 Bit. Warum machen wir das?
Offenbar beziehen Sie sich aufx86-Segmentierung, wie ursprünglich in den Intel 8086/88 CPUs verwendet. Diese Art von „Segment“ ist nicht universell. Es gibt andere Definitionen für Speicher „Segmente".
Im historischen Kontext muss man sich bewusst machen, dass Silizium- und (Ferrit-)Speicher früher sehr teuer waren. Um den teuren Großrechnern entgegenzuwirken,Minicomputerwurde in den 1970er Jahren entwickelt, um kostengünstige Computer anzubieten. Dieser Fokus auf niedrige Kosten bedeutete normalerweise einen 16-Bit-Adressbus (z. B. DEC PDP, Data General Nova, HP 21xx) und bis zu 64 KB Speicher. Aber mit steigenden Systemanforderungen wurde oft mehr Speicher benötigt.
Es wurden Speicherschemata entwickelt, die die vorhandenen 16-Bit-Adressen weiterhin verwenden und dennoch auf mehr Speicher zugreifen konnten.
Die gängigste Technik zum Erweitern der 64-KB-Speicherkapazität mit 16-Bit-Adressen war die Verwendung von Speicherbänken, d. h. die tatsächlichen oberen Bits der effektiven Speicheradresse werden durch ein Bankregister angegeben. Der Hauptvorteil der Verwendung von Speicherbänken besteht darin, dass sie im Speichersubsystem (d. h. außerhalb der CPU) implementiert und daher in jede CPU nachgerüstet werden können.
Mit dem Aufkommen von Mikroprozessoren tendierten Systeme mit 16-Bit-Adressierung (z. B. Intel 8051, Zilog Z80) dazu, sich auf ähnliche Weise zu entwickeln, d. h. sie integrierten Bankspeicher.
Die Segmentadressierung, wie sie von Intel x86 (und mindestens einem anderen mir bekannten System) verwendet wird, ist in den Prozessor integriert und daher vielseitiger.
Während eine Speicherbank nur einen festen Bereich im ursprünglichen Speicherplatz belegen kann, bieten x86-Segmente Zugriff auf einen erweiterten 20-Bit-Adressraum mithilfe eines 16-Bit-Offsets in Kombination mit der Spezifikation eines Segmentregisters.
Die x86-Segmentadresse ist eigentlich eine 20-Bit-Adresse, die auf nur 16 Adressbits gekürzt wurde.
Dieses Segment kann in jedem Absatz beginnen (die Adresse modulo 16 ist Null).
Daher müssen die vier gekürzten Nullbits angehängt werden, um den tatsächlichen Anfang des x86-Segments im 20-Bit-Speicherplatz zu erhalten.
Abhängig von derx86-Speichermodellkonnte die x86-Software hauptsächlich 16-Bit-„Adressen“ verwenden (genau wie ältere Software), konnte jedoch auf mehr effektiven Speicher zugreifen als die ältere Software mit 16-Bit-Adressen.
Mit anderen Worten: x86-Segmente waren eine Methode, die Hardware auf einen 20-Bit-Adressbus zu erweitern, der Software jedoch die Verwendung von hauptsächlich 16-Bit-„Adressen“ zu ermöglichen und keine 20-Bit-Arithmetik (d. h. 20 Bit breite Register und Daten) zu erfordern.