Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/16: Рейтинг темы: голосов - 16, средняя оценка - 4.88
1 / 1 / 0
Регистрация: 10.11.2014
Сообщений: 83
TASM

Определить количество символов в последней строке текстового файла

05.05.2016, 01:36. Показов 3370. Ответов 20

Студворк — интернет-сервис помощи студентам
Не могу найти, как перемещаться по файлу в ассемблере.
И еще один вопрос, как найти последнюю строку и делать подсчет.
Мне хоть что-нибудь, уже буду благодарен.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.05.2016, 01:36
Ответы с готовыми решениями:

Определить количество символов в последней строке текстового файла
Определить количество символов в последней строке текстового файла. Результат и саму строку показать на экране.Записать строку в новый...

Определить среднее количество символов в строке текстового файла
Организовать текстовый файл состоящий из N строк. Определить сред-нее количество символов в строке данного файла.

Определить среднее количество символов в строке данного текстового файла
4.Организовать текстовый файл состоящий из N строк. Определить среднее количество символов в строке данного файла.

20
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
06.05.2016, 12:05
Любая операция чтения или записи изменяет указатель в файле.
Установить его можно функцией 42Н
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6211 / 2445 / 403
Регистрация: 29.07.2014
Сообщений: 3,175
Записей в блоге: 4
06.05.2016, 19:29
Цитата Сообщение от balin Посмотреть сообщение
Мне хоть что-нибудь, уже буду благодарен.
Как правило предложение заканчивается точкой. Если ориентировать на неё, то можно составить такой алгоритм:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
org  100h
jmp  start
 
mes0   db   13,10,'File name: MYFILE.TXT'
       db   13,10,'---------------------------'
       db   13,10,'Last offer:',13,10,'$'
fName  db   'myfile.txt',0
 
start:
   mov   ah,9             ;
   mov   dx,mes0          ;
   int   21h              ;
;--------------------------------------------------------
   mov   ax,3d00h         ; открыть файл!
   mov   dx,fName         ;
   int   21h              ;
   jc    error            ;
   xchg  ax,bx            ; его хэндл в BX
 
   mov   ah,3fh           ; читать!
   mov   cx,0ffffh        ;   ..кол-во байт,
   mov   dx,0500h         ;       ..по-адресу.
   int   21h              ; АХ = кол-во реально считанных байт
;--------------------------------------------------------
   std                    ; флаг DF=1 (обратный шаг)
   add   dx,ax            ;
   mov   di,dx            ; смещаемся в конец файла
   sub   di,5             ;   ..там могут быть пробелы (точка)
   mov   cx,ax            ; длина поиска
   mov   al,'.'           ; что будем искать
   repne scasb            ; ищем точку с конца-к-началу
   or    cx,cx            ; если точки нет,
   jz    error            ;     ..то ошибка!
;--------------------------------------------------------
   cld                    ; ставим прямой шаг (DF=0)
   mov   si,di            ; SCASB остановился на точке
   add   si,2             ; пропускаем эту точку и пробел
   xor   ax,ax            ;
   mov   ah,'.'           ; теперь будем искать точку в конце
print:                    ;
   lodsb                  ; читаем байт в AL..
   cmp   ah,al            ;
   je    exit             ; выходим если нашли
   int   29h              ; иначе: печатаем символ на экране
   jmp   print            ;
;--------------------------------------------------------
error:                    ; ошибка!
   mov   al,7             ; биппер и на выход.
   int   29h              ;
 
exit:
   xor   ax,ax            ;
   int   16h              ;
   int   20h              ;
1
Прощай, Мир!
 Аватар для proc3nt
1673 / 831 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
07.05.2016, 16:25
Цитата Сообщение от balin Посмотреть сообщение
как найти последнюю строку
Цитата Сообщение от R71MT Посмотреть сообщение
как правило предложение заканчивается точкой
присутствует рассинхронизация решения задания с условием. все-таки надо искать символ конца предпоследней строки
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
mov ah,3Dh
mov al,00h
lea dx,fname
int 21h
mov handle,ax
    
mov ah,3Fh
lea dx,buf
mov bx,handle
mov cx,0FFh
int 21h
mov bx,ax
    
push ds
pop es
    
std
mov [buf+bx],'$'
lea di,[buf+bx]
dec di
mov cx,ax
mov al,0Ah
repne scasb
    
