Защищенный режим процессоров Intel

       

Переслать блок расширенной памяти


Регистры на входе: AH 87h CX Размер пересылаемого блока в словах. ES:SI Адрес таблицы GDT, подготовленной специальным образом. Регистры на выходе: CARRY = 0 Функция выполнилась без ошибки. AX 00h В случае ошибки: CARRY = 1 Произошла ошибка при пересылке блока. AH Код ошибки: 01h - ошибка чётности; 02h - произошло исключение; 03h - сбой адресной линии A20.

Перед вызовом этой функции необходимо подготовить GDT, состоящую из 6 дескрипторов. Два первых и два последних дескриптора должны содержать нули. Третий дескриптор должен указывать на начало области памяти, из которой будет выполняться копирование. Четвёртый дескриптор должен указывать на область памяти, в которую будет выполняться копирование блока данных.

В третьем и четвёртом дескрипторе необходимо заполнить поля предела для копируемого блока памяти (в них должно быть записано значение CX*2 - 1), и поле доступа (значение 93):

Таблица 6. GDT для пересылки блока памяти средствами BIOS.



Смещение байта Содержимое
00h - 0Fh Это поле должно содержать нули.
10h - 11h Предел сегмента (CX*2 -1).
12h - 14h 24-разрядный физический адрес исходного блока памяти.
15h Байт доступа, должен быть равен 93h.
16h - 17h Это поле должно содержать нули.
18h - 19h Предел сегмента (CX*2 -1).
1Ah - 1Ch 24-разрядный физический адрес результирующего блока памяти.
1Dh Байт доступа, должен быть равен 93h.
1Eh - 2Fh Это поле должно содержать нули.

Для пересылки блока функция 87h переводит процессор в защищённый режим, используя подготовленную таблицу GDT. Так как указываются 24-разрядные физические адреса исходного и результирующего блоков, возможна пересылка блоков из любого места памяти в любое место памяти. Размер блока, очевидно, ограничен 64 килобайтами.

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

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



Содержание раздела