"Роберт Джордайн. Справочное пособие программиста - 2 (ассемблер, операционная система MS DOS)" - читать интересную книгу автора


Смещение Размер поля Значение

0H DW номер функции DOS завершения программы
2H DW размер памяти в параграфах
4H DW резерв
6H DD длинный вызов функции диспатчера DOS
AH DD адрес завершения (IP,CS)
EH DD адрес выхода по Ctrl-Break (IP,CS)
12H DD адрес выхода по критической ошибке
16H 22 байта резерв
2CH DW номер параграфа строки среды
2EH 46 байтов резерв
5CH 16 байтов область параметров 1 (формат FCB)
6CH 20 байтов область параметров 2 (формат FCB)
80H 128 байтов область DTA по умолчанию/получает
командную строку программы


.h3 1.3.1 Манипуляции с памятью.
--------------------------------

Когда MS DOS загружает программу, то она помещается в младшую
область памяти, сразу же за COMMAND.COM и установленными драйве-
рами устройств или другими утилитами, которые резидентны в памя-
ти. В этот момент времени вся память за программой отведена этой
программе. Если программе нужна память для создания области дан-
ных, то она может приближенно вычислить где в памяти кончается ее
код и затем поместить требуемую область данных в любое место за
концом кода. Для определения адреса конца программы поместите в
конце программы псевдосегмент типа:

ZSEG SEGMENT
;
ZSEG ENDS

В ассемблере IBM PC ZSEG будет последним сегментом, так как
сегменты располагаются в алфавитном порядке. С другими ассембле-
рами нужно действительно поместить эти строки в конце программы.
В самой программе достаточно поставить оператор MOV AX,ZSEG и AX
будет указывать на первый свободный сегмент памяти за программой.
Такой подход будет работать до тех пор, пока программа не
будет предполагать о наличии памяти, которой на самом деле нет.
Он не будет также работать в многопользовательской среде, когда
несколько программ могут делить между собой одну и ту же область
адресов. Для решения этой проблемы MS DOS имеет возможность отс-
леживать 640K системной памяти и отводить по требованию программы
блоки памяти любого размера. Блок памяти - это просто непрерывная
область памяти, его максимальный размер определяется размером
доступной памяти, в частности, он может быть больше одного сег-