1.3. Организация памяти

Память ЭВМ состоит из последовательности ячеек, каждая из которых имеет адрес. Точнее, памятью называется область хранения данных, доступ к которой осуществляется по шине адреса.

Микрокомпьютер имеет два типа памяти. Первый тип – это память, доступная только для чтения, которая называется постоянной или ROM-памятью. ROM-память представляет собой специальную микросхему, данные в которой «прожигаются». Основное назначение ROM состоит в поддержке процедуры начальной загрузки. Для целей программирования наиболее важным элементом ROM является базовая система ввода-вывода BIOS. Второй тип памяти называется памятью произвольного доступа RAM, или оперативной памятью. Эта память доступна для чтения и для записи, и является памятью, с которой работает программист. Содержимое RAM теряется при выключении питания. Поэтому для сохранения данных и программ необходима внешняя память, представляющая собой обычно жесткий диск или дискету.

Минимальная единица информации, с которой работает программа, называется битом. Бит принимает два значения – 0 и 1. Память разбивается на блоки различных размеров: байт, слово, страница, сегмент. Точные определения таковы:

Байтом называется минимальная адресуемая единица информации. Байт состоит из восьми бит. Таким образом, чтобы изменить один бит памяти, надо записать, по крайней мере, восемь битов в байт, содержащий этот бит. Каждому байту соответствует его физический адрес.

Словом называется размер регистра-аккумулятора. Так как регистр AX состоит из 16 бит, то слово равно 16 бит, или 2 байта. Если аккумулятором является регистр EAX, то слово состоит из 32 бит. В этом случае его называют 32-битным словом, оставляя название слово за областью памяти, состоящей из 16 бит.

Микропроцессор работает в одном из следующих режимов:

· реальный режим – режим, в котором работал процессор 8086;

· защищенный режим – режим, позволяющий максимально реализовать возможности процессоров 80х86, начиная с 80286; в этом режиме физический адрес формируется не так, как в реальном режиме;

· режим виртуального 8086 – режим, возможный при работе процессора в защищенном режиме; в этом режиме могут работать несколько программ, разработанных для 8086. Процесс формирования физического адреса для этих программ производится как в реальном режиме;

· режим системного управления – режим, появившийся в микропроцессоре Pentium. Функционирование процессора в этом режиме подобно его работе в реальном режиме.

Мы будем рассматривать адресацию памяти в реальном режиме.

Сегментом называется независимый, поддерживаемый на аппаратном уровне блок памяти, имеющий размер не больше 216 байт (поскольку 216=26*210=64*1024, а 1024 байт равны 1 Кбайт, то максимальный размер сегмента будет равен 64 Кбайт).

Параграфом называется минимальный размер сегмента 16 байт.

Поскольку шина адреса процессора 8086 состоит из 20 линий, то максимальный адресуемый объем памяти в реальном режиме равен 220 байт=210 Кбайт=1 Мбайт. В защищенном режиме для 80286 он равен 224 байт=16 Мбайт, а для процессоров 80386 и выше – 232 байт=4 Гбайт.

Память разделяется на сегменты подобно тому, как адреса домов разделяются на кварталы. Сегментные регистры предназначены для нумерации кварталов. Физический адрес байта, имеющего смещение x относительно начала сегмента, указанного с помощью сегментного регистра S, будет равен 16*S+x.

В частности, регистр CS (сегмент кодов) используется для указания, в каком сегменте находится программа. Так как содержимое счетчика команд IP равно адресу текущей команды относительно сегмента, то физический адрес текущей команды будет равен

EA = 16*CS+IP.

Вернемся к рис.1.3 и рассмотрим процессы выполнения команд и обмена данными между микропроцессором и оперативной памятью:

1) По содержимому регистров CS и IP, хранящих адрес команды в виде адреса начала сегмента и номера байта в сегменте, определяется местонахождение (EA) команды, выполняемой на следующем шаге.

2) Вычисленный адрес запоминается в память.

По указанному адресу из оперативной памяти считывается команда и пересылается в процессор. В процессоре 8086 команды и данные записываются в память и читаются из памяти по одним и тем же линиям.

1)

2) Команды помещаются в очередь команд и выполняются в порядке очередности.

3) Местоположение данных, участвующих в командах, определяется в шинном интерфейсе по информации, содержащейся в адресной части команды, в регистрах сегментов DS, SS и ES, а также в регистрах SP, BP, SI, DI.

4) Данные, прочитанные из памяти, пересылаются в АЛУ или регистр данных и обрабатываются текущей командой, адрес которой был найден на шаге 2. Результаты обработки данных помещаются в оперативную память или в какой-либо из регистров.

Повторение описанной процедуры составляет выполнение программы. Номер сегмента называется адресом сегмента, а номер байта в сегменте – смещением. На практике указывают лишь смещение, и по умолчанию предполагается, что значение регистра DS известно.

Так как любой сегмент имеет объем до 64 Кбайт и имеется 4 сегментных регистра, то, по крайней мере, доступна память 256 Кбайт. В действительности, возможно любое количество сегментов в программе. Для того чтобы адресовать другой сегмент, достаточно изменить значение сегментного регистра.

Память RAM включает в себя первые три четверти памяти, а ROM – последнюю четверть, в памяти объема 1 Мбайт. ROM начинается по адресу 768 Кбайт. При работе в системе MS DOS память распределена следующим образом:

На рис.1.5 в левой части указаны начальные адреса блоков памяти. Под векторами прерываний понимаются адреса сервисных подпрограмм операционной системы, системы BIOS и обслуживающих подпрограмм, написанных пользователем.