как, если регистр CS 346AH, то этап кода в главной памяти будет 346A0H, которое 20 битов. почему мы этим занимаемся?
видимо, вы имеете в виду сегментация x86, как первоначально использовано в C. P. U. Intel 8086/88. Такого рода "сегмент" не является универсальным. Существуют и другие определения памяти"сегментов".
в историческом контексте вам нужно понять, что Кремниевая и (ферритовая) память была очень дорогой. Чтобы противостоять дорогим мейнфреймам,миникомпьютер появилась в 1970-х годах, чтобы обеспечить недорогой компьютер. Этот фокус на низкой стоимости обычно значил шестнадцатиразрядную шину адреса (например DEC PDP, Нова генерала данных, HP 21xx), и до 64KB памяти. Но по мере роста системных требований часто требовалось больше памяти.
схемы памяти были разработаны, которые все еще могут использовать существующие 16-битные адреса, но могут получить доступ к большему объему памяти.
Наиболее распространенные метод расширения объема памяти 64КБ с 16-битными адресами заключался в использовании банков памяти, т. е. фактические верхние биты действующего адреса памяти задаются банковским регистром. Основным преимуществом использования банков памяти является то, что она может быть реализована в подсистеме памяти (т. е. внешней по отношению к ЦП), и, следовательно, переоборудована на любой ЦП.
С появлением микропроцессоров системы, использующие 16-битную адресацию (например, Intel 8051, Zilog Z80), как правило, эволюционировали в аналогичную мода, то есть включающая банковскую память.
сегментная адресация, используемая Intel x86 (и, по крайней мере, одна другая система, о которой я знаю), интегрирована с процессором и, следовательно, более универсальна.
В то время как банк памяти может занимать только фиксированную область в исходном пространстве памяти, сегменты x86 предоставляют доступ к расширенному 20-разрядному адресному пространству, используя 16-разрядное смещение в сочетании со спецификацией регистра сегментов.
адрес сегмента x86 на самом деле 20-битный адрес усечен только до 16 адресных битов.
Этот сегмент может начинаться с любого абзаца (адрес по модулю 16 равен нулю).
Отсюда необходимость добавления четырех усеченных нулевых битов для получения фактического начала сегмента x86 в 20-разрядном пространстве памяти.
В зависимости от x86 модель памяти, програмное обеспечение x86 смогло использовать главным образом шестнадцатиразрядные "адреса" (как раз как более старое програмное обеспечение), но смогло достигнуть более эффективной памяти чем старше 16-разрядного адреса программной мог.
сегменты IOW x86 были методом расширения аппаратной части до 20-битной адресной шины, но позволяли программному обеспечению использовать в основном 16-битные "адреса" и не требовали 20-битной арифметики (т. е. регистров и данных шириной 20 бит).