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

         

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


Регистры на входе: 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 - 14h24-разрядный физический адрес исходного блока памяти.
15hБайт доступа, должен быть равен 93h.
16h - 17hЭто поле должно содержать нули.
18h - 19hПредел сегмента (CX*2 -1).
1Ah - 1Ch24-разрядный физический адрес результирующего блока памяти.
1DhБайт доступа, должен быть равен 93h.
1Eh - 2FhЭто поле должно содержать нули.

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

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

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

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