В информатике, карта памяти представляет собой структуру данных (которые, как правило, находится в самой памяти), что указывает на то, как память выложена. Термин «карта памяти» может иметь разные значения в разных контекстах.
BIOS для персонального компьютера IBM и совместимых устройств предоставляет набор процедур, которые могут использоваться операционной системой или приложениями для получения структуры памяти. Некоторые из доступных процедур:
Функция BIOS: INT 0x15, AX = 0xE801:
Этот вызов прерывания BIOS используется для получения объема памяти для конфигураций 64 МБ +. Поддерживается версиями AMI BIOS от 23 августа 1994 г. или более поздних версий. Вызывающий устанавливает AX в 0xE801, затем выполняет int 0x15. Если произошла какая-то ошибка, процедура возвращается с CF (флаг переноса), установленным в 1. Если ошибок нет, процедура возвращается с CF очищенным, а состояние регистров описывается следующим образом:
регистр | Описание значения |
---|---|
EAX | Расширенная память от 1 до 16 МБ в КБ. (Максимальное значение: 0x3C00 = 15360 КБ). |
EBX | Количество блоков размером 64К больше 16М. |
ECX | Настроенная память от 1 МБ до 16 МБ в КБ. |
EDX | Количество сконфигурированных блоков размером 64К больше 16М. |
Функция BIOS: INT 0x15, AX = 0xE820 - ПОЛУЧИТЬ КАРТУ СИСТЕМНОЙ ПАМЯТИ:
Вход:
регистр | Описание значения |
---|---|
EAX | 0x0000E820 |
EBX | Значение продолжения или 0x0, чтобы начать с начала карты. |
ECX | Размер буфера для результата (20 байт). |
EDX | 0x534D4150 (ASCII для SMAP) |
ES: DI | сегмент: расположение смещения буфера для результата. |
Структура буфера SMAP:
Компенсировать | Размер | Описание значения |
---|---|---|
0 | QWORD (8 байт) | Базовый адрес области карты памяти, на которую ссылается EBX. |
8 | QWORD (8 байт) | Длина в байтах. |
16 | DWORD (4 байта) | Тип диапазона адресов. |
Как используется: операционная система должна выделить буфер SMAP в памяти (20-байтовый буфер). Затем установите регистры, как указано в таблице «Входные данные». При первом вызове EBX должен быть установлен в 0. Следующим шагом будет вызов INT 0x15. Если ошибок нет, вызов прерывания возвращается с очисткой CF и заполнением буфера данными, представляющими первую область карты памяти. EBX обновляется BIOS, поэтому, когда ОС снова вызывает подпрограмму, следующая область возвращается в буфере. BIOS устанавливает EBX в ноль, если все сделано.