Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Dos7book

.pdf
Скачиваний:
76
Добавлен:
09.02.2015
Размер:
5.1 Mб
Скачать

Приложение А.11: Спецификации оборудования компьютера

Примечание 3: регистр флагов позволяет грубо идентифицировать тип процессора. Невозможность сбросить флаг 0Fh в нуль признак древних процессоров 8086. Невозможность установить в единицу бит 0Eh регистра флагов признак 16-разрядных процессоров. Если процессор допускает запись в бит 0Eh, то он 32-разрядный и имеет регистр EFLAGS, а в нем бит 15h подскажет, способен ли данный

процессор выдать таблицу своих параметров в ответ на команду

CPUID (ее код 0F A2).

Примечание 4: EFLAGS – это старшие биты 32-разрядного регистра флагов. В реальном режиме доступ к ним обеспечивают команды PUSHF и POPF с префиксом 66h, как показано в разделе 7.02-06.

Примечание 5: установление режима V86 командой POPF невозможно (блокировано). Установить режим V86 из стека можно только в защищенном режиме командой IRET, когда битом 6 в байте 06h сегментного дескриптора (A.12-2) включена 32-разрядная адресация.

Примечание 6: здесь имеется ввиду выравнивание размещения операндов по адресам, кратным числу байтов в формате этих операндов.

Контроль выравнивания производится только на третьем уровне привилегий при работе в защищенном режиме (подробнее в примечании к 8.01-42). Бит 12h в регистре CR0 разрешает генерацию исключения, даже если она не разрешена битом 12h в регистре EFLAGS.

Примечание 7: управляющие регистры доступны посредством команды MOV (примечание 1 к 7.03-58). Кроме того, возможно считывание состояния регистра CR0 прерыванием INT 67\AX=DE07h (8.03-72).

Примечание 8: бит 10h служит для защиты сегментов пользовательских программ от записи со стороны операционной системы, действующей на более высоком уровне привилегий.

Примечание 9: 20 старших бит регистра CR3 хранят базовый адрес таблицы каталога страниц. Этот базовый адрес должен быть кратен размеру страницы (обычно 4 кб). Запись в регистр CR3 вызывает обновление данных в буфере TLB процессора, необходимое после внесения каждого изменения в таблицы страничной переадресации.

A.11-5 Отладочные регистры центрального процессора.

Современные процессоры, начиная с модели 80386, содержат отладочные регистры DR0 – DR7. Эти регистры позволяют аппаратно вызывать прерывание INT 01 (8.01-02) при обращениях к портам или к заранее указанным адресам памяти, в том числе при обращениях к данным и к незаписываемым носителям, на которых расставить контрольные точки нельзя. Для доступа к отладочным

– 659 –

Приложение А.11: Спецификации оборудования компьютера

регистрам можно использовать INT 67\AX=DE08h-DE09h (8.03-73), а также команду MOV (примечание 1 к 7.03-58).

Регистры DR0 – DR3 служат для записи 32-разрядных абсолютных линейных адресов назначаемых точек прерывания. Регистр DR7 определяет условия вызова прерывания INT 01. Регистр DR6 выделен для фиксации обстоятельств, при которых процессор вызвал прерывание исполнения (программные и внешние прерывания в регистре DR6 не отмечаются). Назначение отдельных битов в регистрах DR6 и DR7 показано в приведенной ниже таблице.

Регистр

Бит

Назначение

Примечания

DR6

00h

Доступ к адресу, записанному в DR0

*1

DR6

01h

Доступ к адресу, записанному в DR1

*1

DR6

02h

Доступ к адресу, записанному в DR2

*1

DR6

03h

Доступ к адресу, записанному в DR3

*1

DR6

0Dh

Зарегистрирована попытка доступа

*1

DR6

0Eh

Доступ при пошаговом исполнении

*1

DR6

0Fh

Доступ при переключении задач

*1

DR7

00h

2-битовое поле разрешения для DR0

*2

DR7

02h

2-битовое поле разрешения для DR1

*2

DR7

04h

2-битовое поле разрешения для DR2

*2

DR7

06h

2-битовое поле разрешения для DR3

*2

DR7

0Dh

Бит запрета генерации исключения

*3

DR7

10h

