Связь между размером адресной шины и объемом памяти; Сегментация памяти в 8086 году - PullRequest
0 голосов
/ 02 марта 2020

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

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

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

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

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

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

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

1 Ответ

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

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

...