14.05.2007, 15:12
общий
это ответ
Здравствуйте, Пушкин,Александр,Сергеевич!
Программа в приложении с подробными коментариями
Удачи
Приложение:
title 86774stacksg segment stack dw 32 dup(?)stacksg endsdata segment filenem label byte ;Ввод имени файла с клавиатуры filemax db 21 ; путь и имя до 20 символов filelen db ? fileptr db 21 dup(‘ ‘) endcod db 00 ;Код ошибки fnom dw ? ;Файловый номер pbuff db 512 dup(‘ ‘);Буфер передачи данных openf db 0dh,0ah,‘*** Open error ***$‘ readf db 0dh,0ah,‘*** Read error ***$‘ row db 00 ;Номер строкиdata endscode segment assume cs:code,ds:databegin: mov ax,data mov ds,ax call p10file ;Ввод имени файла call o10open ;Открытие файла cmp endcod,01 ;Если ошибка то выход je exitb10loop: call r10read ;Процедура чтения файла cmp endcod,01 ;Если ошибка то выход je exit call f10prt ;Вывод на экран jmp b10loopexit: mov ah,4ch int 21h;--- Процедура вывод на экранf10prt proc mov ah,40h mov bx,01 mov cx,512 lea dx,pbuff int 21h retf10prt endp;--- Процедура чтения файлаr10read proc mov ah,3fh mov bx,fnom ;в BX файловый номер mov cx,512 ;Длина буфера записи lea dx,pbuff ;Адрес буфера int 21h jc r20error ;Если ошибка чтения cmp ax,00 ;Конец файла? je r30 retr20error: ; да - ошибка lea dx,readf ; сообщение об ошибке и выход call e10error ;Процедура вывода ошибокr30: mov endcod,01 ;Код завершения retr10read endp;--- Процедура вывода ошибокe10error proc mov ah,09h int 21h rete10error endp;--- Процедура открытия файлаo10open proc mov ah,3dh mov al,00 ;Только чтение mov cl,00 ;Обычный файл(не системный не спрятанный ...) lea dx,fileptr ;Путь и имя открываемого файла int 21h jc o20 ;Если ошибка открытия mov fnom,ax ; нет ошибки сохраняем файловый номер reto20: mov endcod,01 ; да - ошибка lea dx,openf ; сообщение об ошибке и выход call e10error ;Процедура вывода ошибок reto10open endp;--- Процедура ввода имени файла с клавиатурыp10file proc mov ah,0ah lea dx,filenem int 21h ;Получаем ASCIIZ строку sub bx,bx mov bl,filelen ;Заменяем симол ввода 0dh mov fileptr[bx],‘0‘ ; на символ ‘0‘ retp10file endpcode ends end begin