Глобальная таблица памяти
Процессор 8086 может иметь доступ до
1 MB оперативной паямти (ОЗУ - RAM).
Это ограничение связано с сегментной организацией памяти. Так как сегментные регистры
(
CS, SS, ES, DS) могут хранить максимальные значения
0FFFFh
и регистры смещения (
IP, BX, SI, DI, BP, SP) также могут хранить
максимальное значение
0FFFFh, то наибольший адрес памяти
может быть
FFFF:FFFF или физический адрес:
0FFFFh * 10h + 0FFFFh = 10FFEFh = 65535 * 16 + 65535 = 1114095 байтов
Современные процессоры имеют регистры большего размера, поэтому они
могут иметь доступ к горазо большему объему памяти, но принцип доступа
остается тем же самым.
Таблица памяти эмулятора (и типичного IBM PC):
Физический адрес в области памяти (шестнадцатиричный)
|
Краткое описание
|
00000 - 00400
|
Векторы прерываний. Эмулятор загружает файл "INT_VECT" в физический адрес 00000h.
|
00400 - 00500
|
Область системной информации. Мы используем маленькую хитрость
для установки некоторых параметров, загружая маленькую последнюю часть
(21 байт) файла "INT_VECT" в эту область (размер этого
файла 1045 или 415h байтов, поэтому загруженный файл занимает
память от 00000 to 00415h).
Этот блок памяти модернизируется эмулятором, если конфигурация
изменяется (см. Область системной информации).
|
00500 - A0000
|
Свободная область памяти. Блок размером 654080 байтов. Сюда вы можете загрузить свою программу.
|
A0000 - B1000
|
Видеопамять для VGA, Monochrome и других адаптеров.
Не используется эмулятором!
|
B1000 - B8000
|
Зарезервировано.
Не используется эмулятором!
|
B8000 - C0000
|
32 KB видеопамяти для Color Graphics Adapter (CGA).
Эмулятор использует эту область памяти для хранения 8-ми страниц
видеопамяти. Размер экрана эмулятора может быть изменен, тогда
для каждой страницы будет требоваться меньше памяти. Хотя эмулятор
всегда использует 1000h (4096 байтов) для каждой страницы (см. INT 10h / AH=05h в
списке поддерживаемых прерываний).
|
C0000 - F4000
|
Зарезервировано.
|
F4000 - 10FFEF
|
ROM BIOS и расширения. Эмулятор загружает файл "BIOS_ROM"
в физический адрес 0F4000h. Таблица прерываний указана в этой области
памяти для получения эмуляции функций прерываний.
|
Векторы прерываний (память от 00000h до 00400h)
Номер Адрес в таблице Адрес подпрограммы
прерывания векторов прерываний BIOS
(hex)
00 00x4 = 00 F400:0170 - генерируется процессором,
ошибка деления.
04 04x4 = 10 F400:0180 - генерируется процессором,
обнаружение
переполнения INTO.
10 10x4 = 40 F400:0190 - Видеофункции.
11 11x4 = 44 F400:01D0 - Получение списка
оборудования BIOS.
12 12x4 = 48 F400:01A0 - Получение размера памяти.
13 13x4 = 4C F400:01B0 - Дисковые функции.
15 15x4 = 54 F400:01E0 - Функции BIOS.
16 16x4 = 58 F400:01C0 - Функции клавиатуры.
19 19x4 = 64 FFFF:0000 - Перезагрузка.
1A 1Ax4 = 68 F400:0160 - Функции времени.
1E 1Ex4 = 78 F400:AFC7 - Вектор параметров дискеты.
20 20x4 = 80 F400:0150 - Функция DOS:
завершение программы.
21 21x4 = 84 F400:0200 - Функция DOS.
все другие ??x4 = ?? F400:0100 - Перехватчик прерывания по умолчанию.
Печатает сообщение
"Interupt not supported yet"
("Прерывание не поддерживается").
Вызов подсистемы BIOS дизассемблируется при
"BIOS DI" (он не использует регистр DI каким-либо способом,
это только способ декодирования: мы используем
"FF /7" для такого декодирования, "FFFFCD10" используется,
чтобы эмулятор мог эмулировать прерывание 10h).
F400:0100 имеет этот код FFFFCDFF (декодированный как INT 255,
и генерируется сообщение об ошибке).
|
Область системной информации (память от 00400h до 00500h)
Адрес (hex) | Размер | Описание |
0040h:0010 | слово |
Список оборудования BIOS.
Состояние битов зависит от обнаруженного BIOS оборудования:
Бит(ы) Описание
15-14 количество параллельных портов.
13 не поддерживается.
12 игровой порт установлен.
11-9 количество последовательных портов.
8 зарезервировано.
7-6 количество дисководов (минус 1):
00 один дисковод;
01 два дисковода;
10 три дисковода;
11 четыре дисковода.
5-4 видеорежим:
00 EGA,VGA,PGA, или другой встроенный видео BIOS;
01 40x25 CGA цветной;
10 80x25 CGA цветной (по умолчанию в эмуляторе);
11 80x25 монохромный текстовый.
3 не поддерживается.
2 не поддерживается.
1 математический сопроцессор установлен.
0 установлен, если загрузка происходит с дискеты
(всегда установлен в эмуляторе).
Это слово также возвращается в AX прерыванием INT 11h.
Значение по умолчанию: 0021h или 0000 0000 0010 0001b
|
0040h:0013 | слово |
Общая память (в килобайтах) начиная от абсолютного
адреса 00000h.
Это слово также возвращается в AX прерыванием INT 12h.
Это значение установлено: 0280h (640KB).
|
0040h:004A | слово |
Количество столбцов на экране.
Значение по умолчанию: 0032h (50 столбцов).
|
0040h:004E | слово |
Начальный адрес текущей видеостраницы в видеопамяти (после 0B800:0000).
Значени по умолчанию: 0000h.
|
0040h:0050 | 8 слов |
Содержит позицию курсора (горизонтальную и вертикальную координаты)
на каждой из 8-ми страниц.
Значение по умолчанию: 0000h (для всех 8-ми слов).
|
0040h:0062 | байт |
Номер текущей видеостраницы.
Значение по умолчанию: 00h (1-я страница).
|
0040h:0084 | байт |
Количество строк на экране минус 1.
Значение по умолчанию: 13h (19+1=20 строк).
|
См. также:
Пользовательская таблица памяти