Связь между размером адресной шины и объемом памяти; сегментация памяти в 8086

Мой вопрос связан с сегментацией памяти в 8086. Я узнал, что,

8086 имеет 20-битную адресную шину. Таким образом, он может адресовать 2 ^ 20 разных адресов. Это означает, что у него размер памяти 2 ^ 20, то есть 1 МБ.

У меня есть несколько сомнений:

  1. Что я понимаю из того факта, что 8086 имеет 20-битную адресную шину, так это то, что она может иметь 2 ^ 20 различных комбинаций нулей и единиц, каждая из которых представляет один физический адрес. Я не понимаю, как 2 ^ 20 разных адресных мест означают 1 МБ адресуемой памяти? Как общее количество различных ячеек адресов связано с размером памяти (в мегабайтах)?

  2. Кроме того, поправьте меня, если я ошибаюсь, регистры 16-битных сегментов в 8086 содержат начальные адреса различных сегментов в памяти (код, стек, данные, дополнительные). Мой вопрос, не являются ли адреса в памяти 20 бит? Тогда как 16-битный регистр может содержать 20-битные адреса? Если он содержит старшие 16 бит 20-битного адреса, как процессор определяет, на какое точное место адреса он должен указывать?

P.S: Я новичок в использовании микропроцессоров и полностью полагаюсь на самообучение, так что прошу прощения, если мои вопросы кажутся немного глупыми.

Заранее спасибо.


person Abhijit Singh    schedule 02.03.2020    source источник


Ответы (1)


  1. При ответе на этот вопрос важно помнить, что существует разница между количеством возможных адресов памяти и объемом фактической памяти (ОЗУ), установленной в системе. Для 8086 адреса памяти имеют длину 20 бит, как вы заметили, это означает, что существует 2 ^ 20 возможных адресов памяти (что составляет ровно 1 МиБ, поскольку 1 МиБ равен 1024 или 2 ^ 10 КиБ, а 1 КиБ равен 1024 или 2 ^ 10 байт). Это НЕ означает, что в системе обязательно есть 1 МиБ ОЗУ, скорее всего, у нее меньше, но большинство адресов, которые может адресовать 8086, составляют 1 МиБ; поэтому, если бы в адресном пространстве не было ничего, кроме ОЗУ, максимальный объем ОЗУ, который он мог бы иметь, составляет 1 МиБ. Часто у вас могут быть пробелы в адресном пространстве, которые ничем не заполнены, часть адресного пространства используется для ПЗУ или других периферийных устройств. Таким образом, размер адресного пространства составляет 1 МБ, но это не означает, что в системе имеется 1 МБ ОЗУ / памяти.

  2. Правильно, все сегментные регистры для 8086 являются 16-битными. Адрес памяти создается путем объединения соответствующего сегментного регистра с аргументом (аргумент является результатом любого режима адресации, используемого инструкцией) путем добавления аргумента к значение сегментного регистра сдвинуто на 4 бита. Так, если, например, ss равно 0x1111, sp находится в 0x2222 и вы предварительно сформировали инструкцию push ax, 20-битный адрес, на который помещается значение, будет (ss << 4) + sp или 0x11110 + 0x02222 = 0x13332. Дополнительную информацию можно найти в Википедии в разделе «Реальный режим»: https://en.wikipedia.org/wiki/X86_memory_segmentation

person Unn    schedule 02.03.2020