#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 Да, я тоже так это интерпретировал. Ваш более полный, я просто пытался ответить на вопрос напрямую.