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



       

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


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

; ---------------------------------- Q20CURS PROC NEAR ;DX уже установлен MOV AH,02 ;Функция установки курсора MOV BH,00 ;Страница Э 0 INT 10H ;Вызов BIOS RET Q20CURS ENDP CODESG ENDS END BEGIN

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

TITLE PRINASK (COM) Чтение и печать дисковых записей CODESG SEGMENT PARA 'Code' ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG ORG 100H BEGIN JMP MAIN ; --------------------------------------------------------- PATHPAR LABEL BYTE ;Список параметров для MAXLEN DB 32 ; ввода NAMELEN DB ? ; имени файла FILENAM DB 32 DUP(' ') SECTOR DB 512 DUP(' ') ;Область ввода для файла DISAREA DB 120 DUP(' ') ;Область вывода COUNT DW 00 ENDCDE DW 00 FFEED DB 0CH HANDLE DW 0 OPENMSG DB '*** Open error ***' PROMPT DB 'Name of file? ' ; ---------------------------------------------------------- MAIN PROC NEAR ;Основная программа CALL Q10SCR ;Очистить экран CALL Q20CURS ;Установить курсор A10LOOP: MOV ENDCDE,00 ;Начальная установка CALL C10PRMP ;Получить имя файла CMP NAMELEN,00 ;Есть запрос? JE A90 ; нет - выйти CALL E10OPEN ;Открыть файл, ; установить DTA CMP ENDCDE,00 ;Ошибка при открытии? JNE A80 ; да - повторить запрос CALL R10READ ;Прочитать первый сектор CMP ENDCDE,00 ;Конец файла, нет данных? JE A80 ; да - повторить запрос CALL G10XPER ;Распечатать сектор A80: JMP A10LOOP A90: RET MAIN ENDP ; Подпрограмма запроса имени файла: ; -------------------------------- C10PRMP PROC NEAR MOV AH,40H ;Функция вывода на экран MOV BX,01 MOV CX,13 LEA DX,PROMPT INT 21H MOV AH,0AH ;Функция ввода с клавиатуры LEA DX,PATHPAR INT 21H MOV BL,NAMELEN ;Записать MOV BH,00 ; 00 в конец

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

MOV FILENAM[BX],0 ; имени файла C90 RET C10PRMP ENDP ; Открытие дискового файла: ; ------------------------ E10OPEN PROC NEAR MOV AH,3DH ;Функция открытия MOV AL,00 ;Только чтение LEA DX,FILENAM INT 21H JNC E20 ;Проверить флаг CF CALL X10ERR ; ошибка, если установлен RET E20: MOV HANDLE,AX ;Сохранить номер файла MOV AX,2020H MOV CX,256 ;Очистить пробелами REP STOSW ; область сектора RET E100PEN ENDP ; Подготовка и печать данных: ; -------------------------- G10XFER PROC NEAR CLD ;Направление слева-направо LEA SI,SECTOR ;Начальная установка G20: LEA DI,DISAREA MOV COUNT,00 G30: LEA DX,SECTOR+512 CMP SI,DX ;Конец сектора? JNE G40 CALL R10READ ; да - читать следующий CMP ENDCDE,00 ;Конец файла? JE G80 ; да - выйти LEA SI,SECTOR G40: MOV BX,COUNT CMP BX,80 ;Конец области вывода? JB G50 ; нет - обойти MOV [DI+BX],0D0AH ; да - записать CR/LF CALL P10PRNT LEA DI,DISAREA ;Начало области вывода G50: LODSB ;Записать [SI] в AL, ; увеличить SI MOV BX,COUNT MOV [DI+BX],AL ;Записать символ INC BX CMP AL,1AH ;Конец файла? JE G80 ; да - выйти CMP AL,0AH ;Конец строки? JNE G60 ; нет - обойти,




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