"Роберт Джордайн. Справочное пособие программиста - 2 (ассемблер, операционная система MS DOS)" - читать интересную книгу авторате [1.3.1] описано как это сделать с помощью функции 4AH прерыва-
ния 21H. Эта же функция может быть использована для расширения отведен- ной памяти. Поскольку программе отводится вся доступная память при загрузке, то такое расширение невозможно при старте. Если Вы попробуете сделать это, то будет установлен флаг переноса, в регистре AX появится код ошибки 8, а в регистре BX будет возвра- щено максимальное число доступных 16-байтных параграфов. Эта информация как раз и нужна. Значит надо выдать запрос со слишком большим значением в регистре BX ( скажем, F000H параграфов), а затем выполните прерывание. Позаботьтесь о том, чтобы выполнить эту функцию в самом начале программы, пока регистр ES еще имеет начальное значение. Высокий уровень. Интерпретатор Бейсика использует только 64K (хотя операторы PEEK и POKE позволяют доступ к памяти за пределами 64K). Доля памяти доступная в настоящий момент возвращается функцией FRE. Эта функция имеет фиктивный аргумент, который может быть числовым или символьной строкой. BYTES = FRE(x) передает в BYTES число свободных байтов. BYTES = FRE(x$) делает то же самое. Но строко- вый аргумент вынуждает очистку области данных перед тем как возв- ратить число байтов. Заметим, что если размер рабочей области устанавливается с помощью оператора CLEAR, то количество памяти, из-за потребностей рабочей области интерпретатора. Транслятор Бейсика не накладывает ограничение 64K на суммарный объем кода и данных. Но сам компилятор ограничен тем количеством памяти, которое он может использовать при компиляции. Если этого пространства недостаточно, то уничтожьте все ненужные номера строк при помощи ключа компиляции /N. Можно также использовать более короткие имена переменных. Средний уровень. Прерывание 12H BIOS проверяет установку переключателей и возв- ращает в AX количество килобайт памяти в системе. Эта величина вычисляется из установки регистров микросхемы 8255 или, для AT, микросхемы конфигурации/часов. Входных регистров нет. Имейте ввиду, что установка переключателей может быть неверной, что ограничивает достоверность такого подхода. Для определения числа 16-байтных параграфов, доступных для DOS, используйте функцию 4AH прерывания 21H. ES должен иметь то же значение, что при старте задачи: ;---определение числа параграфов доступных для DOS MOV AH,4AH ;указываем нужную функцию MOV BX,0FFFFH ;требуем слишком большую память INT 21H ;BX содержит число доступных параграфов |
|
|