Сегменты оперативной памяти

В реальном режиме работы процессора пространство оперативной памяти делится на сегменты, размер которых не превышает 64 Кбайт, а адрес начала обязательно кратен 16.

При выборке команд и операндов микропроцессор вычисляет абсолютный адрес, исходя из значения (кода) сегмента и смещения (относительного адреса) в нем. Для этого он сдвигает значение сегмента на 4 разряда вправо и прибавляет смещение к результату сдвига. Табл. Б.1 иллюстрирует схему формирования 20-разрядного адреса.

Таблица Б. 1. Схема формирования 20-разрядного адреса



15 14 13 ... c м е щ е н и е ... 2 1 0
15 14 13 12 ... с е г м е н т ... 2 1 0  
19 18 17 ... п о л н ы й   а д р е с ... 2 1 0

При записи на бумаге или на экране монитора сегмент и смещение разделяет символ "двоеточие". Например, записи 1111:2222 соответствует адрес 11110 + 2222 = 13332. Такая форма записи адресов используется при работе с большинством отладчиков.
Один и тот же полный адрес может быть задан различными способами. Например, область данных BIOS расположена в оперативной памяти, начиная с абсолютного адреса 400h. Его можно записать в виде 0000:0400, 0040:0000, 0020:0200 И Т. П.

Оперативная память занимает не все пространство адресов, а только младшие 640 Кбайт. Ее можно разделить на 10 сегментов максимального размера (64 Кбайт), коды которых будут изменяться от оооо до эоооь. Обычно далеко не все сегменты имеют максимальный размер, поэтому их количество бывает больше 10, но в любом случае сегмент с кодом AOOOh уже не относится к оперативной памяти, обычно это код видеосегмента при работе в графических режимах. И вообще, пространство от 640 Кбайт до 1 Мбайт выделено для размещения BIOS, ее дополнений, расположенных на платах контроллеров внешних устройств, адресов, через которые происходит доступ к этим устройствам, и т. п.