Wenn beispielsweise das CS-Register 346AH ist, ist das Codesegment im Hauptspeicher 346A0H, also 20 Bit. Warum machen wir das?
Anscheinend beziehen Sie sich auf die x86-Segmentierung, wie sie ursprünglich in den Intel 8086/88-CPUs verwendet wurde. Diese Art von "Segment" ist nicht universell. Es gibt andere Definitionen für Speicher " Segmente ".
In einem historischen Kontext müssen Sie feststellen, dass Silizium- und (Ferrit-) Speicher früher sehr teuer waren. Um den teuren Mainframe-Computern entgegenzuwirken, entwickelte sich der Minicomputer in den 70er Jahren, um einen kostengünstigen Computer bereitzustellen. 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 Arbeitsspeicher. Mit den steigenden Systemanforderungen wurde jedoch häufig mehr Speicher benötigt.
Es wurden Speicherschemata entwickelt, die immer noch die vorhandenen 16-Bit-Adressen verwenden und auf mehr Speicher zugreifen können.
Die gebräuchlichste Technik zum Erweitern der 64-KB-Speicherkapazität um 16-Bit-Adressen bestand in der Verwendung von Speicherbänken, dh 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 (dh außerhalb der CPU) implementiert werden können und daher für jede CPU nachgerüstet werden können.
Mit dem Aufkommen von Mikroprozessoren entwickelten sich Systeme mit 16-Bit-Adressierung (z. B. Intel 8051, Zilog Z80) in ähnlicher Weise, dh sie besaßen Speicher mit Bankspeicher.
Die Segmentadressierung, wie sie von Intel x86 (und mindestens einem anderen System, das ich kenne) verwendet wird, ist in den Prozessor integriert und daher vielseitiger.
Während eine Speicherbank nur einen festen Bereich im ursprünglichen Speicherbereich belegen kann, bieten x86-Segmente Zugriff auf einen erweiterten 20-Bit-Adressraum unter Verwendung eines 16-Bit-Offsets in Kombination mit einer Spezifikation eines Segmentregisters.
Die x86-Segmentadresse ist tatsächlich eine 20-Bit-Adresse, die auf nur 16 Adressbits verkürzt ist.
Dieses Segment kann an einem beliebigen Absatz beginnen (die Adresse modulo 16 ist Null).
Daher müssen die vier abgeschnittenen Nullbits angehängt werden, um den tatsächlichen Start des x86-Segments im 20-Bit-Speicherplatz zu erhalten.
Abhängig vom x86-Speichermodell kann die x86-Software hauptsächlich 16-Bit-Adressen (wie ältere Software) verwenden, kann jedoch auf effektiveren Speicher zugreifen als die ältere 16-Bit-Adresssoftware.
IOW x86-Segmente waren eine Methode zum Erweitern der Hardware auf einen 20-Bit-Adressbus. Die Software kann jedoch hauptsächlich 16-Bit- "Adressen" verwenden und erfordert keine 20-Bit-Arithmetik (dh 20-Bit-Register und Daten).