Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2016, 11:33   #1
balin
Пользователь
 
Регистрация: 22.09.2014
Сообщений: 10
Восклицание Работа с файлами и строками, ассемблер

Само задание-Определить количество символов в последней строке текстового файла Результат и саму строку показать на экране. Записать строку в новый файл. Вот что я написал в итоге. Чтобы узнать последнюю строку с конца файла я двигаюсь и проверяю на конец строки 0A. Только проблема у меня в этом самом месте. В отладчике она бесконечно в цикле двигается и не выходит. А значит не проходит сравнение, а почему я не понимаю. Вот сам код с комментариями TASM
:confused :
Код:
.386
dseg segment use16  
text1    db 14,11,'File Open: ',0Dh,0Ah,'$'
text2    db 13,10,'Result..: $'
text3    db 14,11,'Next file: $'
text4    db 13,10,'Error cr: $'
    Buf       db ? ;для изначального файла
Buf1     db ? ; для работы внутри файла
handle   dw ?; буфер логического номера файла
handle2  dw ?; буфер 2 логического номера файла
pathname db   'myfile2.asm', 0  ;    путь к файлу
fName    db   'myfile.asm',0 ;путь ко 2 файлу ,новому
dseg ends

cseg segment use16
assume cs:cseg,ds:dseg

m1:
mov cx,dseg
mov ds,cx
;-------------------
;Происходит открытие файла
mov al,0
lea dx,fname
mov ah,3Dh
int 21h
jc error  ; ошибка открытия файла (CF=1) 

mov ah,09h
lea dx,text1
int 21h                ;вывод сообщения что файл открылся
mov handle,ax
;--------------------
;Чтение байтов из файла
lea dx,buf
mov bx,handle
mov cx,0FFh
mov ah,3Fh
int 21h
;--------------------
;Смещаю указатель на конец файла 
;Первый раз на -1 
mov bx,handle
mov al,2
mov cx,0FFFFh
mov dx,0FFFFh
mov ah, 42h
int 21h

mov bx,handle
mov cx,1
lea dx,buf1
mov ah, 3Fh
int 21h
xor bh,bh  ;счетчик сколько байтов в строке
inc bh      
cmp buf1,0Ah
jne short m2 ;если сравнение не дало результата
jmp short m3
;-----------------------------
;Теперь указатель смещаю на два и буду считывать по 1 байту.

m2:
mov bx,handle
mov al,1
mov cx,0FFFFh
mov dx,0FFFEh
mov ah, 42h
int 21h

mov bx,handle
mov cx,1
lea dx,buf1
mov ah, 3Fh
int 21h
inc bh          
cmp buf1,0Ah
jne short m2 ; повторяю пока сравнение не дало результата
;---------------------------------- 
;Сравнение прошло успешно, я нашел начало последней строки
;Считываю в буфер всю строку
m3:
mov bx,handle
mov cx,0FFFFh
lea dx,buf1
mov ah, 3Fh
int 21h
;-----------------------------------
;Вывожу на экран результат
;Сначала количество символов а потом строку
mov ah,0Ah
lea dx,text2
int 21h   

mov ah,09h
movzx dx,bh
int 21h 

mov ah,0Ah
lea dx,Buf1
int 21h
;-------------------------------------------------
;Создаю новый файл
mov ah,0Ah               
lea dx, text3 ; сообщение то что началась работа с новым файлом
int 21h

mov ah,3ch
mov cx, 0           ;  стандартные атрибуты файла
lea  dx, pathname
mov ah, 3ch
int 21h             
jc short  error     ; ошибка создания файла (CF=1)
;-------------------------------------------------------
;Запись в новый файл
mov handle2,ax  ;сохраняю хэндл второго файла
mov bx,handle2
mov cx,0
lea dx,buf1
mov ah,40h
int 21h
;-------------------------------------------------------
;Закрываю файл
mov bx,handle2
mov ah, 3Eh
int 21h
jmp short m4

error:
mov   ah,09h        ; выводим на экран сообщение об ошибке
lea   dx,text4
int   21h
m4:
mov ah, 4ch         ; завершаем программу
mov al, 00h
int 21h

cseg ends
end m1
balin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ассемблер. Работа со строками и массивами Toxa_SH Помощь студентам 0 29.05.2012 17:03
Ассемблер,работа со строками и файлами vlasovrd Помощь студентам 2 30.03.2012 21:52
Работа со строками. Ассемблер. silence_master Помощь студентам 0 21.11.2010 18:10
работа со строками (ассемблер) ilya107 Помощь студентам 2 13.03.2009 19:36