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



       

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


CODESG ENDS END BEGIN

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

page 60,132 TTILE HANCREAT (EXE) Создание файла на диске ; ----------------------------------------------------- STACKSG SEGMENT PARA STACK 'Stack' DW 80 DUP(?) STACKSG ENDS ; ----------------------------------------------------- DATASG SEGMENT PARA 'Data' NAMEPAR LABEL BYTE ;Список параметров: MAXLEN DB 30 ; NAMELEN DB ? ; NAMEREC DB 30 DUP(' '), 0DH, 0AH ; введенное имя, ; CR/LF для записи ERRCDE DB 00 HANDLE DW ? PATHNAM DB 'D:\NAMEFILE.DAT',0 PROMPT DB 'Name? ' ROW DB 01 OPNMSG DB '*** Open error ***', 0DH, 0AH WRTMSG DB '*** Write error ***', 0DH, 0AH 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 C10CREA ;Создание файла, ; установка DTA CMP ERRCDE,00 ;Ошибка при создании? JZ A20LOOP ; да - продолжить, RET ; нет - вернуться в DOS A20LOOP: CALL D10PROC CMP NAMELEN,00 ;Конец ввода? JNE A20LOOP ; нет - продолжить, CALL G10CLSE ; да - закрыть файл RET ; и выйти в DOS BEGIN ENDP ; Создание файла на диске: ; ----------------------- C10CREA PROC NEAR MOV AH,3CH ;Функция создания файла MOV CX,00 ;Нормальный атрибут LEA CX,PATHNAM

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

INT 21H JC C20 ;Есть ошибка? MOV HANDLE,AX ; нет - запомнить номер, RET C20: ; да - LEA DX,OPNMSG ; выдать сообщение CALL X10ERR ; об ошибке RET C10CREA ENDP ; Ввод с клавиатуры: ; ----------------- D10PROC PROC NEAR MOV AH,40H ;Функция вывода на экран MOV BX,01 ;Номер (Handle) MOV CX,06 ;Длина текста запроса LEA DX,PROMPT ;Выдать запрос INT 21H

MOV AH,0AH ;Функция ввода с клавиатуры LEA DX,NAMEPAR ;Список параметров INT 21H CMP NAMELEN,00 ;Имя введено? JNE D20 ; да - обойти RET ; нет - выйти D20: MOV AL,20H ;Пробел для заполнения SUB CH,CH MOV CL,NAMELEN ;Длина LEA DI,NAMEREC ; ADD DI,CX ;Адрес + длина NEG CX ;Вычислить ADD CX,30 ; оставшуюся длину REP STOSB ;Заполнить пробелом D90: CALL F10WRIT ;Запись на диск CALL E10SCRL ;Проверка на скролинг RET D10PROC ENDP ; Проверка на скролинг: ; -------------------- E10SCRL PROC NEAR CMP ROW,18 ;Последняя строка экрана JAE E10 ; да - обойти, INC ROW ; нет - увеличить строку JMP E10 E10: MOV AX,0601H ;Продвинуть на одну строку CALL Q10SCR E90: CALL Q20CURS ;Установка курсора RET E10SCRL ENDP ; Запись на диск: ; --------------




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