1

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

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

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

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

1 ответ1

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-битной ширины).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .