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



       

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


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

F10WRIT PROC NEAR MOV AH,40H ;Функция записи на диск MOV BX,HANDLE MOV CX,32 ;30 для имени + 2 для CR/LF LEA DX,NAMEREC INT 21H JNC F20 ;Ошибка записи? LEA DX,WRTMSG ; да - CALL X10ERR ; выдать предупреждение MOV NAMELEN,00 F20: RET F10WRIT ENDP ; Закрытие файла на диске: ; ----------------------- G10CLSE PROC NEAR MOV NAMEREC,1AH ;Маркер конца записи (EOF) CALL F10WRIT MOV AH,3EH ;Функция закрытия MOV BX,HANDLE INT 21H RET G10CLSE ENDP ; Прокрутка (скроллинг) экрана: ; ---------------------------- Q10SCR PROC NEAR ;в AX - адрес элемента MOV BH,1EH ;Цвет - желтый на синем MOV CX,0000 MOV DX,184FH INT 10H ;Скроллинг RET Q10SCR ENDP ; Установка курсора: ; ----------------- Q20CURS PROC NEAR MOV AH,02 MOV BH,00 MOV DH,ROW ;Установить курсор MOV DL,00 INT 10H RET Q20CURS ENDP ; Вывод сообщения об ошибке: ; ------------------------- X10ERR PROC NEAR ;DX содержит MOV AH,40H ; адрес сообщения MOV BX,01 MOV CX,21 ;Длина сообщения INT 21H MOV ERRCDE,01 ;Установить код ошибки RET X10ERR ENDP

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

CODESG ENDS END BEGIN

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

page 60,132 TITLE HANREAD (EXE) Чтение записей, созданных в HANCREAT ; ----------------------------------------------------- STACKSG SEGMENT PARA STACK 'Stack' DW 80 DUP(?) STACKSG ENDS ; ----------------------------------------------------- DATASG SEGMENT PARA 'Data' ENDCDE DB 00 HANDLE DW ? IOAREA DB 32 DUP(' ') PATHNAM DB 'D:\NAMEFILE.SRT',0 OPENMSG DB '*** Open error ***', 0DH, 0AH READMSG DB '*** Read error ***', 0DH, 0AH 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 E100PEN ;Открыть файл, ; ; установить DTA CMP ENDCDE,00 ;Ошибка открытия? JNZ A90 ; да - завершить программу A20LOOP: CALL F10READ ;Чтение записи с диска CMP ENDCDE,00 ;Ошибка чтения? JNZ A90 ; да - выйти, CALL G10DISP ; нет - выдать имя, JMP A20LOOP ; и продолжить A90: RET BEGIN ENDP ; Открытие файла: ; -------------- E100PEN PROC NEAR MOV AH,3DH ;Функция открытия MOV CX,00 ;Нормальные атрибуты LEA DX,PATHNAM INT 21H JC E20 ;Ошибка открытия? MOV HANDLE,AX ; нет - сохранить RET ; файловый номер E20:




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