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



         

ГЛАВА 23. Прерывания BIOS и DOS - часть 33


Ассемблер для IBM PC. Программы. 107

page 60,132 TITLE FCBCREAT (EXE) Использование FCB для создания файла ;---------------------------------------------------------- STACKSG SEGMENT PARA STACK 'Stack' DW 80 DUP(?) STACKSG ENDS ;---------------------------------------------------------- DATASG SEGMENT PARA 'Data' RECLEN EQU 32 NAMEPAR LABEL BYTE ;Список параметров: MAXLEN DB RECLEN ; макс.длина имени NAMELEN DB ? ; число введенных символов NAMEDTA DB RECLEN DUP(' ') ; область передачи (DTA)

FCBREC LABEL BYTE ;FCB для дискового файла FCBDRIV DB 04 ; дисковод D FCBNAME DB 'NAMEFILE' ; имя файла FCBEXT DB 'DAT' ; тип файла FCBBLK DW 0000 ; номер текущего блока FCBRCSZ DW ? ; размер логической записи FCBFLSZ DD ? ; размер файла (DOS) DW ? ; дата (DOS) DT ? ; зарезервировано (DOS) FCBSQRC DB 00 ; номер текущей записи DD ? ; относительный номер

CRLF DB 13,10,'$' ERRCDE DB 00 PROMPT DB 'Name? ','$' ROW DB 01 OPNMSG DB '*** Open error ***', '$' WRTMSG DB '*** Write error ***', '$' DATASG ENDS ; --------------------------------------------------------- CODESG SEGMENT PARA 'Code' BEGIN PROC FAR ASSUME CS:CODESG,DS:DATASG,SS:STACKSG,ES:DATASG PUSH DS SUB AX,AX PUSH AX MOV AX,DATASG MOV DS,AX MOV ES,AX MOV AX,0600H CALL Q10SCR ;Очистить экран CALL Q20CURS ;Установить курсор CALL C10OPEN ;Открыть, установить DTA CMP ERRCDE,00 ;Есть место на диске? JZ A20LOOP ; да - продолжить, RET ; нет - вернуться в DOS A20LOOP: CALL D10PROC

Ассемблер для IBM PC. Программы. 108

CMP NAMELEN,00 ;Конец ввода? JNE A20LOOP ; нет - продолжить, CALL G10CLSE ; да - закрыть файл RET ; и вернуться в DOS BEGIN ENDP ; Открытие дискового файла: ; ------------------------ C10OPEN PROC NEAR MOV AH,16H ;Функция создания файла LEA DX,FCBREC INT 21H CMP AL,00 ;Есть место на диске? JNZ C20 ; нет - ошибка

MOV FCBRCSZ,RECLEN ;Размер записи (EQU) LEA DX,NAMEDTA ;Загрузить адрес DTA MOV AH,1AH INT 21AH RET C20: LEA DX,OPNMSG ;Сообщение об ошибке CALL X10ERR RET C10OPEN ENDP ; Ввод с клавиатуры: ; ----------------- D10PROC PROC NEAR MOV AH,09 ;Функция вывода на экран LEA DX,PROMPT ;Выдать запрос INT 21H




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