Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 25.03.2013
Сообщений: 4
1
TASM

Поиск подстроки в строке

26.04.2013, 10:23. Показов 2163. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Можете помочь исправить ошибку
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
; Лабораторная работа №4
; Манякин Алексей, вариант 8
; Программа определяет первое вхождение S2 в строку S1
; Длина строки S1 должна быть больше чем длина S2
; Строки должны заканчиваться 0 (Z-String))
 
.model small
 
.stack 200h             ; Размер стека 512 байт
.data
S1    DB      'kgkghjkyrtuooodfhgfhtyjre7itygooojhdfgsdgdzgdx',0h
S2    DB      'ooo',0h  ;строка для поиска
n1    DW     ?          ; Длина строки S1
n2    DW     ?          ; Длина строки S2
msg4 db   'Nachinaia  s          simvola $'
MsgFound            DB      'Stroka naidena! ',13,10,'$'
MsgNotFound     DB      'Stroka ne naidena! ',13,10,'$'
 
.code
    mov ax,@DATA ; Установка регистра DS на сегмент данных
        mov ds,ax
    mov es,ax
 
    mov ah,0  ;уст. видео режим. Очистить экран
    mov al,2   ;текст, формат  окна   80x25
    int 10h      ;видео сервис
 
        ; Определение длины строки S1
 
 
 
 
 
STRLEN:  
mov DI, offset s1 
mov cx,0ffh ;Длина сравниваемых строк 
mov al,0
repne scasb ;Поиск различия в строках 
sub di,offset s1
mov n1,di
 
 
mov DI, offset s2 
mov cx,0ffh ;Длина сравниваемых строк 
mov al,0
repne scasb ;Поиск различия в строках 
sub di,offset s2
mov n2,di
 
 
 
 
 
                ; Инициализация
        mov si,0
        mov di,0
        mov bx,0
 
 
 
        ; Реализация n1-n2+1
        mov cx,n1
        sub cx,n2
        inc cx
CYCLE:
        mov al,[S1+bx]
        cmp al,S2
        jz CHAREQU
CC5:
        inc bx
        cmp bx,cx
        jnz CYCLE
        jmp NOTFOUND
        
        ; Символы равны
CHAREQU:
        mov dl,1     ;используем как флаг
        mov di,0
 
CYCLE2:
        mov al,[S1 + bx + di]
        cmp al,[S2 + di]
        jz CHAREQU2
        ; Символы не равны
        ; Сбрасываем флаг
        mov dl,0
 
CHAREQU2:     ; Символы равны
        inc di
        cmp di,n2
        jnz CYCLE2
        ; Смотрим нашли ли мы строку
        cmp dl,1
        jz FOUND          ; Если нашли
        jmp CC5            ; Если не нашли
 
FOUND:
    
        mov ah,09h
        lea dx,MsgFound
        int 21h
 
; первод номера позиции в стороку и вывод на экран
 
             mov ax,bx
         inc ax
         mov cx,0010
         mov si,offset(msg4) + 17
c2:
        cmp ax,cx
        jb c3
        xor dx,dx         
        div cx
        or dl,30h
        mov [si],dl
        DEC si 
        jmp c2
c3:
        or al, 30h
        mov [si], al        
        
        mov ah,09h                      ; помещаем в al 09h - при 21 прирывании будет выведено сообщение
            mov dx,offset(msg4)   ;загружаем в  dx адрес ASCII строки символов заканчивающихся '$'
            int 21h     
 
jmp EXITDOS
 
NOTFOUND:
        mov ah,09h
        lea dx,MsgNotFound
        int 21h
 
EXITDOS:    ; Выход в DOS
 
        MOV DH,00
        MOV AH,0 ;ожидать следующую нажатую клавишу
        INT 16H
 
        mov ax,4C00h
    int 21h
 
; Определение длины строки
; Определяет длину строки (не считая  0)
; Входные данные:
; STR - смещение к строке
; Выходные данные:
; n - длина строки
; Вытаскивание параметров из стека - как в Си
 
end
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2013, 10:23
Ответы с готовыми решениями:

Ввести с клавиатуры строку. Найти шаблон во введенной строке (поиск подстроки в строке)
Помогите написать программу. Ввести с клавиатуры строку. Ввести с клавиатуры коротенькую строку -...

Поиск подстроки в строке
Доброго всем времени суток!!!Требуется решить следующую задачу. Ввести с клавиатуры две строки....

Поиск подстроки в строке
Ассемблер, робота со строками. Ребята, нашел исходник проги, находящей подстроку в строке, но не...

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

4
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
26.04.2013, 10:31 2
Zebrrrr,
а в чем ошибка? У ошибки есть номер и ошибка должна указывать на какую-то строку

Добавлено через 54 секунды
и используй тэги [АSМ] и [/АSМ] читать программу невозможно...
0
0 / 0 / 0
Регистрация: 25.03.2013
Сообщений: 4
26.04.2013, 10:48  [ТС] 3
если запускать прогу он выдает что строка не найдена,хотя это не так
преподаватель сказал,что ошибка в нахождении длины строки
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
mov DI, offset s1 
mov cx,0ffh ;Длина сравниваемых строк 
mov al,0
repne scasb ;Поиск различия в строках 
sub di,offset s1
mov n1,di
 
 
mov DI, offset s2 
mov cx,0ffh ;Длина сравниваемых строк 
mov al,0
repne scasb ;Поиск различия в строках 
sub di,offset s2
mov n2,di
ноя хз как ее исправить
scasb ставит флаг после нуля
а должен до нуля
как это можно исправить
0
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
26.04.2013, 10:58 4
Zebrrrr,
я про тэги зря написал? Для чего искать длину строки если строка не изменяется?
Assembler
1
2
S1 DB 'kgkghjkyrtuooodfhgfhtyjre7itygooojhdfgsdgdzgdx',0h
Num = $ - S1; <-- вот она длина строки
И вообще не программа, а бред, открой учебник по ассемблеру и найди там "поиск подстроки в строке" или поиск в интернете сделай...
0
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
26.04.2013, 12:18 5
Цитата Сообщение от Mikl___ Посмотреть сообщение
открой учебник по ассемблеру и найди там "поиск подстроки в строке"
дак вот уже
0
26.04.2013, 12:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.04.2013, 12:18
Помогаю со студенческими работами здесь

Поиск подстроки в строке
Доброго времени суток, помогите! Написать программу, определяющую номер позиции, с которой ...

Поиск подстроки в строке
здравствуйте, помогите пожалуйста в написании программы под TASM. задача: Найти индекс первого...

Поиск подстроки в строке
собственно есть строка program assembler есть слово assembler найти слово assembler, при этом...

Поиск подстроки в строке
Нужно найти подстроку в строке. Уже который день найти не могу косяк. .386 .model...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru