Почему 8086 использует дополнительный регистр для адресации 1 МБ памяти? - PullRequest
0 голосов
/ 29 августа 2011

Я слышал, что 8086 имеет 16-битные регистры, которые позволяют ему адресовать только 64 КБ памяти.Тем не менее, он по-прежнему может адресовать 1 МБ памяти, что потребует 20-битных регистров.Это делается с помощью другого регистра для хранения еще 16 битов, а затем добавляет значение в 16-битных регистрах к значению в этом другом регистре, чтобы иметь возможность генерировать числа, которые могут адресовать до 1 МБ памяти.Это правильно?

Почему это так?Кажется, что есть 32-битные регистры, которых более чем достаточно для адресации 1 МБ памяти.

Ответы [ 5 ]

1 голос
/ 29 августа 2011

Сегментные регистры в 8086 также имеют ширину шестнадцать битов. Однако номер сегмента сдвигается влево на четыре бита перед добавлением к базовому адресу. Это дает вам 20 битов.

1 голос
/ 29 августа 2011

8088 (и, соответственно, 8086) совместим с инструкцией своего предка, 8008, включая способ, которым он использует свои регистры и обрабатывает адресацию памяти.8008 был чисто 16-битной архитектурой, которая на самом деле не могла адресовать более 64КБ оперативной памяти.В то время, когда 8008 был создан, этого было достаточно для большинства его предполагаемых применений, но к тому времени, когда 8088 разрабатывался, было ясно, что нужно больше.

Вместо того, чтобы искать новый способ адресацииБолее того, Intel решила сохранить 8088 как можно более похожим на 8008, и это включало использование 16-битной адресации.Чтобы позволить новым программам использовать больше оперативной памяти, компания Intel разработала схему, использующую некоторые дополнительные регистры, отсутствующие на 8008, которые будут объединены с обычными регистрами.эти «сегментные» регистры не будут влиять на программы, предназначенные для 8008;они просто не будут использовать эти дополнительные регистры и будут «видеть» только 16 адресных битов, 64 Кб оперативной памяти.Приложения, ориентированные на более новый 8088, могут вместо этого «видеть» 20 бит адреса, что дает им доступ к 1 МБ ОЗУ

1 голос
/ 29 августа 2011

На самом деле это не имеет никакого отношения к количеству регистров.Это размер регистра, который имеет значение.16-битный регистр может содержать до 2 ^ 16 значений, поэтому он может адресовать 64 Кбайт памяти.

Для адресации 1М необходимо 20 бит (2 ^ 20 = 1М), поэтому для дополнительных 4 бит необходимо использовать другой регистр.

0 голосов
/ 03 июня 2019

8086 не имеет 32-битных целочисленных регистров;это произошло спустя годы, в 386 году, у которого был гораздо больший бюджет на транзисторы. Сегментация

8086 имела смысл для 16-разрядного ЦП, который хотел использовать 20-разрядные линейные адреса.

Сегментные регистры могли бы быть только 8-разрядными или чем-то еще с большим сдвигом, но, очевидно, у мелкозернистой сегментации есть некоторые преимущества, когда начальный адрес сегмента может быть любым 16-байтовым выровненным линейным адресом.(Линейный адрес вычисляется из (seg << 4) + off.)

0 голосов
/ 08 августа 2013

Я слышал, что 8086 имеет 16 регистров, которые позволяют ему адресовать только 64 КБ памяти.Тем не менее, он по-прежнему может адресовать 1 МБ памяти, что потребует 20 регистров.

Вы неправильно понимаете количество регистров и регистров ширина ,8086 имеет восемь 16-битные регистры общего назначения (которые могут использоваться для адресации) вместе с четырьмя сегментными регистрами.16-битная адресация означает, что она может поддерживать только 2 16 B = 64 КБ памяти.Получив еще 4 бита из регистров сегментов, мы получим 20 бит, которые можно использовать для адресации в общей сложности 2 4 * 64 КБ = 1 МБ памяти

Почему это так?сделано таким образом?Кажется, что существует 32 регистра, что более чем достаточно для адресации 1 МБ памяти.

Как уже говорилось, 8086 не имеет 32 регистров.Даже x86-64 в настоящее время не имеет 32 регистров общего назначения.И количество регистров не имеет отношения к тому, сколько памяти машина может адресовать.Только ширина адресной шины определяет объем адресуемой памяти

Во времена 8086 память является чрезвычайно дорогой, и 640 КБ - это огромный объем, который люди не думали, что он будет достигнут в ближайшем будущем.Даже имея большие деньги, вы не сможете получить такой большой объем оперативной памяти.Таким образом, нет необходимости использовать полный 32-битный адрес

Кроме того, нелегко создать 32-битный процессор с современной технологией.Даже 64-разрядные ЦП сегодня не предназначены для использования всех 64-разрядных адресных линий

Это займетбольше проводов, регистров, силиконов ... и гораздо больше человеческих усилий для разработки, отладки ... процессора с более широким адресным пространством.С ограниченным размером транзисторов технологии в 70-х-80-х годах это может даже не войти в реальность.

...