Создание операционной системы на ассемблере

         

Определение количества памяти через BIOS.


Ну, начнем с исторических функций.
Давным-давно, когда даже Билл Гейтс говорил что 640 килобайт хватит всем, но не у всех были эти 640 килобайт. :) в биосах существовала функция определения количества базовой памяти.

int 12h

Выходные параметры:

  • ax - размер базовой памяти в килобайтах.

Сейчас уже вряд ли кому придет в голову, что базовой памяти может быть меньше 640 килобайт. но мало ли... ;)

Появлялись новые процессоры, и размеры памяти стали расти. в связи с чем появилась функция определения количества расширенной памяти.

int 15h fn 88h

Входные параметры:

  • ah = 88h
Выходные параметры:



  • ax - размер расширенной памяти в килобайтах.

Возможно из за архитектуры 286-х процессоров (которым размер шины адреса не позволяет иметь больше чем 16 мегабайт памяти) эта функция часто имеет аналогичное ограничение и результат в ax не может превышать 3с00h (Что составляет 15Мб).

Но, опять таки, появились новые процессоры. 16 мегабайт стало мало. Вследствие этого появилась еще одна функция BIOS:

int 15h fn e801h

Входные параметры:

  • ax = e801h.
Выходные параметры:

  • ax - размер расширенной памяти в килобайтах до 16Mb;
  • bx - размер расширенной памяти в блоках по 64к свыше 16Мб;
  • cx - размер сконфигурированный расширенной памяти в килобайтах до 16Mb;
  • dx - размер сконфигурированной расширенной памяти в блоках по 64к свыше 16Мб.

Не знаю, что означает сконфигурированная память. Так написано в описании.

Здесь производители BIOS видимо оказались неединодушны. Некоторые версии в ax и bx возвращают 0, это значит что размер памяти следует определять из cx, dx.

Но видимо и 4 гигабайт оказалось мало. В новых BIOS появилась еще одна функция.

int 15h fn e820h

Входные параметры:

  • eax = e820h;
  • edx = 534d4150h ('SMAP');
  • ebx - смещение от начала карты памяти;
  • eсx - Размер буфера;
  • es:di - Адрес буфера для размещения карты памяти.
Выходные параметры:

  • eax - 534d4150h ('SMAP');
  • ebx - следующее смещение от начала карты памяти, если = 0, то вся карта передана;
  • ecx - Количество возвращенных байт;
  • буфер заполнен информацией;


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