Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 10.12.2012
Сообщений: 9
1

Подсчет количства слов в текстовом файле

11.12.2012, 22:21. Показов 966. Ответов 8
Метки нет (Все метки)

Если кого-то не затруднит написание этой программы на ассемблере , пожалуйста ответьте тут
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2012, 22:21
Ответы с готовыми решениями:

Подсчет символов в текстовом файле.
Помогите пожалуйста! Написать программу на ассемблере подсчитывающую количество символов в...

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

Подсчет слов в текстовом файле
кaк пoдсчитaт скoлкo нaпример: слoв 'windows' встречaются в теxтoвoм фaиле пoд нaзвaнием 'data.тxт '

Подсчет количества слов в текстовом файле
Дан текстовый файл. Составить программу, подсчитывающую количество слов в файле.

8
Ушел с форума
Автор FAQ
14189 / 7071 / 834
Регистрация: 11.11.2010
Сообщений: 12,687
12.12.2012, 04:13 2
detr, схема такова:
  1. открываешь файл (как это сделать подскажет Google если набрать в поисковой строке "DOS открытие файла")
  2. читаешь содержимое файла в буфер и закрываешь файл (совет, как это сделать содержится в пункте 1)
  3. командой REPNE SCASB ищешь символы пробела и каждый раз увеличиваешь счетчик пробелов на единичку
  4. количество слов равно числу пробелов + 1
  5. выводишь найденное число на экран (ну ты уже понял как)
0
0 / 0 / 0
Регистрация: 10.12.2012
Сообщений: 9
15.12.2012, 11:37  [ТС] 3
что-то у меня ничего путного не получилось
0
Ушел с форума
Автор FAQ
14189 / 7071 / 834
Регистрация: 11.11.2010
Сообщений: 12,687
15.12.2012, 17:42 4
detr, хочешь чтобы пожалели?
можно было и показать, ЧТО получилось, на чем возникла проблема, а так -- видно, что это просто выжидание пока кто-то напишет за тебя программу
0
0 / 0 / 0
Регистрация: 10.12.2012
Сообщений: 9
20.12.2012, 14:41  [ТС] 5
Цитата Сообщение от Mikl___ Посмотреть сообщение
detr, хочешь чтобы пожалели?
можно было и показать, ЧТО получилось, на чем возникла проблема, а так -- видно, что это просто выжидание пока кто-то напишет за тебя программу
Да всё не получается

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

Assembler
1
2
3
4
5
6
7
8
.286 
.model tiny
.code
org 100h
start:  
    mov ax,3D00h;
    mov dx,offset string;
    int 21h;
0
Ушел с форума
Автор FAQ
14189 / 7071 / 834
Регистрация: 11.11.2010
Сообщений: 12,687
20.12.2012, 14:52 6
detr, замечательно, а где 2-5 пункты?
0
0 / 0 / 0
Регистрация: 10.12.2012
Сообщений: 9
22.12.2012, 13:00  [ТС] 7
Перелопатил код заново, собирается но почему то не работает

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
 
.MODEL tiny
 
.stack 256
 
org 100h
 
 DATASEG
 
FileName DB 'C:/asm/data.dat',0h
 
buffer label byte
 
;buffer db 1
 
String db   5 dup (?),'$' ; Резервируем 5 байт для строки
 
StringEnd   =   $-1 ; Указывает на символ '$'
 
 CODESEG
 
Start:
 
;открываю файл
 
mov dx, OFFSET FileName
 
mov ah,3dh
 
mov al,2 ;доступ
 
int 21h
 
mov bx,1; становить счётчик = 1
 
mov cx,1 ;читать байт
 
mov dx,offset buffer
 
read_next:
 
mov ah,3fh
 
int 21h
 
dec ax
 
js end_prog ;
 
cmp byte ptr buffer,32h ; если не считан пробел,
 
jne read_next ; считать следующий байт,
 
inc bx ; иначе - увеличить счётчик
 
jmp read_next ; считать следующий байт
 
end_prog:
 
; вывести содержимое счётчика
 
std ; Устанавливаем ОБРАТНЫЙ порядок записи
 
lea di,StringEnd-1 ; ES:DI = последний символ строки String
 
mov ax, bx ; Заносим в AX число для перевода
 
 ; Начинаем перевод числа AX в строку
 
mov cx,10 ; Задаемся делителем CX = 10
 
re:
 
xor dx,dx ; Обнуляем DX (для деления)
 
div cx ; Делим DX:AX на CX (10),
 
; Получаем в AX частное, в DX остаток
 
xchg    ax,dx ; Меняем их местами (нас интересует остаток)
 
