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

481
parvin

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

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

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

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

1
так как долго сегмент, скажем, сегмент кода в основной памяти? parvin 7 лет назад 0
«Для обратной совместимости все процессоры x86 запускаются в« реальном режиме »без защиты памяти, с фиксированными сегментами 64 КБ и только с 20-битной (1024 КБ) адресацией. Процессор 80286 или более поздней версии должен быть переключен программно в другой режим, чтобы использовать его полное адресное пространство и расширенные функции MMU. " Ramhound 7 лет назад 0
Зависит от используемого регистра. «Четыре из регистров сегмента: CS, SS, DS и ES принудительно установлены в 0, а предел в 264. Сегменты регистров FS и GS могут по-прежнему иметь ненулевой базовый адрес». [Сегментация памяти] (https://en.wikipedia.org/wiki/Memory_segmentation) Ramhound 7 лет назад 0
в моей книге написано, что они имеют максимальный размер 64 КБ, а моя книга написана на персидском языке, поэтому вам не стоит называть это имя! parvin 7 лет назад 0
Мне не нужно знать название вашей книги, чтобы знать, что информация устарела. Ramhound 7 лет назад 0
По-видимому, вы имеете в виду ** x86 ** сегментацию, которая изначально использовалась в процессорах Intel 8086/88. Этот вид «сегмента» не является универсальным. Сегмент x86 является * усеченным * адресом, состоящим только из 16 адресных битов. Следовательно, необходимо добавить четыре усеченных нулевых бита для получения фактического начала сегмента x86 в 20-битном пространстве памяти. sawdust 7 лет назад 0
@ Ramhound, что ты имеешь в виду под 20-битной адресацией? parvin 7 лет назад 0
@parvin - Ваш вопрос конкретно относится к 20-битной адресации. Я процитировал статью из Википедии для удобства, чтобы подчеркнуть тот факт, что вы говорите о «реальном режиме», а не о «защищенном режиме» (https://en.wikipedia.org/wiki/Protected_mode#Segment_addressing), в котором есть [MMU] (https : //en.wikipedia.org/wiki/X86_virtualization#I.2FO_MMU_virtualization_.28AMD-Vi_and_Intel_VT-d.29) функции Ramhound 7 лет назад 0
@sawdust ага, а что вы подразумеваете под "фактическим началом" сегмента? parvin 7 лет назад 0
@parvin - он означает смещение. 16 бит будут 0x346A Ramhound 7 лет назад 0
* «Что вы подразумеваете под« фактическим началом »сегмента» * - Первый байт сегмента x86. Сегмент x86 может иметь длину до 64 Кбайт. Вы должны объединить (усеченный 16-битный) адрес сегмента с (16-битным) смещением для генерации 20-битного адреса. Но адрес сегмента x86 должен быть умножен на 16 (или добавить четыре нулевых бита), прежде чем вы сможете добавить смещение. Смещение нуля является началом сегмента x86. sawdust 7 лет назад 0
@sawdust почему начало сегмента 20 бит? parvin 7 лет назад 0
Какое это имеет отношение к тегу `segmentation-fault`? Barmar 7 лет назад 0

1 ответ на вопрос

2
sawdust

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

Похожие вопросы