4-битовое поле управления для DR0

*4

DR7

14h

4-битовое поле управления для DR1

*4

DR7

18h

4-битовое поле управления для DR2

*4

DR7

1Ch

4-битовое поле управления для DR3

*4

Примечание 1: биты 1 – 3 регистра DR6 фиксируют акты обращения по адресам, заданным регистрами DR0 – DR3, даже когда генерация исключения INT 01 не разрешена битом 0Dh в регистре DR7, а также битом 10h в регистре EFLAGS (A.11-4). Бит 0Eh в регистре DR6 фиксирует состояние флага пошагового исполнения в момент обращения, а бит 0Fh – состояние флага переключения задач. Установленное состояние бита 0Dh в регистре DR6 напоминает о том, что процессор еще не генерировал исключение INT 01, хотя акт обращения уже зафиксирован (генерация исключения сбрасывает бит 0Dh в нуль).

Примечание 2: оба бита в этом 2-битовом поле разрешают регистрацию попыток доступа, но первый из них действует локально и сбрасывается при каждом переключении задачи. А второй бит действует глобально и позволяет регистрировать события, даже если они не связаны с исполнением текущей задачи.

– 660 –

Приложение А.11: Спецификации оборудования компьютера

Примечание 3: бит 0Dh в регистре DR7 запрещает не регистрацию попыток доступа, а генерацию исключения INT 01 при регистрации попыток доступа. Изменить состояние бита 0Dh в регистре DR7 можно только на высшем (нулевом) уровне привилегий или при работе в реальном режиме.

Примечание 4: первая пара битов в каждом поле управления определяет цель тех попыток доступа, которые следует регистрировать:

00 – обращение к команде для ее исполнения

01 – только запись данных в память

10 – обращение к порту (для процессоров Pentium+)

11 – обращения для записи или чтения данных.

Вторая пара битов в поле управления определяет размер зоны адресов (байт, слово или двойное слово), в пределах которой

обращение к любому байту будет считаться регистрируемым событием.

A.12 Управление выделением и обслуживанием памяти

A.12-1 Карта распределения областей памяти

Приводимая ниже таблица показывает общие особенности функционального распределения областей памяти до 1 Мбайт, типичные для AT-совместимых компьютеров при их работе под управлением DOS. В каждом конкретном

компьютере распределение областей памяти может несколько отличаться от показанного здесь, так как оно зависит и от версии BIOS, и от настроек BIOS Setup, и от конфигурации загрузки компьютера.

Адрес

Длина

Содержание

0000:0000

400h

Таблица прерываний реального режима

0000:0074

4

Адрес таблицы состояний видеорегистров

0000:0078

4

Адрес параметров флоппи-дисковода (A.08-2)

0000:007C

4

Адрес знаков 80-FFh графического шрифта 8x8

0000:0104

4

Адрес таблицы 1-го жесткого диска (A.13-1)

0000:010C

4

Адрес графического шрифта (8.01-30)

0000:0118

4

Адрес таблицы 2-го жесткого диска (A.13-1)

0040:0000

100h

Область данных BIOS (A.01-1)

0050:0000

1

Статус принтера для INT 05 (8.01-06)

0050:0004

1

Выбор флоппи-дисковода (A: или B:)

0050:0040

BCh

Адреса обработчиков прерываний (примечание 6)

– 661 –

Приложение А.12: Управление выделением и обслуживанием памяти

Продолжение таблицы А.12-1

0000:7C00

200h

Область исполнения загрузочных записей

9000:FFFF

Граница "обыкновенной" памяти (примечание 1)

A000:0000

10000h

Окно доступа к видеопамяти (примечание 2)

B000:0000

10000h

Окно доступа к видеопамяти (примечание 2)

B800:0000

8000h

Видеобуфер для текстовых видеорежимов EGA+

C000:0000

8000h

Область видео-BIOS видеокарт (примечание 3)

C000:0070

7

Сигнатура "EXTMODE" (= поддержка SVGA)

C800:0000

4000h

Область BIOS жестких магнитных дисков

D000:0000

10000h

Область блоков UMB (5.04-04, 5.04-02)

E000:0000

10000h

Кадр страниц доступа к расширенной памяти

F000:0000

FFFFh

