Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
RAZOR1703
2 / 2 / 0
Регистрация: 05.10.2010
Сообщений: 37
1

Программа с использованием команд обработки строк

10.10.2010, 16:48. Просмотров 1024. Ответов 6
Метки нет (Все метки)

Снова нужна ваша помощь с лабораторной
Есть массив из символов (mas1 db 'aaad ad qqwert rt a wedas xzsz z dd'). Определить количество слов, в которых содержится больше 3-х символов. Слова разделены пробелом.
Ситуация в том, что я даже не представляю, как можно реализовать данный алгоритм. То есть, просто определить количество слов - вроде бы не сложно. Но как сделать так, чтобы одновременно шла еще и проверка на количество символов?
Прошу помощи, очень сильно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2010, 16:48
Ответы с готовыми решениями:

Программа с использованием команд обработки строк
вобщем нужно напсать програмку, но я зашел в тупик задание: Задано 8 слов по...

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

Разработка программ с использованием цепочечных команд
помогите, пожалуйста, в написании программы: Ввести строку из произвольного...

Линейное программирование с использованием команд сдвига???
вычислить y с использованием сдвигов y=((c*3)/2)+((c+d)/4) c,d вводиться с...

Разработка программ с использованием арифметических команд на языке ассемблер
По возможности напишите программу по ассемблеру в Turbo Assembler; Задание:...

6
assemb
63 / 63 / 1
Регистрация: 14.04.2010
Сообщений: 170
10.10.2010, 23:47 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
proga:
lea di,mas1    ;адрес начала строки
mov cx,len    ;длина
mov al,20h    ;ищем пробел
cikl:
    mov bx,0    ;bx - подсчёт длины одного слова
_c:
    inc bx
    cmp [di],al    ;если пробел?
    je @f    ;то на след-ю метку
    inc di
    loop _c    ;иначе вернёмся для поиска пробела
    jmp _exit
@@:              ;нашли пробел
    cmp bx,3    ;длина больше 3-х?
    ja @f    ;да? на сл-ю метку
    inc di
    loop cikl    ;тогда обнулим длину строки и на начало цикла
@@:
    inc kol    ;подсчёт строк длиной больше 3-х
    inc di
    loop cikl
    
_exit:
ret
 
mas1 db 'aaad ad qqwert rt a wedas xzsz z dd'
len equ $-mas1
kol db 0
Добавлено через 1 час 16 минут
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
lea si,mas1
mov cx,len
mov ah,20h
cikl:
    mov bx,0
@@:
    inc bx
    lodsb
    cmp al,ah
    je @f
    loop @b
    jmp _exit
@@:              ;нашли пробел
    cmp bx,3
    ja @f
    loop cikl
@@:
    inc kol
    loop cikl
    
_exit:
ret
1
kidiam
22 / 22 / 0
Регистрация: 12.07.2010
Сообщений: 42
11.10.2010, 00:02 3
Цитата Сообщение от RAZOR1703 Посмотреть сообщение
Определить количество слов, в которых содержится больше 3-х символов
а получаем число bx на единицу больше. Исправить расположение inc bx на три строки ниже. С
Assembler
1
2
3
4
5
6
@@:
        inc bx
        lodsb
        cmp al,ah
        je @f
        loop @b
на
Assembler
1
2
3
4
5
6
@@:
        lodsb
        cmp al,ah
        je @f
        inc bx
        loop @b
т.е. добавление bx после нахождения искомого символа
1
assemb
63 / 63 / 1
Регистрация: 14.04.2010
Сообщений: 170
11.10.2010, 00:45 4
Так тоже правильно, но надо исправлять условие cmp bx,3 ja на больше или равно!

Добавлено через 18 минут
тоесть если бы в mas1 db 'aaad ad qqwert rt a wedas xzsz z dd' к ad или rt прибавить букву
1
kidiam
22 / 22 / 0
Регистрация: 12.07.2010
Сообщений: 42
11.10.2010, 00:51 5
Если изменить условие с "ja @f" на "jae @f", то будет количество слов длиной два и более. Тогда уже проще изменить константу "3" на другую менее очевидную.
1
murderer
3319 / 1465 / 134
Регистрация: 06.10.2010
Сообщений: 3,217
11.10.2010, 13:42 6
так изящнее
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
org 100h
push ds
pop  es
mov  di,mas1
mov  si,di
mov  cx,len
mov  al,' '
mov  dx,48
 
@@:repne scasb ;Находим пробел
   sub   si,di ;вычисляем длину слова
   cmp   si,-4 ;если длина больше 3
   adc   dl,dh ;увеличиваем счётчик
   mov   si,di
   test  cx,cx
jne @b
 
mov ah,2    ;выводим на экран количество слов
int 21h     ;с длиной больше 3 символов
xor ax,ax
int 16h
ret
 
mas1 db 'aa aw qqwert rt a wess xzsz ddw'
len  =  $-mas1+1
1
RAZOR1703
2 / 2 / 0
Регистрация: 05.10.2010
Сообщений: 37
11.10.2010, 18:19  [ТС] 7
Ух ты! Вот это спасибо, ребят. Правда, очень помогли. Спасибо огромное
0
11.10.2010, 18:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2010, 18:19

команды обработки строк данных и организации циклов.
Дана последовательность из девяти символов(байтов),размещенных в сегменте...

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

Программа с использованием макроопределений
нужно написать программу сброса бит 0 и 1 регистра RN, если они оба...


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

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

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