как процессор вычисляет 20-разрядный адрес в реальном режиме

#x86 #memory-address #real-mode

#x86 #адрес памяти #реальный режим

Вопрос:

я знаю, что он использует регистр физического адреса = сегмента << регистр смещения 4 . Хотя эти два регистра 16-разрядные, как 8086 может обрабатывать 20-разрядную операцию плюс?

Ответ №1:

Модуль интерфейса шины состоит из сегментных регистров, сумматора для генерации 20-битного адреса и очереди предварительной выборки команд. Как только этот адрес отправляется из BIU, байты инструкций и данных извлекаются из памяти и заполняют очередь из 6 байт «Первый вход — первый выход».

Смотрите документ под названием «8086_Internal_Block_diagram_enotes.pdf», который легко найти через Google. Также смотрите этот документ, раздел о блоке интерфейса шины.

Таким образом, процессор генерирует эти 20-разрядные адреса «по требованию» с помощью выделенного внутреннего 20-разрядного регистра, если хотите.

Комментарии:

1. Понятно, спасибо! таким образом, по сути, при вычислении адреса не используется традиционный 16-разрядный ALU (?)

2. @0xdeadbeef: Правильно, у него есть свой собственный выделенный «мини-ALU» в BIU.

Ответ №2:

Когда вы сдвигаете 16-разрядное число на 4 позиции влево, вы, по сути, создаете 20-разрядное число. Затем смещение указывает, как далеко вы зайдете в этот диапазон. Смотрите статью Википедии об адресации в реальном режиме.

Пример:

 0x0001  << 4  ->  0x00010  (5 sets of 4 bits in each hex digit -> 20 bits)
  

Комментарии:

1. Я предполагаю, что вопрос был больше в этом: поскольку все регистры 16-разрядные, как процессор может обрабатывать 20-разрядное значение, которое слишком велико для обычного регистра.

2. @DarkDust Да, я тоже так это интерпретировал. Ваш более полный, я просто пытался ответить на вопрос напрямую.