Assembler - язык неограниченных возможностей


Загрузка и выполнение программ


Как и любая операционная система, DOS загружает и выполняет программы. При загрузке программы в начале отводимого для нее блока памяти (для СОМ-программ это вся свободная на данный момент память) создается структура данных PSP (префикс программного сегмента) размером 256 байт (100h). Затем DOS создает копию текущего окружения для загружаемой программы, помещает полный путь и имя программы в конец окружения, заполняет поля PSP следующим образом:

    +00h: слово — CDh 20h — команда INT 20h. Если СОМ-программа завершается командой RETN, управление передается на эту команду. Введено для совместимости с командой СР/М CALL 0.

    +02h: слово — сегментный адрес первого байта после области памяти, выделенной для программы

    +04h: байт — не используется DOS

    +05h: 5 байт — 9Ah F0h FEh 1Dh F0h — команда CALL FAR на абсолютный адрес 000C0h, записанная так, чтобы второй и третий байты составляли слово, равное размеру первого сегмента для СОМ-файлов (в этом примере FEF0h). Введено для совместимости с командой СР/М CALL 5.

    +0Ah: 4 байта — адрес обработчика INT 22h (выход из программы)

    +0Eh: 4 байта — адрес обработчика INT 23h (обработчик нажатия Ctrl-Break).

    +12h: 4 байта — адрес обработчика INT 24h (обработчик критических ошибок)

    +16h: слово — сегментный адрес PSP процесса, из которого был запущен текущий.

    +18h: 20 байт — JFT — список открытых идентификаторов, один байт на идентификатор, FFh — конец списка.

    +2Ch: слово — сегментный адрес копии окружения для процесса.

    +2Eh: 2 слова — SS:SP процесса при последнем вызове INT 21h.

    +32h: слово — число элементов JFT (по умолчанию 20).

    +34h: 4 байта — дальний адрес JFT (по умолчанию PSP:0018).

    +38h: 4 байта — дальний адрес предыдущего PSP.




    Начало  Назад  Вперед