Область кодов BIOS компьютера (примечание 3)

F000:FFF0

Точка входа в программу загрузки (примечание 4)

F000:FFF5

8

Дата разработки системы BIOS

F000:FFFD

1

Контрольная сумма кода системы BIOS

F000:FFFE

1

Код модели компьютера

FFFF:0010

FFEFh

Область верхней памяти (примечание 5)

Примечание 1: граница 640 кбайт для "обыкновенной" памяти задается аппаратно

микросхемой контроллера динамической памяти в составе комплекта микросхем (чипсета) материнской платы. За этой границей 384 кбайт адресного пространства резервированы для видеопамяти и для микросхем постоянной памяти с "прошивками" кодов BIOS. Свободные участки адресного пространства в

резервированной области обычно бывают доступны в защищенном режиме благодаря механизму страничной переадресации в центральном процессоре.

Примечание 2: область адресов A000:0000h – B000:FFFFh предоставлена видеопамяти и может быть использована по-разному в зависимости от видеорежима (A.10-1). SVGA BIOS современных видеокарт организует в этой области одно или два "скользящих" окна доступа к обширной памяти видеокарты (подробнее в 8.01-39).

Примечание 3: через одни и те же участки адресного пространства может осуществляться доступ как непосредственно к кодам BIOS и видео-BIOS в микросхемах постоянной памяти, так и к их копиям в более быстродействующей оперативной памяти. Выбор того или

другого варианта определяется установками параметров "shadowing" для соответствующих участков адресного пространства в программе BIOS Setup.

Примечание 4: адрес F000:FFF0h точки входа аппаратно обусловлен тем, что

процессоры при включении электропитания устанавливают свои адресные шины в начальное состояние FFFF0h. Дальнейший ход

– 662 –

Приложение А.12: Управление выделением и обслуживанием памяти

процесса загрузки зависит от значения байта 0Fh в CMOS RAM (примечание 1 к A.14-1) системы BIOS:

00h – обычная загрузка с тестом POST;

04h – загрузка посредством вызова INT 19 (8.01-90)

05h – сброс и переход по адресу в ячейке [0040:0067h] (A.01-1) 0Ah – переход по адресу в ячейке [0040:0067h] (A.01-1)

В отличие от первичной загрузки, при перезагрузке режим теста POST еще зависит от слова по адресу 0040:0072h (примечание 1 к A.01-1). Варианты 05h и 0Ah имеют смысл только при перезагрузке и различаются, в частности, установлением в начальное состояние контроллера прерываний.

Примечание 5: обращение к верхней памяти происходит тогда, когда при

суммировании сегментного адреса со смещением образуется бит переноса, направляемый в линию A20 шины адреса. Область верхней памяти доступна в реальном режиме, но для пользования ею необходимо установить драйвер HIMEM.SYS (5.04-01), осуществляющий оперативное управление коммутацией линии A20.

Примечание 6: в области 0050:0040 – 0050:00FB MS-DOS7 сохраняет копии избранных адресов обработчиков прерываний (INT 00 – INT 1F, INT 40 – INT 43, INT 46, INT 70 – INT 77), подготовленных системой BIOS для последующей загрузки операционной системы.

В основной таблице прерываний эти адреса могут быть замещены адресами других обработчиков, устанавливаемых позже драйверами, резидентными программами или самой MS-DOS7.

A.12-2 Дескрипторы сегментного доступа.

Сегментная адресация в защищенном режиме осуществляется посредством дескрипторов, в которых содержатся сведения об адресах сегментов, об их размерах и о правах доступа к ним. К моменту вызова процедур перехода в защищенный режим "глобальная" таблица дескрипторов сегментного доступа (GDT) должна быть составлена хотя бы частично. Готовить ее нужно заранее, пока процессор еще работает в реальном режиме. Состав помещаемых в таблицу дескрипторов, их

количество и порядок их расположения определяются требованиями той процедуры, которая будет использовать таблицу.

Примеры таблиц GDT для разных процедур приведены в разделах 8.01-76, 8.01-78 и 9.10-01. Общим для всех таблиц GDT является то, что первый дескриптор в них должен быть заполнен нулями: он служит принимаемым по умолчанию шаблоном для дескрипторов не запрошенных сегментов и страниц памяти. Все дескрипторы сегментного доступа имеют одинаковую структуру, показанную в приведенной ниже таблице.