add al,'0' ; Получаем в AL символ десятичной цифры
 
stosb ; И записываем ее в строку
 
xchg    ax,dx ; Восстанавливаем AX (частное)
 
or  ax,ax ; Сравниваем AX с 0
 
jne re ; Если не ноль, то повторяем
 
; Теперь осталось вывести строку на экран
 
mov ah,9
 
lea dx,[di+1] ; Заносим в DX адрес начала строки
 
int 21h ; Выводим ее на экран
 
int 20h ; Выходим из программы
 
End Start
0
270 / 265 / 11
Регистрация: 24.12.2010
Сообщений: 328
22.12.2012, 14:30 8
Первое, что бросилось в глаза, в bx организован счетчик пробелов, тогда как при чтении файла там должен находиться его дескриптор.
0
0 / 0 / 0
Регистрация: 10.12.2012
Сообщений: 9
23.12.2012, 19:11  [ТС] 9
Теперь всё

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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
MODEL SMALL
 
STACK 256
 
DATASEG
 
;FileName DB 'data.dat',0h,'$'
 
FileName DB 'wnp.txt',0h,'$'
 
buffer DB 1024 dup (?) ; 1kB
 
count DW 0h ; количество слов
 
String db 5 dup (?),'$' ; Резервируем 5 байт для строки
 
StringEnd = $-1 ; Указывает на символ '$'
 
CODESEG
 
Start:
 
mov ax,@data ; установка в ds адреса
 
mov ds,ax ; сегмента данных
 
mov es,ax
 
;открываю файл
 
mov dx,offset FileName
 
mov ah,3dh
 
mov al,0 ; доступ
 
int 21h
 
mov bx,ax ; дескриптор файла в ВХ
 
mov cx,1024 ; читать по 1kB
 
mov dx,offset buffer
 
xor di, di ; флаг что предидущий символ не буква
 
 
 
read_next:
 
mov ah,3fh ; читаем
 
int 21h
 
cmp ax,0
 
je end_prog ; если 0 файл закончился
 
xor si, si
 
 
 
L: ; перебираем буфер
 
cmp byte ptr buffer[si], 'a'
 
jb AZ ; если <a проверяемы на большие
 
cmp byte ptr buffer[si], 'z'
 
ja is_not_char ; если >z переходим к следующему символу
 
jmp is_char ; буква
 
AZ:
 
cmp byte ptr buffer[si], 'A'
 
jb is_not_char
 
cmp byte ptr buffer[si],'Z'
 
ja is_not_char ; если не буква переходим к следующему
 
 
 
is_char:
 
cmp di, 0h
 
jne check_buff ; если пред идущий символ был буквой продолжаме
 
inc di  ; иначе запоминаем
 
inc count ; и увеличиваем количество слов
 
jmp check_buff
 
 
 
is_not_char:
 
xor di, di
 
 
 
 
 
check_buff:
 
inc si
 
cmp ax,si
 
je read_next ; считать следующий буфер
 
jmp L
 
end_prog:
 
mov ah,3eh ; закрыть файл
 
int 21h
 
std ; Устанавливаем ОБРАТНЫЙ порядок записи
 
lea di,StringEnd-1 ; ES:DI = последний символ строки String
 
;pop ax
 
mov ax,count
 
; Начинаем перевод числа AX в строку
 
mov cx,10 ; Задаемся делителем CX = 10
 
Repeat:
 
xor dx,dx ; Обнуляем DX (для деления)
 
div cx ; Делим DX:AX на CX (10),
 
; Получаем в AX частное, в DX остаток
 
xchg ax,dx ; Меняем их местами (нас интересует остаток)
 
add al,'0' ; Получаем в AL символ десятичной цифры
 
stosb ; И записываем ее в строку
 
xchg ax,dx ; Восстанавливаем AX (частное)
 
or ax,ax ; Сравниваем AX с 0
 
jne Repeat ; Если не ноль, то повторяем
 
; вывести строку на экран
 
mov ah,09h
 
lea dx,[di+1] ; Заносим в DX адрес начала строки
 
int 21h ; Выводим ее на экран
 
; выходим
 
mov ah,04Ch
 
mov al,0h
 
int 21h
 
End Start
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2012, 19:11

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

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

Подсчет количества слов в текстовом файле
Подсчет количества слов в текстовом файле, содержащем целые числа и слова русского и английского...

Подсчет количества слов в текстовом файле
Добрый день! Помогите пожалуйста написать Батник: Подсчет количества слов в текстовом файле,...

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

Подсчёт количества слов в данном текстовом файле
Задание такое: определить количество слов в данном текстовом файле. Слова - последовательности...

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.