Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
29-32.doc
Скачиваний:
10
Добавлен:
23.04.2019
Размер:
221 Кб
Скачать
☆

Функции работы с памятью.

Выделение:

Вход

  • AH = 48H

  • BX = запрошенное количество памяти в 16-байтовых параграфах

Выход

  • AX = код ошибки если CF установлен

  • BX = размер доступной памяти в параграфах (если памяти нехватает)

  • AX = сегментный адрес распределенного блока (если нет ошибок)

Описание:

распределяет блок памяти длиной BX параграфов, возвращая сегментный адрес этого блока в AX (блок начинается с AX:0000). если распределение неудачно, взводится Carry-флаг, в AX возвращается код ошибки, а BX содержит максимальный размер доступной для распределения памяти (в параграфах).

Чтобы определить наибольший доступный кусок, общепринято устанавливать BX=0ffffH перед вызовом. распределение завершится с ошибкой, возвратив размер максимального блока памяти в BX.

Замечание:

когда процесс получает управление через функцию 4bH EXEC, вся доступная память уже распределена ему.

Освобождение:

Вход

  • AH = 49H

  • ES = сегментный адрес (параграф) освобождаемого блока памяти

Выход

  • AX = код ошибки если CF установлен

Описание:

Освобождает блок памяти, начинающийся с адреса ES:0000. этот блок становится доступным для других запросов системы. Вообще говоря, вы должны освобождать лишь те блоки памяти, которые вы получили через функцию 48H распределить память. Родитель отвечает за освобождение памяти порожденных процессов. Тем не менее, ничто не препятствует вам освобождать память чужих проыессов.

Модификация позволяет расширять/сжимать блок памяти):

Вход

  • AH = 4aH

  • ES = сегмент распределенного блока памяти

  • BX = желаемый размер блока в 16-байтовых параграфах

Выход

  • AX = код ошибки если CF установлен

  • BX = наибольший доступный блок (если расширение неудачно)

Описание:

Изменяет размер существующего блока памяти. Когда программа получает управление, функция 4bH EXEC уже распределила блок памяти, начиная с PSP, который содержит всю доступную память. чтобы освободить память для запуска порождаемых процессов, блок памяти, начинающийся с PSP, необходимо сначала сжать.

Замечание:

функция 31H (KEEP) и INT 27H (TSR) сжимают блок по адресу PSP.

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