– 663 –

Приложение А.12: Управление выделением и обслуживанием памяти

Смещение

Длина

Содержание

00h

2

2 байта от размера сегмента, начиная с младшего

02h

3

3 байта от адреса сегмента, начиная с младшего

05h

1

Байт прав доступа (примечание 2):

 

 

бит 0: = 0

обращений к сегменту еще не было

 

 

 

= 1

доступ к сегменту произошел

 

 

бит 1: = 0

чтение данных или исполнение кода

 

 

 

= 1

запись данных или чтение кода

 

 

бит 2:– направление расширения (примечание 3)

 

 

бит 3: = 0

сегмент содержит данные

 

 

 

= 1

сегмент содержит исполняемый код

 

 

бит 4: = 0

маркер системных дескрипторов

 

 

 

= 1

маркер дескрипторов программ

 

 

биты

= 00 – высший уровень привилегий

 

 

5-6

= 11 – низший уровень привилегий

 

 

бит 7: = 0

сегмент надо подкачивать с диска

 

 

 

= 1

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

06h

1

Биты 0 – 3: старшие 4 бита от размера сегмента

 

 

бит 4: – свободный бит (примечание 4)

 

 

бит 5: = 0

(резервирован)

 

 

бит 6: – бит разрядности (примечание 5):

 

 

 

= 0

16-битовые адресация и операнды

 

 

 

= 1

32-битовые адресация и операнды

 

 

бит 7: – бит гранулярности:

 

 

 

= 0

размер сегмента в байтах

 

 

 

= 1

размер в единицах по 4К байт

07h

1

Старший байт адреса сегмента

Примечание 1: байты 06h и 07h в составе дескриптора принимаются во внимание процессорами не древнее модели 80386. Байты 06h и 07h следует обнулять, если программа должна сохранять работоспособность на процессорах 80286. Кроме того, нулевые значения байтов 06h и 07h являются отличительным признаком 16-разрядных программ защищенного режима, обеспечивающим их правильное исполнение на 32-разрядных процессорах.

Примечание 2: интерпретация бит 0 – 3 в байте прав доступа зависит от бита 4. Здесь показана интерпретация этих битов для дескрипторов, относящихся к пользовательским программам, включая сегменты данных и сегменты исполняемого кода. В системных дескрипторах биты 0 – 3 выражают 16 видов функций данного дескриптора.

– 664 –

Приложение А.12: Управление выделением и обслуживанием памяти

Примечание 3: интерпретация бита 2 в байте прав доступа зависит от бита 3. Для сегментов кода нулевое значение бита 2 означает, что исполнять этот код разрешено только программам, которые имеют тот же уровень привилегий (иначе право на исполнение кода имеют также программы с более высоким уровнем привилегий). Для сегментов данных нулевое значение бита 2 означает обычное направление расширения вверх, а единичное значение направление расширения вниз (используемое, в частности, в сегменте стека).

Примечание 4: бит 4 в байте 06h предоставлен в распоряжение программистов. В

дескрипторах страниц его используют как метку запрета переопределения, например, при отображении в память адресного пространства ввода-вывода.

Примечание 5: как разрядность адресации, так и разрядность операндов определяются состоянием бита разрядности 6 в байте 06h дескриптора сегмента кода. В системных сегментах биты 4 – 6 байта 06h должны быть обнулены.

A.12-3 Избранные функции XMS-драйвера HIMEM.SYS

Перед тем, как обращаться к функциям драйвера HIMEM.SYS (5.04-01), необходимо выполнить две операции. Во-первых, нужно с помощью

INT 2F\AX=4300h (8.03-22) убедиться, что драйвер HIMEM.SYS установлен.

