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



       

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


RECLEN EQU 32 ;Длина записи NAMEFLD DB RECLEN DUP(' '), 13, 10, '$'

ENDCDE DB 00 OPENMSG DB '*** Open error ***', '$' READMSG DB '*** Read error ***', '$' ROW DB 00 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 E10OPEN ;Открыть файл, ; установить DTA CMP ENDCDE,00 ;Открытие без ошибок? JNZ A90 ; нет - завершить A20LOOP: CALL F10READ ;Прочитать запись CMP ENDCDE,00 ;Чтение без ошибок? JNZ A90 ; нет - выйти CALL G10DISP ;Выдать имя на экран JMP A20LOOP ;Продолжить A90: RET ;Завершить BEGIN ENDP

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

; Открытие файла на диске: ; ----------------------- E10OPEN PROC NEAR LEA X,FCBREC MOV AH,0FH ;Функция открытия INT 21H CMP AL,00 ;Файл найден? JNZ E20 ; нет - ошибка

MOV FCBRCSZ,RECLEN ;Длина записи (EQU) MOV AH,1AH LEA DX,NAMEFLD ;Адрес DTA INT 21H RET E20: MOV ENDCDE,01 ;Сообщение об ошибке LEA DX,OPENMSG CALL X10ERROR RET E10OPEN ENDP ; Чтение дисковой записи: ; ---------------------- F10READ PROC NEAR MOV AH,14H ;Функция чтения LEA DX,FCBREC INT 21H CMP NAMEFLD,1AH ;Считан маркер EOF? JNE F20 ; нет MOV ENDCDE,01 ; да JMP F90 F20: CMP AL,00 ;Чтение без ошибок? JZ F90 ; да - выйти MOV ENDCDE,01 ;Нет: CMP AL,01 ;Конец файла? JZ F90 ; да - выйти, LEA DX,READMSG ; нет - значит CALL X10ERR ; ошибка чтения F90: RET F10READ ENDP ; Вывод записи на экран: ; --------------------- G10DISP PROC NEAR MOV AH,09 ;Функция вывода на экран LEA DX,NAMEFLD INT 21H CMP ROW,20 ;Последняя строка экрана? JAE G30 ; нет - INC ROW ; да - увеличить строку JMP G90 G30: MOV AX,0601H

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

CALL Q10SCR ; прокрутить CALL Q20CURS ; установить курсор G90: RET G10DISP ENDP ; Прокрутка (скроллинг) экрана: ; ---------------------------- Q10SCR PROC NEAR ;AX уже установлен MOV BH,1EH ;Установить цвет MOV CX,0000 MOV DX,184FH ;Функция прокрутки INT 10H RET Q1OSCR ENDP ; Установка курсора: ; ----------------- Q20CURS PROC NEAR MOV AH,02 MOV BH,00 MOV DH,ROW MOV DL,00 INT 10H RET Q20CURS ENDP ; Вывод сообщения об ошибке на диске: ; ---------------------------------- X10ERR PROC NEAR MOV AH,09 ;DX содержит адрес INT 21H ; сообщения RET X10ERR ENDP




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