mov ah,09h
mov dx,di
int 21h
    
mov ah,3Eh
mov bx,handle
int 21h
1
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6211 / 2445 / 403
Регистрация: 29.07.2014
Сообщений: 3,175
Записей в блоге: 4
07.05.2016, 17:03
proc3nt, всё правильно.
Только ты ищешь последний абзац, я искал последнее предложение, а ТС просил строку..
1
1 / 1 / 0
Регистрация: 10.11.2014
Сообщений: 83
07.05.2016, 19:00  [ТС]
proc3nt, А это получается только поиск, верно?
0
Прощай, Мир!
 Аватар для proc3nt
1673 / 831 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
07.05.2016, 19:13
Цитата Сообщение от balin Посмотреть сообщение
это получается только поиск
поиск и вывод на консоль. чтобы узнать количество символов в последней строке добавьте код перед закрытием файла
Assembler
1
2
sub bx,cx
dec bx   ;bx=количество символов в последней строке
1
1 / 1 / 0
Регистрация: 10.11.2014
Сообщений: 83
13.05.2016, 23:47  [ТС]
proc3nt, А вот если я ищу символ 0A как вот это реализовать?
Тоже самое как и?
Цитата Сообщение от proc3nt Посмотреть сообщение
Assembler
1
2
3
4
5
6
mov [buf+bx],'$'
lea di,[buf+bx]
dec di
mov cx,ax
mov al,0Ah
repne scasb
Добавлено через 47 минут
R71MT,proc3nt,
Помогите пожалуйста
Assembler
1
2
3
4
 int 21h
mov AL,2
mov CX,FFFF
mov DX,FFFF;
так я ставлю указатель на конец файла и сдвигаю на 2 (потому что первый символ будет -конец файла, а второй уже не известно)
Дальше по идее я должен сделать КАКОЕ то, и как сравнение с 0A. После этого указатель сдвинется на 1 вперед. поэтому я должен циклически сдвигать указатель на 1 пока не найду 0A.
0
1 / 1 / 0
Регистрация: 10.11.2014
Сообщений: 83
14.05.2016, 22:55  [ТС]
Определить количество символов в последней строке текстового файла Результат и саму строку показать на экране. Записать строку в новый файл.

Вот что я написал в итоге. Чтобы узнать последнюю строку с конца файла я двигаюсь и проверяю на конец строки 0A.
Только проблема у меня в этом самом месте. В отладчике она бесконечно в цикле двигается и не выходит. А значит не проходит сравнение, а почему я не понимаю.
Вот сам код с комментариями TASM
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
.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
Помогите пожалуйста разобраться.
1
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6211 / 2445 / 403
Регистрация: 29.07.2014
Сообщений: 3,175
Записей в блоге: 4
14.05.2016, 23:15
balin, зачем ты считывал содержимое файла в буфер, если потом работаешь с самим файлом?
Алгоритм должен быть примерно таким:

1. Считать файл в буфер. Функция возвратит размер файла в AX. Запоминаем его..
2. Закрыть этот файл. Он больше не нужен. Данные уже в буфере
3. Добавить к началу буфера размер файла. Окажешься в конце файла.
4. Искать справа-налево символ 0Аh, который укажет на начало последней строки.
5. При поиске считать в СХ кол-во символов от конца строки, до символа 0Аh.
6. Скопировать СХ-символов в выходной буфер и вывести этот буфер на экран и файл
1
1 / 1 / 0
Регистрация: 10.11.2014
Сообщений: 83
15.05.2016, 01:07  [ТС]
R71MT, так вроде понял
сейчас постараюсь переделать.

Добавлено через 17 минут
R71MT,
к началу буфера это будет так?
Assembler
1
2
3
mov Sizax,ax
..................
mov buf,[Sizax+buf] ;
Добавлено через 1 час 30 минут
R71MT,
Я вроде сделал по алгоритму.
Но вот большие сомнения, что я сделал правильно
1)Ошибки...
2)Я походу не понял как это записать вперед буфера
3)Зачем я копирую в выходной буфер, там же пусто, получается я вывожу только количество символов.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
.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 ?; буфер логического номера файла
    Sizax   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
    mov Sizax,ax
    
;--------------------
;Закрываю файл
  mov   ah,3eh            ; Закрыть файл!
  int   21h   