Во-вторых, нужно с помощью INT 2F\AX=4310h (8.03-23) найти указатель на точку входа в исполнительную программу XMS-драйвера. Возвращаемый указатель будет служить адресом дальнего перехода (CALL FAR, 7.03-08), посредством которого осуществляется вызов функций XMS-драйвера. Запрашиваемые функции определяются значениями в регистре AH в момент вызова, эти значения показаны в первой колонке приведенной ниже таблицы. Для многих функций дополнительные данные передаются через регистр DX; его роль показана во второй колонке таблицы. Возвращаемое содержимое регистра AX показано в четвертой колонке. Большая часть функций XMS-драйвера возвращает в регистре AX слово статуса, причем статус AX=0001h означает успешное завершение, а статус AX=0000h означает ошибку. В случае ошибки почти все функции (кроме AH=00h) возвращают в регистре BL код ошибки, показанный в таблице A.06-1, а две функции – AH=08h и AH=88h – возвращают код ошибки в регистре BL всегда.

AH

DX при

Функция

AX при

Приме-

вызове

возврате

чания

 

 

00h

 

Сообщить версию XMS

Версия

*1

05h

 

Включить адресную шину A20

Статус

 

06h

 

Выключить адресную шину A20

Статус

 

08h

 

Наибольший свободный блок

Размер

*2

 

 

– 665 –

 

 

Приложение А.12: Управление выделением и обслуживанием памяти

Продолжение таблицы A.12-3

 

 

 

09h

Размер

Выделить блок XMS-памяти

Статус

*3

 

0Ah

Ссылка

Освободить блок XMS-памяти

Статус

 

 

0Bh

 

Копирование в XMS-памяти

Статус

A.12-4

 

0Ch

Ссылка

Закрыть блок XMS-памяти

Статус

*4

 

0Dh

Ссылка

Раскрыть блок XMS-памяти

Статус

 

 

0Eh

Ссылка

Получить сведения о ссылке

Статус

*5

 

0Fh

Ссылка

Изменить размер блока XMS

Статус

*6

 

10h

Размер

Выделить блок UMB

Статус

*7,*8

 

11h

Адрес

Высвободить блок UMB

Статус

*7

 

12h

Адрес

Изменить размер блока UMB

Статус

*7,*8

 

88h

 

Наибольший свободный блок

Размер

*2,*9

 

89h

Размер

Выделить блок XMS-памяти

Статус

*3,*9

 

8Eh

Ссылка

Получить сведения о ссылке

Статус

*5,*9

 

8Fh

Ссылка

Изменить размер блока XMS

Статус

*6,*9

Примечание 1: в регистре DX возвращается статус области HMA: DX=0001h означает, что область HMA используется, а DX=0000h – что область HMA не задействована.

Примечание 2: функция 08h при вызове требует BL=00h, размер свободной XMS-памяти (в килобайтах) она возвращает в регистре DX, а в регистре AX возвращает размер наибольшего свободного блока. Функция 88h делает то же самое, но возвращает результаты в 32-разрядных регистрах EDX и EAX. Помимо того, функция 88h возвращает в регистре ECX наибольший физический адрес, соответствующий доступному байту XMS-памяти.

Примечание 3: функции 09h и 89h принимают запрашиваемый размер XMS блока в килобайтах, но функция 09h принимает его из регистра DX, а функция 89h – из 32-битного регистра EDX. Обе эти функции возвращают номерную ссылку на выделенный блок в регистре DX.

Примечание 4: в случае успеха в регистрах DX:BX возвращается 32-битный физический адрес блока памяти, доступ к которому был закрыт.

Примечание 5: функция 0Eh возвращает в регистре BH содержимое счетчика актов закрытия данного блока, в регистре BL – число свободных номерных ссылок, в регистре DX – размер блока памяти (в килобайтах), доступ к которому обеспечивает запрошенная номерная ссылка. Функция 8Eh делает то же самое, но возвращает число свободных номерных ссылок в регистре CX, а размер блока памяти в 32-разрядном регистре EDX.

Примечание 6: функция 0Fh, переопределяющая размер выделенного блока XMS-памяти, принимает запрашиваемое значение (в килобайтах) из регистра BX. Функция 8Fh делает то же самое, но принимает

– 666 –

Приложение А.12: Управление выделением и обслуживанием памяти

новый размер блока из 32-разрядного регистра EBX. При этом переопределяемый блок XMS-памяти не должен быть закрыт.

Примечание 7: чтобы реализовать функции 10h – 12h путем табличной переадресации, их исполнение (начиная с процессора i80386) передано драйверу EMM386.EXE (5.04-02), который организует

