Оперативная память

         

Функции DOS



Функции DOS

По запросам прикладных программ DOS выполняет несколько функций, связанных с распределением оперативной памяти. Нас будут интересовать только три из них.

Все обращения к DOS происходят через прерывание int 2ih, при этом код запрашиваемой функции указывается в регистре ah, а входные и выходные параметры располагаются в регистрах общего назначения и иногда в сегментных регистрах ds или es.

Функция 48h Allocate Memory выделяет запрашиваемое пространство памяти. Требуемый размер памяти, выраженный в параграфах, указывается в регистре bx. Если такое пространство существует, то при возврате из DOS признак переполнения отсутствует, содержимое bx не изменяется, а в ах находится код сегмента, с которого начинается выделенное пространство памяти. Если свободное пространство нужного размера отсутствует, то при возврате из DOS вырабатывается признак переполнения (устанавливается в 1 С-разряд регистра флагов).

Функция 49h Free Allocated Memory Block открепляет выделенный ранее для задачи блок памяти, после этого задача не может с ним работать. Код сегмента, начиная с которого расположен освобождаемый блок, помещается в регистр es, размер блока указывать не требуется, т. к. DOS хранит его в своей области данных. Если функция выполнена успешно, т. е. блок освобожден, то при возврате из DOS признак переполнения отсутствует. Если он установлен, то наиболее вероятно, что в регистре es был неверно указан сегмент блока.

Функция 4Ah shrink or Expand a Memory Block урезает или расширяет суще-ствующий блок памяти. Код сегмента, начиная с которого расположен изменяемый блок, указывается в регистре es, а новый размер блока — в регистре bx. Если функция выполнена успешно, т. е. размер указанного блока изменен, то при возврате из DOS признак переполнения отсутствует. Если он установлен, то блок не может быть расширен или сокращен. В этом случае в регистре bx возвращается наибольший (последний) доступный блок памяти.



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