Зачем добавлять 4 «нулевых» бита (0000) в конец адреса регистра сегмента, чтобы получить адрес сегмента в физической памяти? [закрыто]

1

Почему мы должны найти адрес в памяти, в котором есть 20-битное свободное пространство, в котором есть 16 бит для сегментного регистра и 4 "нулевых" бита?

Например, если регистр CS равен 346AH, сегмент кода в основной памяти будет 346A0H, что составляет 20 битов. Зачем мы это делаем?

Сегменты памяти занимают 64 Кбайт (?), Что происходит с остальным пространством, начиная с этих 20 бит?

Извините, я не очень хорош в компьютерной архитектуре!

Парвин
источник
так как долго сегмент, скажем, сегмент кода в основной памяти?
Парвин
«Для обратной совместимости все процессоры x86 запускаются в« реальном режиме »без защиты памяти, с фиксированными сегментами 64 КБ и только с 20-битной (1024 КБ) адресацией. Процессор 80286 или более поздней версии должен быть переключен программно в другой режим, чтобы использовать его полное адресное пространство и расширенные функции MMU. "
Ramhound
Зависит от используемого реестра. «Четыре из регистров сегмента: CS, SS, DS и ES принудительно установлены в 0, а предел в 264. Сегменты регистров FS и GS могут по-прежнему иметь ненулевой базовый адрес». Сегментация памяти
Ramhound
в моей книге написано, что они имеют размер не более 64 КБ, а моя книга написана на персидском языке, поэтому вам не стоит называть это имя!
Парвин
Мне не нужно знать название вашей книги, чтобы знать, что информация устарела.
Ramhound

Ответы:

2

Например, если регистр CS равен 346AH, сегмент кода в основной памяти будет 346A0H, что составляет 20 битов. Зачем мы это делаем?

По-видимому, вы имеете в виду сегментацию x86 , которая изначально использовалась в процессорах Intel 8086/88. Этот вид «сегмента» не является универсальным. Есть и другие определения для « сегментов » памяти .

В историческом контексте вы должны понимать, что кремниевая и (ферритовая) память раньше была очень дорогой. Чтобы противостоять дорогим мэйнфрейм-компьютерам, мини-компьютер появился в 1970-х годах, чтобы обеспечить недорогой компьютер. Этот акцент на низкой стоимости обычно означал 16-битную адресную шину (например, DEC PDP, Data General Nova, HP 21xx) и до 64 КБ памяти. Но поскольку системные требования росли, часто требовалось больше памяти.

Были разработаны схемы памяти, которые могли бы использовать существующие 16-битные адреса, но при этом иметь доступ к большему объему памяти.
Самым распространенным методом расширения объема памяти 64 КБ с помощью 16-битных адресов было использование банков памяти, то есть фактические старшие биты эффективного адреса памяти задаются регистром банка. Основное преимущество использования банков памяти состоит в том, что они могут быть реализованы в подсистеме памяти (то есть вне процессора) и, следовательно, могут быть установлены на любом процессоре.
С появлением микропроцессоров системы, использующие 16-битную адресацию (например, Intel 8051, Zilog Z80), имели тенденцию развиваться аналогичным образом, то есть с использованием банковской памяти.

Сегментная адресация, используемая Intel x86 (и, по крайней мере, еще одной известной мне системой), интегрирована с процессором и, следовательно, более универсальна.
В то время как банк памяти может занимать только фиксированную область в исходном пространстве памяти, сегменты x86 обеспечивают доступ к расширенному 20-битному адресному пространству с использованием 16-битного смещения в сочетании со спецификацией регистра сегмента.

Адрес сегмента x86 на самом деле является 20-битным адресом, усеченным до 16 битов адреса.
Этот сегмент может начинаться с любого абзаца (адрес по модулю 16 равен нулю).
Следовательно, необходимо добавить четыре усеченных нулевых бита для получения фактического начала сегмента x86 в 20-битном пространстве памяти.
В зависимости от модели памяти x86, программное обеспечение x86 может использовать в основном 16-разрядные «адреса» (как и старое программное обеспечение), но может получать доступ к более эффективной памяти, чем старое 16-разрядное программное обеспечение для адресов.

Сегменты IOW x86 были методом расширения аппаратного обеспечения до 20-битной адресной шины, но позволяли программному обеспечению использовать в основном 16-битные «адреса» и не требовали 20-битной арифметики (то есть регистров и данных 20-битной ширины).

опилки
источник