;------------------------
;Добавляю к началу буфера размер файла, переношусь в конец
lea di,[Sizax+buf]
xor cx,cx
search:
dec di
inc cx       ;счетчик
cmp di,0Ah   ;ищу символ конца строки справа-налево 
jne short search
mov buf1,cx  ;копирую количество символов в буфер
 
    mov ah,0Ah
    lea dx,text2
    int 21h   
  ;вывод на экран количества символов и самой строки
    mov ah,09h
    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
0
1 / 1 / 0
Регистрация: 10.11.2014
Сообщений: 83
15.05.2016, 11:24  [ТС]
Написал программу по заданию
Определить количество символов в последней строке текстового файла Результат и саму строку показать на экране. Записать строку в новый файл.
Проблема ПОКА, что которая есть это с проверкой на последний символ 0A.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
.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
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6211 / 2445 / 403
Регистрация: 29.07.2014
Сообщений: 3,175
Записей в блоге: 4
15.05.2016, 12:01
balin, зачем дублируешь темы?
..что делает функция(0Ah) досовского сервиса (у тебя строки 58/68). Это ввод строки! А ты чё делаешь?
Вот тебе пример на FASM'e решения твоей задачи:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
;== FASM code =======================
org 100h
jmp start
 
open      db  13,10,'  File Open:  $'    ; мессаги..
last      db  13,10,'Last String:  $'    ;
size      db  13,10,'String Size:  $'    ;
create    db  13,10,'Create File:  $'    ;
ok        db  'OK! $'                    ;
err       db  'ERROR!',7,'$'             ;
 
myData    db  'myData.txt',0       ; файл с данными
myFile    db  'myFile.txt',0       ; новый файл
buff      db  2048  dup(0)         ; буфер для данных
string    db  80    dup('$')       ; буфер для строки
fSize     dw  0                    ; размер файла
 
start:
; Файл с данными ==========================================
      mov   dx,open           ;
      call  message           ;
      mov   ax,3d00h          ; Открыть!
      mov   dx,myData         ;
      int   21h               ;
      jc    error             ; ошибка?
      xchg  ax,bx             ; отправляем хэндл в ВХ
      mov   dx,ok             ; мессага OK
      call  message           ;
      mov   ah,3fh            ; Читать содержимое файла,
      mov   dx,buff           ;   ..в файловый буфер
      mov   cx,0ffffh         ;
      int   21h               ;
      mov   [fSize],ax        ; сохраняем размер файла
      mov   ah,3eh            ; Закрываем его!
      int   21h               ;
 
; Поиск последней строки в буфере =========================
      mov   dx,last           ;
      call  message           ;
      std                     ; DF=1 (читать справа-налево)
      mov   di,buff           ; где искать
      mov   cx,[fSize]        ; длина поиска
      add   di,cx             ; перемещаемся в конец буфера
      push  cx                ; запомним позицию для счётчика
      mov   al,0Ah            ; что искать
      repne scasb             ; ПУСК!
      cld                     ; нашли 0Аh (или СХ=0). сброс DF
      pop   bx                ; расчитываем длину
      sub   bx,cx             ;      ..последней строки
      xchg  cx,bx             ;
      sub   cx,2              ; (коррекция длины)
      mov   [fSize],cx        ; запомним для вывода на экран
      xchg  si,di             ; SI - источник для копирования
      add   si,2              ;
      mov   di,string         ; DI - приёмник строки
      rep   movsb             ; копируем СХ-байт из SI в DI
 
; Вывод последней строки и её размера на экран ============
      mov   dx,string         ; выводим на экран строку
      call  message           ;
      mov   dx,size           ;
      call  message           ;
      mov   ax,[fSize]        ; выводим на экран длину строки
      mov   bx,10             ;       ..в 10-тичном виде
      call  hex2asc           ;
 
; Создаём файл и отправляем в него строку =================
      mov   dx,create         ;
      call  message           ;
      mov   ah,3ch            ; Создать!
      mov   cx,20h            ;   ..c атрибутом R/W
      mov   dx,myFile         ;
      int   21h               ;
      xchg  bx,ax             ; дескриптор для записи
      mov   ah,40h            ; Запись в файл!
      mov   cx,[fSize]        ; ..байт для записи
      mov   dx,string         ; что записывать
      int   21h               ;
      mov   ah,3eh            ; Закрыть файл!
      int   21h               ;
      mov   dx,ok             ; мессага ОК!
      call  message           ;
      jmp   exit              ;
 
