Моят учител каза, че микропроцесорът 8086 Intel има 16-битов адрес и 20-битов физически адрес. Каква е разликата между адрес и физически адрес?


Отговор 1:

Това означава, че през 8086 адресите, използвани в програмите (логическият или виртуален адрес, както го наричате), са 16 бита, но действителният адрес, който 8086 изпраща в RAM паметта, е 20 бита.

Защо? Тъй като 16 бита = 64 KB адресно пространство, където като 20 бита адрес = 1 MB памет. По този начин можете да адресирате повече памет от възможното с обикновена 16-битова адресация (16 пъти повече памет в този случай).

Как? Спомнете си схемата за сегментиране в реалния режим. През 8086 г. адресът, изпратен до RAM = сегментен регистър * 16 + офсет (заменете сегментния регистър и компенсирайте с cs: ip, ds: si, es: di и т.н.)

По този начин, въпреки че сегментните регистри и компенсации са 16 бита, бихме могли да имаме физически адрес, дълъг 20 бита.

(Ако забележите, умножаването на 16 е същото като изместване наляво с 4. 16-битов адрес, изместен с 4, става 20-битов адрес (компенсиране все още не е добавено))


Отговор 2:

Една от най-важните цели, на която електротехниците трябва да обърнат внимание, когато им е казано да проектират нещо, е колко ще струва това нещо, когато е проектирано изградено и продадено. А понякога това означава, че данните и адресните шини в компютър са мултиплексирани, за да се спестят пари. Обикновено бихме помислили за 20-битова адресна шина като 20 отделни проводника, всеки от които носи по 1 бит данни на адресната шина. Възможно е да има 16 проводника, разговарящи с адресната шина, когато 4 бита от висок ред се контролират от регистър на сегментите. Това води до архитектура на паметта, която е 1 мегабайт, която е адресирана като 16 банки с 64килобайт. 16-битовата адресна шина ще избере адресите от 0–64 k и трябва да промените съдържанието на банковия регистър за избор, за да говорите със сусесивни групи от 64k ​​памет, до границата с 1 мег. Процесорите, които имат по-малко адресни линии от поддържания размер на паметта, обикновено имат сегментни регистри, така че ядрото или кодът на операционната система да могат да следят и да превключват регистъра за избор на банка според нуждите.

Това в крайна сметка създава ситуация, при която даден адрес на физическа памет се намира от 4-битов сегментен регистър + 16-битова адресна шина = 20-битов физически адрес за разговор с 1 мегабайт памет. За щастие отдавна сме минали дните на 70-те, когато дизайнерите на чипове се колебаят да поставят cpus в пакети с повече от 40 пина, така че мултиплексирането на адресната шина не е необходимо толкова често.