переадресацию и перехватывает адрес прямого вызова HIMEM.SYS. Исполнение функций 10h – 12h без перехода в защищенный режим обеспечивает драйвер UMBPCI.SYS (5.04-04).

Примечание 8: функции 10h и 12h "понимают" запрашиваемый размер UMB-блока

в16-байтовых единицах (параграфах). Функция 12h, изменяющая размер блока, принимает запрашиваемый размер из регистра BX. Функция 10h при успешном завершении возвращает сегментный адрес выделенного UMB-блока в регистре BX, а фактический размер выделенного UMB-блока в регистре DX. В случае неудачи, отмечаемой значением AX = 0000h, функции 10h и 12h возвращают

врегистре DX размер наибольшего имеющегося UMB-блока.

Примечание 9: в отличие от функций 0xh, функции 8xh требуют драйвера HIMEM.SYS версии не ниже 3.07 и не могут быть выполнены на устаревших 16-разрядных процессорах.

A.12-4 Блок данных запроса на копирование в XMS-памяти

Указатель на этот блок данных должен быть в регистрах DS:SI при вызове функции AH = 0Bh (A.12-3) XMS-драйвера HIMEM.SYS (5.04-01). Функция AH = 0Bh копирует группу байтов из одного блока XMS-памяти (блока-источника) в другой блок XMS-памяти блок назначения.

Смещение

Длина

Содержание

00h

4

Число копируемых байтов (обязательно четное)

04h

2

Номерная ссылка на блок-источник

06h

4

Начальное смещение в блоке-источнике

0Ah

2

Номерная ссылка на блок назначения

0Ch

4

Начальное смещение в блоке назначения

Примечание 1: если блоки источника и назначения перекрываются, то правильно исполняется только копирование вперед, то есть когда базовый адрес источника меньше, чем базовый адрес назначения.

Примечание 2: если вместо любой из номерных ссылок указано значение 0000h, то

соответствующее четырехбайтовое значение начального смещения интерпретируется как указатель (сегмент : смещение) на блок в обыкновенной памяти в пределах до 1 Мегабайта.

– 667 –

Приложение А.12: Управление выделением и обслуживанием памяти

A.12-5 Дескриптор запроса на копирование в EMS-памяти

Этот дескриптор служит для спецификации блоков источника и назначения в операциях копирования и обмена INT 67\AX=5700h-5701h (8.03-69), выполняемых драйвером EMM386.EXE (5.04-02). Как блок источника, так и блок назначения могут принадлежать страницам EMS-памяти или находиться в обыкновенной памяти. В последнем случае расположение определяется не номером EMS-страницы, а сегментным адресом блока, причем вместо соответствующей номерной ссылки должно быть указано значение 0000h.

Смещение

Длина

Содержание

00h

4

Длина запрашиваемого блока в байтах

04h

1

= 00h: источник в обыкновенной памяти

 

 

= 01h: источник на EMS-странице

05h

2

Номерная ссылка на источник или значение 0000h,

 

 

если источник в обыкновенной памяти

07h

2

Смещение начала блока-источника на EMS-

 

 

странице или относительно сегментного адреса

09h

2

Номер логической EMS-страницы источника или

 

 

его сегментный адрес в обыкновенной памяти

0Bh

1

= 00h: блок назначения в обыкновенной памяти

 

 

= 01h: блок назначения на EMS-странице

0Ch

2

Номерная ссылка на блок назначения или значение

 

 

0000h, если этот блок в обыкновенной памяти

0Eh

2

Смещение начала блока назначения на EMS-

 

 

странице или относительно сегментного адреса

10h

2

Номер EMS-страницы блока назначения или его

 

 

сегментный адрес в обыкновенной памяти

Примечание 1: допускается взаимное перекрытие блоков источника и назначения при операции копирования, но в таком случае только одно направление копирования позволяет избежать потери данных.

A.12-6. Блок данных для запроса на переход в EMS-памяти.

Показанный ниже блок данных служит для спецификации параметров вызова подпрограммы в операции INT 67\AH=56h (8.03-68), выполняемой драйвером

EMM386.EXE (5.04-02). В операции дальнего перехода INT 67\AH=55h (8.03-68)

используется только часть показанного ниже блока до смещения 09h.

– 668 –

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]