; Обработчик ошибки и выход ===============================
error:                        ; (обработчик ошибки)
      mov   dx,err            ;
      call  message           ;
exit:                         ;
      xor   ax,ax             ;
      int   16h               ;
      int   20h               ;
 
;ннннннннннннннннн П Р О Ц Е Д У Р Ы нннннннннннннннннннннннннннннннннннн
;------------------------------------------------------------------------
message:                      ;
      mov   ah,9              ; вывод строки на экран
      int   21h               ;
ret                           ;
;------------------------------------------------------------------------
hex2asc:                 ; Функция переводит числа в символы
   pusha                 ; Вход:  АХ = число, BX = система счисления
   xor   cx,cx           ; Выход: на экране
isDiv:                   ;
   xor   dx,dx           ;
   div   bx              ;
   push  dx              ;
   inc   cx              ;
   or    ax,ax           ;
   jnz   isDiv           ;
isOut:                   ;
   pop   ax              ;
   cmp   al,9            ;
   jle   noHex           ;
   add   al,7            ;
noHex:                   ;
   add   al,30h          ;
   int   29h             ;
   loop  isOut           ;
   popa                  ;
ret                      ;
1
1 / 1 / 0
Регистрация: 10.11.2014
Сообщений: 83
15.05.2016, 12:43  [ТС]
R71MT,
Спасибо.
Цитата Сообщение от R71MT Посмотреть сообщение
.что делает функция(0Ah) досовского сервиса (у тебя строки 58/68). Это ввод строки!
Я так собирался перенести на другую строчку каретку.
0
1 / 1 / 0
Регистрация: 10.11.2014
Сообщений: 83
15.05.2016, 12:58  [ТС]
R71MT, Я скачал FASM, там где лежит сам FASM положил myData.txt
А он при открытии выдает ошибку.
Миниатюры
Определить количество символов в последней строке текстового файла  
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6211 / 2445 / 403
Регистрация: 29.07.2014
Сообщений: 3,175
Записей в блоге: 4
15.05.2016, 13:19
..убери семёрку в строке.
0
1 / 1 / 0
Регистрация: 10.11.2014
Сообщений: 83
15.05.2016, 13:26  [ТС]
R71MT, Блин... тоже саоме
Миниатюры
Определить количество символов в последней строке текстового файла  
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8655 / 4491 / 1669
Регистрация: 01.02.2015
Сообщений: 13,899
Записей в блоге: 12
15.05.2016, 13:30
Но ведь его может и не быть (0Ah) в самой последней строке файла. Значит нужно дополнить условие
0Ah найден или 0Ah не найден и конец файла.
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6211 / 2445 / 403
Регистрация: 29.07.2014
Сообщений: 3,175
Записей в блоге: 4
15.05.2016, 14:47
balin, винда у тебя не 64-бит?
Вот тебе мой фасм-1.67, на котором я собирал исходник.
Вложения
Тип файла: zip FASM-1.67.ZIP (549.6 Кб, 5 просмотров)
1
1 / 1 / 0
Регистрация: 10.11.2014
Сообщений: 83
15.05.2016, 15:46  [ТС]
R71MT, блин. у меня то как раз 64.
почитал, поискал
не нашел такой ошибки.

Добавлено через 7 минут
R71MT, ВСЕЕЕ РАБОТАЕТ
ВСёё РАЗОБРАЛСЯ!!!
СПАСИБО!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.05.2016, 15:46
Помогаю со студенческими работами здесь

Подсчитать количество символов в каждой строке текстового файла
Добрый вечер, вот такую задачу нужно реализовать, подскажите пожалуйста как ее реализовать, если можно - комментариями, буду очень...

Подсчитать количество символов в каждой строке данного текстового файла
Помогите пожалуйста. Задача 6. Дан текстовый файл. Подсчитать количество символов в каждой строке.

В начале каждой строки текстового файла записать количество символов в этой же строке
Написать программу которая копирует или преобразовывает текст входного текстового файла(файлов)так чтобы в выходном файле: В начале...

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

Перед каждой строкой текстового файла вставить номер строки и количество символов в этой строке
Перед каждой строкой текстового файла вставить номер строки и количество символов в этой строке


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru