Min lærer sagde, at en 8086 Intel-mikroprocessor har en 16-bit adresse og en 20-bit fysisk adresse. Hvad er forskellen mellem en adresse og en fysisk adresse?


Svar 1:

Det betyder, at i 8086 er adresserne, der bruges i programmer (den logiske eller virtuelle adresse, som du kalder det) 16 bit, men den faktiske adresse, som 8086 sender til RAM, er 20 bit.

Hvorfor? Fordi 16 bit = 64 KB adresseplads, hvor 20 bit adresse = 1 MB hukommelse. Således kan du adressere mere hukommelse end hvad der er muligt med en almindelig 16 bit adressering (16 gange mere hukommelse i dette tilfælde).

Hvordan? Husk den segmenterede adresseringsskema for den reelle tilstand. I 8086 sendes adresse til RAM = segmentregister * 16 + offset (erstatt segmentregister og offset med cs: ip, ds: si, es: di osv.)

Selvom segmentregistret og forskydningen er 16 bit, kunne vi have en fysisk adresse, der er 20 bit lang.

(Hvis du bemærker, at multiplicere med 16 er det samme som at skifte til venstre med 4. En 16 bit adresse, der er skift med 4, bliver en 20 bit adresse (offset er endnu ikke tilføjet))


Svar 2:

Et af de vigtigste mål, som elektriske ingeniører er nødt til at være opmærksomme på, når de får at vide at designe noget, er, hvor meget tinget vil koste, når det er designet bygget og solgt. Og undertiden betyder det, at data- og adressebusser på en computer er multipleksede for at spare penge. Normalt ville vi tænke på en 20 bit adressebus som at have 20 separate ledninger, der hver bærer 1 bit data på adressebussen. Det er muligt at have 16 ledninger, der taler med adressebussen, når 4-bits med høj ordre styres af et segmentregister. Dette resulterer i, at der er en hukommelsesarkitektur, der er 1 megabyte, der adresseres som 16 banker på 64 kilobyte. 16-bit adressebussen vælger adresser fra 0–64k, og du skal ændre indholdet i bankvælgeregisteret for at tale med suksessive grupper på 64k hukommelse helt til 1 meggrænsen. CPU'er, der har færre adresselinjer end den understøttede hukommelsesstørrelse, har normalt segmentregistre, så kernal eller operativsystemkode kan holde styr på og skifte bankvalgregister efter behov.

Dette skaber i sidste ende en situation, hvor en given fysisk hukommelsesadresse findes ved 4 bit segmentregister + 16 bit adressebus = 20 bit fysisk adresse for at tale med en 1 megabyte hukommelse. Heldigvis er vi længe gået over 70'ernes dage, hvor chipdesignere tøvede med at lægge cpus i pakker med mere end 40 pins, så adressebusmultiplexing er ikke nødvendig så ofte.