Главная /
Ассемблер /
Для чайников /
Введение в Ассемблер /
Реальный режим
В реальном режиме процессор может обращаться только к первым 1 048 576 байтам (1 МБ)
оперативной памяти, так как в реальном режиме используется только 20 младших разрядов
шины адреса. Из этого следует, что диапазон адресов памяти (в шестнадцатеричном представлении)
будет от 00000 до FFFFF. А повелось это с тех времён, когда шина адреса была 20-разрядной,
а регистры 16-разрядными. То есть одного регистра было недостаточно для хранения адреса.
В реальном режиме используется сегментная модель памяти. Суть её заключается в том,
что всё доступное адресное пространство разделено на блоки по 64 КБ. Такие блоки называются
сегментами.
Пример записи адреса в сегментной модели памяти:
8000:0100
Здесь 8000 – это адрес сегмента (или просто
сегмент), а 0100 – это
смещение относительно адреса сегмента (или просто
смещение). Таким образом,
чтобы получить доступ к какому-либо байту в памяти в реальном режиме, нужно знать
сегмент и смещение, то есть начало 64-килобайтного блока памяти, где находится нужный нам байт,
и смещение от начала этого блока, то есть адрес (номер) байта в этом блоке. Напомню,
что нумерация начинается с нуля, а не с единицы.
Реальный адрес (линейный адрес) нужного нам байта определяется следующим образом
(упрощено в расчёте на начинающих, профессионалов прошу отнестись с пониманием).
Берём сегмент и приписываем к нему нолик справа, то есть в нашем примере получим 80000.
Затем прибавляем к полученному числу смещение. Получаем 80100 – это и есть линейный адрес,
то есть адрес, который используется в 20-разрядной шине адреса для доступа к байту.
Операцию преобразования сегментного адреса в линейный адрес выполняет
сумматор адреса – специальное аппаратное устройство,
которое входит в состав процессора.
Напомню, что все адреса в данном разделе представлены в шестнадцатеричной системе.
Ещё немного наглядной информации о сегментных и линейных адресах вы можете найти здесь:
Контрольная работа по информатике.