Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.54/24: Рейтинг темы: голосов - 24, средняя оценка - 4.54
Norgan
4 / 4 / 3
Регистрация: 25.11.2008
Сообщений: 58
#1

Подсчитать количество слов в строке

26.09.2010, 16:29. Просмотров 4742. Ответов 2
Метки нет (Все метки)

Доброго времени суток! Прошу помощи в решении следующего задания:
Пользователь, вводит несколько слов и нужно подсчитать количество слов(между словами пробелы). Вывести результат на экран.
Вот код моей программы:
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
data          SEGMENT  
 str1   db  30 dup (?)              
 cout   db  13,"Vvedite stroku:> ",'$'
     
data          ENDS
 
code          SEGMENT
              ASSUME   cs:code,ds:data
               
begin:
    mov ax,data
    mov ds,ax
 
    mov     ah,09h
    mov dx,offset cout
    int     21h
    
    mov     ah,3fh
    lea dx,str1
    mov     cx,30
    mov bx,0    
           int  21h
    sub       ax,2 ;считаем длину нашей строку без символа возврата каретки и перевода строкаи
    mov cx,ax ;записываем сколько раз повторить команду rep
    xor si,si
    xor ax,ax
 
    cld
    mov al,' ' ;символ для сравнивания
    
    lea di,str1 ;указатель на строку для обработки
 
oi: rep scasb   ; повторяем для каждого символа
    jne notf      ; если символ не равен ' ', тогда прыгаем на метку notf
    inc si  ; увеличиваем счетчик слов
notf:
    jcxz    oi1        ; проверяем равен ли счетчик 0
    jmp oi          ; прыгаем обратно если не равен
oi1:
           inc si                 ;рассчитываем на то, что последнее слово без пробела
    xor ax,ax      ;начинаем вывод на экран результат
    mov ax,si
 
        xor     cx, cx
        mov     bx, 10
oi2:
        xor     dx,dx
        div     bx
        push    dx
        inc     cx
        test    ax, ax
        jnz     oi2
        mov     ah, 02h
oi3:
        pop     dx
        add     dl, '0'
        int     21h
    loop    oi3
 
        mov ax,4c00h       
        int 21h
 
code          ENDS
              end      begin
Программу обязательно написать с использованием операторов обработки блоков данных.
Считает оно не правильно и почему не могу никак понять, буду очень благодарен если укажите где моя ошибка!

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2010, 16:29
Ответы с готовыми решениями:

Подсчитать количество слов в строке..
Доброго времени суток. Мне нужно подсчитать количество слов в строке.(слова...

В строке подсчитать количество слов (слова разделяются пробелами)
помогите решить задачку.Дана последовательность символов S1,...,Sn. Группы...

Подсчитать количество слов меньше самого длинного
Помогите пожалуйста составить программу: Выполнить ввод строки с 40 символов....

Подсчитать количество содержащихся в строке символов С
17. Дана строка и символ С. Подсчитать количество содержащихся в ней символов...

Подсчитать количество цифр в четвертой строке файла
Необходимо Подсчитать количество цифр в четвертой строке файла. Содержимое...

2
Goodwin98
2521 / 817 / 10
Регистрация: 31.05.2009
Сообщений: 1,672
26.09.2010, 17:03 #2
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
data          SEGMENT  
 str1   db      30 dup (?)                              
 cout   db      13,"Vvedite stroku:> ",'$'
         
data          ENDS
 
code          SEGMENT
              ASSUME   cs:code,ds:data
               
begin:
        mov     ax,data
        mov     ds,ax
        mov     es,ax
 
        mov     ah,09h
        mov     dx,offset cout
        int     21h
        
        mov     ah,3fh
        lea     dx,str1
        mov     cx,30
        mov     bx,0    
           int  21h
        sub       ax,2 ;считаем длину нашей строку без символа возврата каретки и перевода строкаи
        mov     cx,ax ;записываем сколько раз повторить команду rep
        xor     si,si
        xor     ax,ax
 
        cld
        mov     al,' ' ;символ для сравнивания
        
        lea     di,str1 ;указатель на строку для обработки
 
oi:     repne     scasb   ; повторяем для каждого символа
        jne     oi1
        inc     si      ; увеличиваем счетчик слов
        
        jmp     oi          ; прыгаем обратно если не равен
oi1:
           inc si                 ;рассчитываем на то, что последнее слово без пробела
        xor     ax,ax      ;начинаем вывод на экран результат
        mov     ax,si
 
        xor     cx, cx
        mov     bx, 10
oi2:
        xor     dx,dx
        div     bx
        push    dx
        inc     cx
        test    ax, ax
        jnz     oi2
        mov     ah, 02h
oi3:
        pop     dx
        add     dl, '0'
        int     21h
        loop    oi3
 
        mov     ax,4c00h       
        int     21h
 
code          ENDS
              end      begin
2
thom
0 / 0 / 0
Регистрация: 26.07.2015
Сообщений: 1
15.12.2012, 14:43 #3
Здравствуйте, а что нужно дописать чтобы эта программа выводила результат в 2ух системах счисления, 10чной и 16чной. Буду очень благодарен за ответ
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2012, 14:43

Посчитать количество слов в строке: исправить код
Помогите пож. поправить программу. Она должна считать кол-во слов в строке....

Вводить слова с клавиатуры, вывести на экран количество слов и количество слов с гласной буквы
Всем привет! Есть код, суть: вводить слова с клавиатуры, вывести на экран...

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


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

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

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