Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод файла построчно. 
V
    Опции темы
toxx
Дата 31.5.2011, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: нет
Всего: 13



Почему если читать файл построчно, файл выводится с некоторым смещением от левой границы экрана?
Код

DATA SEGMENT
 path db "digit.txt",0 ; èìÿ ôàéëà äëÿ îêòðûòèÿ
 buf  db ?                   
 str     db   0
DATA ENDS
 
SSEG SEGMENT STACK
      db 200 dup(?)
SSEG ENDS
 
CODE SEGMENT
 ASSUME CS:CODE, DS:DATA, SS:SSEG 
        


  begin:
        mov ax,DATA     ; íàñòðîèì DS
        mov DS,ax               ; íà ðåàëüíûé ñåãìåíò
        ;îòêðûâàåì ôàéë
        mov ax,3d00h    ; îòêðûâàåì äëÿ ÷òåíèÿ
        lea dx,path             ; DS:dx óêàçàòåëü íà èìÿ ôàéëà
        int 21h         ; â ax äåcêðèïòîð ôàéëà
        jc exit         ; åñëè ïîäíÿò ôëàã Ñ, òî îøèáêà îòêðûòèÿ
        
        mov bx,ax               ; êîïèðóåì â bx óêàçàòåëü ôàéëà
        xor cx,cx
        xor dx,dx
        mov ax,4200h
        int 21h         ; èäåì ê íà÷àëó ôàéëà  
        cld
   out_str:  
        xor bp,bp
    b:  mov ah,3fh          ; áóäåì ÷èòàòü èç ôàéëà
        mov cx,1                ; 1 áàéò
        lea dx,buf              ; â ïàìÿòü buf
        int 21h               
        cmp ax,cx               ; åñëè äîñòèãíóòü EoF èëè îøèáêà ÷òåíèÿ
        jnz close               ; òî çàêðûâàåì ôàéë çàêðûâàåì ôàéë
        mov dl,buf    
        cmp dl,0Ah
        je outStr 
        
        mov str[bp],dl
        inc bp 
        cmp dl,0Ah 
        jne b  
       
outStr:   

        mov str[bp],0Ah
        mov str[bp + 1],'$'
         
        mov ah,9  
        mov dx,offset str              ; âûâîäèì ñèìâîë â dl
        int 21h         ; íà ñòàíäàðòíîå óñòðîéñòâî âûâîäà 
        jmp out_str
   close: 
         mov str[bp],0Ah
        mov str[bp + 1],'$'
         
        mov ah,9  
        mov dx,offset str              ; âûâîäèì ñèìâîë â dl
        int 21h         ; íà ñòàíäàðòíîå óñòðîéñòâî âûâîäà                       ; çàêðûâàåì ôàéë, ïîñëå ÷òåíèÿ
    mov ah,3eh
        int 21h
   exit:                        ; çàâåðøàåì ïðîãðàììó
    mov ah,4ch
        int 21h    
;add_gaps: 
;        cld
 ;       mov     al,' '
 ;       lea     di,str
 ;       mov     cx,len_str
  ;      rep     stosb     
  ;xt&      jmp back
CODE ENDS
  end begin


т.е.
Цитата

            1
            22
            333


Это сообщение отредактировал(а) toxx - 31.5.2011, 17:50
PM MAIL   Вверх
iff
Дата 31.5.2011, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



а зачем его выводить по строчно так?
Можно создать буфер, например рвзмером 513 символов. Последний установить как "$". Считывать в цикле по 512 символов, выводить каждый раз, а в последнем проходе цикла символ "$" установить в соответствии с числов реально прочитанных символов (их может быть меньше 512) и опять вывести.
В тестовом файле, если он содержит нескольеко строк, будут находится символы перевода строки (0Dh, 0Ah), которые при выводе на экран функцией 09h будут также переводить строку. Т.е. файл будет отображаться разбитым на строки.


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
toxx
Дата 31.5.2011, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: нет
Всего: 13



iff
хмм, вообще хорошая идея, просто хотел сразу читать строку ( потом нужно по заданию добавить пробелов, так чтобы по отцентрировать) и записывать обратно в файл другой тоже построчно.

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

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

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


 




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


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

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