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