Новичок
Профиль
Группа: Участник
Сообщений: 7
Регистрация: 23.9.2015
Репутация: нет Всего: нет
|
Код | USE16 ORG 100H JMP start s_pak db 'Press any key...$' s_error1 db 'Error!1',13,10,'$' s_error2 db 'Error!2',13,10,'$' s_error3 db 'Error!3',13,10,'$' s_error4 db 'Error!4',13,10,'$' s_file db '----[ file "do dabavlenia" ]$' p_file db '----[ file "posle dabavlenia" ]$' endline db 13,10,'$' Fname db 'MYFILE.001',0 SAddition db 13,10,'asmworld',13,10,'Hello!$' Strsize = $ - SAddition buffer db 180 DUP(0) handle dw 0 start: mov dx,Fname mov al,2 mov ah,3DH int 21h jnc @F ;Если нет ошибки, то продолжаем call error_msg1 ;Иначе вывод сообщения об ошибке jmp exit ;Выход из программы @@: mov [handle],ax ;Сохранение дескриптора файла ;----------------------------------------------------------------------- mov bx,ax ;Дескриптор файла mov ah,3Fh ;Функция DOS 3Fh (чтение из файла) mov dx,buffer ;Адрес буфера для данных mov cx,80 ;Максимальное кол-во читаемых байтов int 21h ;Обращение к функции DOS jnc otput_ekran ;Если нет ошибки, то продолжаем call error_msg1 ;Вывод сообщения об ошибке jmp close_file ;Закрыть файл и выйти из программы ;------------------------------------------------------------------------- otput_ekran: mov bx,buffer add bx,ax ;В AX количество прочитанных байтов mov byte[bx],'$' ;Добавление символа '$' mov ah,9 mov dx,s_file int 21h ;Вывод строки с именем файла mov cx,52 call line ;Вывод линии mov ah,9 mov dx,buffer int 21h ;Вывод содержимого файла mov dx,endline int 21h ;Вывод перехода на новую строку mov cx,80 call line ;Вывод линии ;----------------------------------------------------------------- sdvig: mov ah,42H ;СДВИНУТЬ УКАЗАТЕЛЬ ФАЙЛА(ФУНКЦИЯ 42Н) mov bx,[handle] xor cx,cx xor dx,dx mov al,2 int 21h jnc @@@ ;Если нет ошибки, то продолжаем call error_msg2 ;Иначе вывод сообщения об ошибке jmp exit ;Выход из программы @@@: mov bx,[handle] ;Дескриптор файла mov ah,40h ;Функция DOS 40h (запись в файл) mov dx,SAddition ;Адрес буфера с данными mov cx, Strsize ;Размер данных int 21h ;Обращение к функции DOS jnc chtenie2 ;Если нет ошибки, то далее call error_msg3 ;Вывод сообщения об ошибке [COLOR="Red"];----------------------------------------------------------------------- chtenie2: mov bx,[handle] ;Дескриптор файла mov ah,3Fh ;Функция DOS 3Fh (чтение из файла) mov dx,buffer ;Адрес буфера для данных mov cx,80 ;Максимальное кол-во читаемых байтов int 21h ;Обращение к функции DOS jnc otput_ekran1 ;Если нет ошибки, то продолжаем call error_msg1 ;Вывод сообщения об ошибке jmp close_file ;Закрыть файл и выйти из программы ;------------------------------------------------------------------------- otput_ekran1: mov bx,buffer add bx,ax ;В AX количество прочитанных байтов mov byte[bx],'$' ;Добавление символа '$' mov ah,9 mov dx,p_file int 21h ;Вывод строки с именем файла mov cx,49 call line ;Вывод линии mov ah,9 mov dx,buffer int 21h ;Вывод содержимого файла mov dx,endline int 21h ;Вывод перехода на новую строку mov cx,80 call line ;Вывод линии ;----------------------------------------------------------------- [/COLOR] close_file: mov ah,3Eh ;Функция DOS 3Eh (закрытие файла) mov bx,[handle] ;Дескриптор int 21h ;Обращение к функции DOS jnc exit ;Если нет ошибки, то выход из программы call error_msg4 ;Вывод сообщения об ошибке exit: mov ah,9 mov dx,s_pak int 21h ;Вывод строки 'Press any key...' mov ah,8 ;\ int 21h ;/ Ввод символа без эха mov ax,4C00h ;\ int 21h ;/ Завершение программы ;------------------------------------------------------------------------------- ; Процедура вывода сообщения об ошибке error_msg1: mov ah,9 mov dx,s_error1 int 21h ;Вывод сообщения об ошибке ret error_msg2: mov ah,9 mov dx,s_error2 int 21h ;Вывод сообщения об ошибке ret error_msg3: mov ah,9 mov dx,s_error3 int 21h ;Вывод сообщения об ошибке ret error_msg4: mov ah,9 mov dx,s_error3 int 21h ;Вывод сообщения об ошибке ret ;------------------------------------------------------------------------------- ; Вывод линии ; CX - количество символов line: mov ah,2 ;Функция DOS 02h (вывод символа) mov dl,'-' ;Символ @@: int 21h ;Обращение к функции DOS loop @B ;Команда цикла ret
|
опять возникла ошибка при выоде на экран первое прочитанное (до добавления) выводит хорошо, а вот второе вообще не выодит (после добавления)
|