Например, если регистр 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-битной ширины).