Ассемблер и программирование для IBM PC



       

ГЛАВА 22. Программный загрузчик - часть 5


5C: 02 43 41 4C 43 49 54 20 20 4F 42 4A C A L C I T O B J 80: 0D 20 42 3A 43 41 4C 43 49 54 2E 4F 42 4A 0D B : C A L C I T . 0 B J

Ассемблер для IBM PC. Глава 22 37

Начиная с адреса шест.5C, находится неоткрытый блок FCB, содержащий имя файла, который был указан в параметре, CALCIT.OBJ, но не имя выполняемой программы. Первый символ указывает номер дисковода (02=B в данном случае). Следом за CALCIT находятся два пробела, которые дополняют имя файла до восьми символов, и тип файла, OBJ. Если ввести два параметра, например:

progname A:FILEA,B:FILEB

тогда DOS построит FCB для FILEA по смещению шест.5C и FCB для FILEB по смещению шест.6C. Начиная с адреса шест.80 в этом случае содержится число введенных символов (длина параметров) - 16, пробел (шест.20) A:FILEA,B:FILEB и символ возврат каретки (OD). Так как PSP непосредственно предшествует вашей программе, то возможен доступ к области PSP для обработки указанных файлов или для предпринятия определенных действий. Для локализации буфера DTA COM-программа может просто поместить шест.80 в регистр SI и получить доступ следующим образом:

MOV SI,80H ;Адрес DTA CMP BYTE PTR [SI],0 ;В буфере нуль? JE EXIT

Для EXE-программы нельзя с уверенностью утверждать, что кодовый сегмент непосредственно располагается после PSP. Однако, здесь при инициализации регистры DS и ES содержат адрес PSP, так что можно сохранить содержимое регистра ES после загрузки регистра DS:

MOV AX,DSEG MOV DS,AX MOV SAVEPSP,ES

Позже можно использовать сохраненный адрес для доступа к буферу PSP:

MOV SI,SAVEPSP CMP BYTE PTR [SI+ 80H],0 ;В буфере нуль? JE EXIT

DOS версии 3.0 и страше содержит команду INT 62H, загружаю щую в регистр BX адрес текущего PSP, который можно использо вать для доступа к данным в PSP.

ВЫПОЛНЕНИЕ COM-ПРОГРАММЫ ------------------------------------------------------------

В отличие от EXE-файла, COM-файл не содержит заголовок на диске. Так как организация COM-файла намного проще, то для DOS необходимо "знать" только то, что тип файла - COM.




Содержание  Назад  Вперед