Формирование физического адреса памяти в реальном режиме работы. Примеры. (л7, 8)Формирование физического адреса происходит по правилам реального режима:
для определения физического адреса содержимое сегментного регистра умножается на 16 за счет добавления справа к младшим битам четырех нулей, после чего к полученному значению прибавляется содержимое регистра внутрисегментного смещения. Получается двадцати - битовое значение (20-разрядная шина адреса). Операционная система (а не сама программа) размещает сегменты программы в ОП по определенным физическим адресам, а значения этих адресов записывает в определенные места, в зависимости от режима работы микропроцессора: · в реальном режиме адреса помещаются непосредственно в специальные сегментные регистры (cs, ds, ss, es, gs, fs);
Для доступа к данным внутри сегмента обращение производится относительно начала сегмента линейно, т.е. начиная с 0 и заканчивая адресом, равным размеру сегмента. Этот адрес называется смещением (offset). Таким образом, для обращения к конкретному физическому адресу ОП необходимо определить адрес начала сегмента и смещение внутри сегмента. Физический адрес принято записывать парой этих значений, разделенных двоеточием segment: offset Например, 0040:001Ch; 0000:041Ch; 0020:021Ch; 0041:000Ch. Пример: Адрес, локализующий положение сегмента в оперативной памяти, содержится в одном из специальных сегментных регистров процессора, но он тоже 16-разрядный. Для того, чтобы при помощи этого адреса можно было перекрыть все пространство ОЗУ (в реальном режиме 1 Мб), со стороны младшего байта его дополняют четырьмя нулями. Например, если содержимое сегментного регистра: 0001.1101.1000.1111 (или 1D8F16) то адрес начала соответствующего сегмента будет равен: 0001.1101.1000.1111.0000 (или 1D8F016). Таким образом можно искусственно разделить всю память на сегменты, начинающиеся по адресам, кратным 1610. Предположим, что внутрисегментное смещение нашей ячейки задано числом 1001.1011.0010.0101 или 9В2516, в этом случае ее реальный адрес будет равен сумме адреса сегмента и внутрисегментного смещения: 1D8F016+9B2516 = 2741516 (рис. 4). Внутрисегментное смещение задается для сегмента кодов CS содержимым регистра IP; Для сегмента данных DS внутрисегментное смещение задается содержимым регистров SI или DI или BX или BP. Для сегмента стека SS внутрисегментное смещение задается содержимым регистра SP.
|