Что происходит, когда физический адрес, соответствующий CS: IP, составляет более 20 бит в 8086? - PullRequest
2 голосов
/ 24 февраля 2020

В микропроцессоре 8086 предположим, что CS - это FFFFH, а IP - FAB0H. Тогда адрес физической памяти будет вычислен умножением CS на 16 и добавлением IP. т.е. Add = FFFF0 + FAB0 Эта сумма дает переполнение, поскольку сумма не может быть сохранена в 20 битах. Что случится?

1 Ответ

6 голосов
/ 24 февраля 2020

Для 8086 результат будет усечен до 20 бит; заставляя это обернуть вокруг. Например 0xFFFF0 + 0xFAB0 = 0x10FAA0 = 0xFAA0. Сегментированный адрес, который превышает 1 МБ, затем фактически обращается к памяти в первых 64 КБ - 16 байт.

Более новые процессоры 80x86 (начиная с 80286) поддерживают более широкие физические адреса и не усекаются; но для обеспечения обратной совместимости старое поведение моделировалось наличием программируемого «шлюза A20» (который изначально находился вне ЦП) для маскировки 21-го бита адреса (A20), если «вентиль A20» отключен. По этой причине для более новых процессоров с включенным «шлюзом A20» вы можете получить доступ почти на 64 КБ больше физического адресного пространства в реальном режиме (до 0xFFFF:0xFFFF = 0x10FFEF или на 65520 байт больше, чем исходный 1 МБ). Это называется областью высокой памяти.

...