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



       

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


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

MOV ENDCDE,01 ; да - выдать LEA DX,OPENMSG ; сообщение об ошибке CALL X10ERR RET E100PEN ENDP ; Чтение дисковой записи: ; ---------------------- F10READ PROC NEAR MOV AX,3FH ;Функция чтения MOV BX,HANDLE MOV CX,32 ;30 для имени, 2 для CR/LF LEA DX,IOAREA INT 21H JC F20 ;Ошибка при чтении? CMP AX,00 ;Конец файла? JE F30 CMP IOAREA,1AH ;Маркер конца файла (EOF)? JE F30 ; да - выйти RET F20: LEA DX,READMSG ; нет - выдать CALL X10ERR ; сообщение об ошибке F30: MOV ENDCDE,01 ;Код завершения F90: RET F10READ ENDP ; Вывод имени на экран: ; -------------------- G10DISP PROC NEAR MOV AH,40H ;Функция вывода на экран MOV BX,01 ;Установить номер MOV CX,32 ; и длину LEA DX,IOAREA INT 21H CMP ROW,20 ;Последняя строка экрана? JEA G90 ; да - обойти INC ROW RET G90: MOV AX,0601H CALL Q10SCR ;Прокрутка (скроллинг) CALL Q20CURS ;Установить курсор RET G10DISP ENDP ; Прокрутка (скроллинг) экрана: ; ---------------------------- Q10SCR PROC NEAR ;в AX - адрес элемента MOV BH,1EH ;Установить цвет MOV CX,0000 MOV DXX,184FH ;Функция прокрутки INT 10H RET Q10SCR ENDP

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

; Установка курсора: ; ----------------- 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,40H ;в DX - адрес сообщения MOV BX,01 ;Номер MOV CX,20 ;Длина сообщения INT 21H RET X10ERR ENDP

CODESG ENDS END BEGIN

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

page 60,132 TITLE ASCREAD (COM) Чтение ASCII файла CODESG SEGMENT PARA 'Code' ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG ORG 100H BEGIN: JMP MAIN ; ------------------------------------------------- SECTOR DB 512 DUP(' ') ;Область ввода DISAREA DB 120 DUP(' ') ;Область вывода на экран ENDCDE DW 00 HANDLE DW 0 OPENMSG DB '*** Open error ***' PATHNAM DB 'D:\HANREAD.ASM', 0 ROW DB 00 ; ------------------------------------------------- MAIN PROC NEAR ;Основная программя MOV AX,0600H CALL Q10SCR ;Очистить экран CALL Q20CURS ;Установить курсор CALL E10OPEN ;Открыть файл, ; установить DTA CMP ENDCDE,00 ;Ошибка при открытии? JNE A90 ; да - выйти, A20LOOP: ; нет - продолжить CALL R10READ ;Чтение первого сектора CMP ENDCDE,00 ;Конец файла, нет данных? JE A90 ; да - выйти CALL G10XPER ;Выдать на экран A90: RET ;Завершить программу MAIN ENDP ; Открыть файл на диске: ; --------------------- E10OPEN PROC NEAR MOV AH,3DH ;Функция открытия MOV AL,00 ;Только чтение LEA DX,PATHNAM INT 21H JNC E20 ;Проверить флаг CF CALL X10ERR ; ошибка, если установлен RET E20: MOV HANDLE,AX ;Запомниить номер файла RET E10OPEN ENDP ; Построчный вывод данных на экран: ; -------------------------------- G10XPER PROC NEAR CLD ;Направление слева-направо LEA SI,SECTOR G20: LEA DI,DISAREA G30:




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