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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2012, 19:42   #1
CyberGirl
Пользователь
 
Регистрация: 05.12.2010
Сообщений: 11
Вопрос Работа с текстовыми файлами

Необходимо задать в исходном тексте программы имя некоторого файла с исходным текстом программы на ассемблере. Удалить из данного исходного текста комментарии, первоначальную же версию программы сохранить в файле с таким же именем и расширением BAK.

Код:
my_data         segment
        assume cs:my_data, ds:my_data
iFILEg                  db      'iFILE.txt',0
OLDDIRR         db   'FILE.txt',0
NEWDIRR         db   'FILE.bak',0
fname           db      '1.txt', 0              ; ASCIIZ-имя файла
string          db      'something'             ; записываемая строк
len             =       $-string                ; длина строки
ermes           db      'Err!'
Buffer  DB 14h  DUP(0)  ; буфер на 20 символов
mes db "text from FILE.txt:"
        db      10,13,"=======================",10,13,"$"
mes2 db 10,13,"======================="
         db     10,13,"copy into iFILE.txt",10,13,"$"
 
; Код
begin:  mov     ax, my_data
                mov     ds, ax          ; инициализация DS адресом сегмента данных
                mov es, ax
                MOV  AH,41H         ;удалить копию файла
                LEA  DX,NEWDIRR     ;
                INT  21H
                
                
                mov di,OFFSET NEWDIRR  ;новое имя
                mov ah,56H              ;
                int 21H                 ;переносим файл
                
;======работа с file.txt=====
                        ; Запишем в файл FILE.txt Строку,которую потом будем копировать
                        mov     bx, ax          ; сохраним дескриптор созданного файла
                        mov     ah, 40h         ; функция записи в файл или на устройство
                        lea     dx, string              ; DS:DX -> записываемая строка
                        mov     cx, len
                        int     21h
                
                        mov ax,3d00h ; открываем FILE.txt
                        mov dx, OFFSET OLDDIRR
                        int 21h
                        jc er
                        ;Копируем все что записано в file.txt в буфер
                        mov bx,ax                       ; дескриптор файла в ВХ
                        mov ah,3fh              ; функция чтения файла
                        mov cx,14h              ; сколько читать-20 символов
                        mov dx,OFFSET Buffer    ; заносим в буфер
                        int 21h                 
                        jc er
                        ;закрываем file.txt
                        mov     ah, 3Eh
                        int     21h
;===========================
        mov ah, 9    ;месага о том что копируем
        lea dx, mes               
        int 21h
        
        MOV   DI,  offset buffer        ;Адрес буфера с прочитанными данными
        MOV   BX,  17           ;количеству символов в строке
        MOV   BYTE PTR [DI+BX], '$' ;вывод текста без косяков
                
        MOV   AH,  9            ;Выводим строку, считанную из файла
        MOV   DX,  offset buffer        ;на экран
        INT   21h
        
 
;=========Работа с iFILE.txt======
                MOV  AH,3CH         ;создаем iFILE.txt
                MOV  CX,00          ; обычного файла,без атрибутов
                LEA  DX,iFILEg     ;
                INT  21H            ;
                jc er
                ;запись из буффера в файл       
                mov     bx, ax          ; сохраним дескриптор созданного файла
                mov     ah, 40h         ; з
                lea     dx, buffer              ;
                mov     cx, len
                int     21h
 
                mov     ah, 3Eh;закрыть iFile
                int     21h
        
                mov ah, 9    ;
                lea dx, mes2               
                int 21h
                ;======================
                jmp exit
 
er:
                mov     ah, 9   ; и выводим сообщение на экран
                lea     dx, ermes               ; вывод сообщения ermes
                jmp     exit
exit:   mov     ax, 4C00h
                int     21h
my_data   ends 
        end     begin
C сохранением первоначальной версии с расширением bak разобралась, помогите с удалением комментариев из файла (цикл по строкам, удалить в строке все, что идет после символа ";" и перейти на следующую строку и так пока не достигнут конец файла)


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 22.01.2012 в 10:56.
CyberGirl вне форума Ответить с цитированием
Старый 23.01.2012, 04:20   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

CyberGirl, где-то я уже видел этот текст, только публиковал его пользователь с ником ro0t. А судя по теме "Определение количества параллельных портов" CyberGirl и ro0t это один и тот же человек.
Повторяю свой совет
1) переименуй asm-файл в bak-файл
2) открой файл bak и получи его длину, длину файла помести в регистр CX
3) в цикле, используя пару команд lodsb/stosb, анализируешь содержимое al до тех под пока не встретишь символ ";"
4) после чего используешь только lodsb и анализируй содержимое AL пока не найдешь символ 0Dh (конец строки) после чего возвращайся к пункту 3
5) создай asm-файл, содержимое буфера, который был заполнен командами stosb скопируй в asm-файл и закрой его
PS. В языке ассемблера допустим и многострочный комментарий. Многострочный комментарий должен начинаться со строчки COMMENT. В качестве маркера многострочного комментария берется первый за словом COMMENT символ, отличный от пробела; этот символ начинает комментарий. Концом многострочного комментария является конец первой из последующих строк программы, в которой в любой позиции снова встретился этот же маркер. Такой вид комментария обычно используется, когда, например, при отладке программы необходимо временно исключить какой-либо фрагмент программы.

Последний раз редактировалось Mikl___; 23.01.2012 в 05:40.
Mikl___ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с текстовыми файлами. Константинн Помощь студентам 0 06.03.2011 12:50
Работа с текстовыми файлами A_Orlov Паскаль, Turbo Pascal, PascalABC.NET 1 14.06.2010 14:49
Работа с текстовыми файлами ditya_kremlya Паскаль, Turbo Pascal, PascalABC.NET 1 20.05.2010 18:10
Работа с текстовыми файлами Gigabit Общие вопросы Delphi 3 19.02.2010 10:29
Работа с текстовыми файлами KroSer63 Общие вопросы по Java, Java SE, Kotlin 0 19.12.2008 20:03