Материал: код_программы

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

TITLE RGR_VAR2

.MODEL SMALL

.CODE

ORG 100H

Begin:

lea dx,Header ;загружаем адрес строки заголовка

call Show ;функция вывода

lea dx,FileString ;адрес строки с сообщением об имни файла

call Show ;Функция вывода строки на экран

lea dx,PressContinue ;адрес строки с сообщением о продолжении

call Show

MOV AH,10H ;ожидание нажатия кнопки

INT 16H

lea dx,FileName ;загружаем в dx адрес с именем файла

call OtkrFile ;получаем дескриптор файла через функцию

jc Error ;проверить флаг на ошибку открытия файла(файл отсутствует)

mov bx,ax ;сохраняем дескриптор файла в bx

lea dx,Buffer ;записываем адрес буфера в dx

mov cx,1 ;сколько байт(символов) читать. Будем читать по одному символу

Read:

mov ah,3fh ;функция считывания из файла

int 21h ;сервис dos

inc dx ;сдвинем адрес записи на ячейку

cmp ax, 0 ;в ax будет 0, если достигнут конец файла

jc Error ;проверить флаг на ошибку

jne Read ;если не конец файла, читаем дальше

dec dx ;уменьшим адрес записи на 1. Чтобы избежать вывода лишнего символа

mov ax,dx ;сохраняем конечный адрес строки в ax

lea dx,Buffer ;берем начальный адрес строки

sub ax,dx ;Вычитаем из адреса конца строки адрес начала. Тем самым находим размер строки

push ax ;сохраним количество символов для вывода в стеке

Call ZakrFile ;функция закрытие файла

mov ah,03 ;функция определения позции курсора. Координаты записываются в DX

mov bh,0 ;страница 0

int 10h ;вызвать BIOS

pop cx ;возвращаем количество символов для вывода из стека в cx. Будем использовать его для следующей функции

mov ah,13h ;функция вывода строки

mov al,1 ;использовать атрибут и переместить курсор

mov bh,0 ;0 страница

mov bl,0E9h ;Ярко синий текст на желтом фоне

lea bp,Buffer ;адрес считывания

;положение курсора получено ранее в DX. Количество символов для вывода в CX

int 10h ;выполняем

jmp Exit

Error:

lea dx, ErrStr ;загружаем в dx адрес строки с сообщением об ошибке

call Show

Exit:

MOV AH,10H ;ожидание нажатия кнопки

INT 16H

mov ah,04Ch ;функция DOS выхода из пpогpаммы

mov al,0h ;код возвpата

int 21h

OtkrFile PROC ;Функция открытия файла

mov ah,3dh ;функция открытия файла

mov al,0 ;0 - открыть для чтения 1 - запись 2 - чтение,запись

int 21h ;сервис dos

ret ;возврат

OtkrFile ENDP

ZakrFile PROC ;функция закрытия файла

mov ah,3eh ;функция закрытия файла

int 21h ;сервис dos

ret

ZakrFile ENDP

Show PROC ;функция вывода

mov ah,09 ;функция вывода строки на экран

int 21h ;dos

ret

Show ENDP

FileString DB 'Filename: '

FileName DB 'FILE_SPO.txt',0,10,13,'$'

ErrStr DB 'Ошибка работы с файлом. Возможно, файл отсутствует.',10,13,'$'

Header DB 'Расчетно-графическая работа',10,13,'<<Системное программное обеспечение>>',10,13,'Студента группы ИВТ-314',10,13,'Балыбердин Н.А.',10,13,'Вариант 2',10,10,13,'$'

PressContinue DB 'Press any key to continue...',10,10,13,'$'

Buffer DB ?

End Begin