Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа с файлом, дописание 
:(
    Опции темы
FANDER69
Дата 11.10.2015, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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

опять возникла ошибка при выоде на экран первое прочитанное (до добавления) выводит хорошо, а вот второе вообще не выодит (после добавления)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.1777 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.