С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
1 / 1 / 1
Регистрация: 08.10.2016
Сообщений: 28
MASM32

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

30.10.2017, 22:28. Показов 3081. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
"В заданной строке с нулевым завершителем определить позицию заданной подстроки."
Помогите с кодом, пожалуйста. Дело в том, что я немного не понимаю, что от меня требуется. На просторах форума нашел такой код, но то ли это, к тому же, MASM32 ругается.
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
.8086
.MODEL TINY
;
CR    EQU   0Dh
LF    EQU   0Ah
;
.CODE
      ORG   100h
START:
      LEA   DX, sdInfo
      CALL  showSd
STR_LOOP:
; Input string
      LEA   BX, kbBufStr
      LEA   DX, sdString
      CALL  inpSd
      JZ    EXIT
      MOV   lwString, AX
; Input substring
      LEA   BX, kbBufSub
      LEA   DX, sdSubStr
      CALL  inpSd
      JZ    STR_LOOP
      MOV   lwSubstr, AX
;
      LEA   BX, chBufStr
      MOV   DX, lwString
SUB_LOOP:
      CMP   DX, lwSubstr
      JNC   DO_CMP
      LEA   DX, sdNotFound
      CALL  showSd
      JMP   STR_LOOP
DO_CMP:
      MOV   DI, BX
      LEA   SI, chBufSub
      MOV   CX, lwSubstr
      REPE CMPSB
      JE    SUB_FOUND
      DEC   DX
      INC   BX
      JMP   SUB_LOOP
SUB_FOUND:
; Substring found
      LEA   DX, sdOffset
      CALL  showSd
; Display Result
      MOV   AX, DI
      SUB   AX, Offset chBufStr
      SUB   AX, lwSubstr
      AAM
      MOV   CX, AX
      TEST  CH, CH
      JZ    LOW_DIGIT
      MOV   DL, CH
      CALL  showDigit
LOW_DIGIT:
      MOV   DL, CL
      CALL  showDigit
      LEA   DX, sdCrLf
      CALL  showSd
      JMP   STR_LOOP
EXIT:
      RET
;
showSd:
; Input: DX = Message Address
      MOV   AH, 9
      INT   21h
      RET
;
showDigit:
; Input: DL = Digit in range 0-9
      ADD   DL, "0"
      MOV   AH, 2
      INT   21h
      RET
;
inpSd:
; Input:  DX = Message Address
;         BX = Buffer Address
; Output: AX = String Length
      CALL  showSd
      MOV   [BX], Byte Ptr BufLen
      MOV   DX, BX
      MOV   AH, 0Ah
      INT   21h
      LEA   DX, sdCrLf
      CALL  showSd
      XOR   AH, AH
      MOV   AL, [BX+1]  ; String length
      TEST  AX, AX
      RET
;
.DATA
lwString    DW    ?
lwSubstr    DW    ?
sdInfo      DB    "Searches substring in string; enter empty string to exit"
sdCrLf      DB    CR, LF, "$"
sdString    DB    " string: $"
sdSubStr    DB    " substr: $"
sdNotFound  DB    " not found", CR, LF, "$"
sdOffset    DB    " offset: $"
PromptLen   EQU   9
BufLen      EQU   80 - PromptLen
kbBufStr LABEL Byte
chBufStr    EQU   kbBufStr + 2
kbBufSub    EQU   chBufStr + BufLen
chBufSub    EQU   kbBufSub + 2
;
      END   START
Добавлено через 33 минуты
Программа нужна на MASM32

Добавлено через 13 минут
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
; masm windows gui #
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data
MsgCaption      db "вхождения символов из подстроки str2 в строку str1",0
str2     db    "rats",0
str1     db    "six little rats, big fat rat and three old rats",0
num = $ - str1 + 1
str3    db num dup (0)
count dd 0
 
.code
start:  call strfind2
    invoke MessageBox, NULL,eax, addr MsgCaption, MB_OK
    invoke ExitProcess,NULL
strfind2 proc
    push ebx
    push esi
    push edi
    invoke lstrlen, addr str2
    dec eax
    mov ebx,eax
    invoke lstrlen, addr str1
    mov count,eax
    mov str1[eax],0Dh
    mov edx,offset str3
    sub edx,offset str1
a2: mov ecx,count
    mov edi,offset str1
    mov al,str2[bx]
a1: repne scasb
    jecxz exit
    mov [edx+edi-1],al
    jmp a1
exit:   dec bx
    jns a2
    mov ecx,num-1
    mov edi,offset str3
    mov esi,edi
a3: lodsb
    or al,al
    jz a4
    stosb
a4: loop a3
    mov byte ptr [edi],0
    mov eax,offset str1
    pop edi
    pop esi
    pop ebx
    ret
strfind2 endp
end start
Добавлено через 24 секунды
Нашел, может, кому-то пригодится
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.10.2017, 22:28
Ответы с готовыми решениями:

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

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

Поиск подстроки в строке
Ввести строку из произвольного числа символов и произвести в ней поиск подстроки Computer. Если...

1
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6809 / 2049 / 238
Регистрация: 14.12.2014
Сообщений: 4,300
Записей в блоге: 12
02.11.2017, 09:35
Лучший ответ Сообщение было отмечено LoneProphet как решение

Решение

Всё проще:
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
.686P
.MODEL Flat,StdCall
OPTION CASEMAP:NONE
 
INCLUDE         \MASM32\INCLUDE\WINDOWS.INC
INCLUDE         \MASM32\INCLUDE\KERNEL32.INC
INCLUDE         \MASM32\INCLUDE\USER32.INC
INCLUDE         \MASM32\INCLUDE\MSVCRT.INC
INCLUDE         \MASM32\INCLUDE\MASM32.INC
 
INCLUDELIB      \MASM32\LIB\KERNEL32.LIB
INCLUDELIB      \MASM32\LIB\USER32.LIB
INCLUDELIB      \MASM32\LIB\MSVCRT.LIB
INCLUDELIB      \MASM32\LIB\MASM32.LIB
 
.DATA
 
Source          DB      'Hello my dear friend!',0
Find            DB      'dear',0
Fmt             DB      '%d',0
 
.CODE
 
Start:
 
                invoke  InString, 1, ADDR Source, ADDR Find
 
                invoke  crt_printf, ADDR Fmt, eax
 
                invoke  ExitProcess, NULL
 
END             Start
D:\masm32\bin\ml.exe SubStr.asm /coff /c
D:\masm32\bin\link.exe SubStr.obj /subsystem:console
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.11.2017, 09:35
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru