169 похожих чатов

Нужно найти номер позиции, с которой начинается подстрока S2 в

строке S1.

lea di, s1 ;Строка
lea si, s2 Подстрока

again:
mov al, [si]

mov ah, 02
mov dl, [si]
int 21h

mov cx, count_s1
repne scasb
mov ax, count_s1
mov pos, ax
sub pos, cx ;Разность между длиной строки и остатком в cx

mov s1_of, offset s1
mov ax, pos
add s1_of, ax
mov di, s1_of ;Переходим к совпавшей букве
mov cx, count_s2 ;в cx длина подстроки
repe cmpsb
cmp cx, 0
je position
inc s2_of
lea di, s1 ;Строка
jmp again

Что я сделал не так? Подскажите, пожалуйста

12 ответов

46 просмотров

Если ты новичок, то лучше: 1. Не используй инструкции rep 2. Не используй макросы

а что ты не так сделал?

Ыиу- Автор вопроса
楽園松本
а что ты не так сделал?

Не знаю, но если не работает, то где-то явно косяк

Ыиу- Автор вопроса
Ыиу
screenshot

на какой инструкции код не правильно работает в сравнении с алгоритмом в твоей голове?

Ыиу
screenshot

Вот что бывает если не использовать отладчик

Ыиу
screenshot

то есть, он тебе выводит ерунду. Ищи, что у тебя выводится. Явно нет закрывающего нуля или $.

А какая вообще логика? Если ты идёшь по s1, ищешь первый байт s2, сравниваешь, а если не совпало, перезагружаешь s1, но не перезагружаешь s2? Т.е., для строк abceabcd и abcd после перехода на again оно будет искать непонятно что?

Ыиу
screenshot

Я тебе рекомендую эту задачу разбить на несколько этапов: 1) вывести любую строку; 2) вывести число; 3) получить из консоли число и вывести его; 4) найти начало подстроки и вывести позицию. Каждый из этих этапов сделай в своей подпрограмме и отдельно протестируй.

Ыиу- Автор вопроса
s54820
А какая вообще логика? Если ты идёшь по s1, ищешь ...

Маленько переписал код: model small .stack 256 .data mes1 db 10, 13, 'Enter the string (Enter 0 to exit from input): $' mes2 db 10, 13, 'Enter the substring (Enter 0 to exit from input): $' mes3 db 'Result: $' mes4 db 10, 13, 'Not found$' ent db 10, 13, '$' endstr db '$' s1 db 256 dup(?) ;string s2 db 256 dup(?) ;substring pos dw 0 count_s1 dw 0 ;счетчик для основной строки count_s2 dw 0 ;счетчик для подстроки a db 0 s1_of dw 0 s2_of dw 0 .code main: mov ax, @data mov ds, ax mov es, ax lea di, s1 mov ah, 09 lea dx, mes1 int 21h input1: mov ah, 01 int 21h cmp al, 30h je next stosb inc count_s1 jmp input1 next: mov al, endstr stosb lea di, s2 mov ah, 09 lea dx, mes2 int 21h input2: mov ah, 01 int 21h cmp al, 30h je exit stosb inc count_s2 jmp input2 exit: mov al, endstr stosb mov ah, 09 lea dx, ent int 21h mov ah, 09 lea dx, mes3 int 21h find: lea di, s1 ;Строка lea si, s2 ;Подстрока again: mov s1_of, offset s1 ;записываем смещение строки mov al, [si] mov cx, count_s1 repne scasb mov ax, count_s1 mov pos, ax sub pos, cx ;Разность между длиной строки и остатком в cx, позиция совпавшей буквы mov ax, pos add s1_of, ax lea di, s1_of ;Переходим к совпавшей букве mov cx, count_s2 ;в cx длина подстроки repe cmpsb cmp cx, 0 je position inc si lea di, s1 ;Строка jmp again position: mov ax, pos aam add ax, 3030h mov bx, ax mov ah, 02 mov dl, bh int 21h mov dl, bl int 21h jmp over over: mov ax, 4c00h int 21h end main

Похожие вопросы

Обсуждают сегодня

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Привет ) есть такой кусок кода, он считывает ini файл. my $conf = Config::IniFiles->new( -file => $ini_file ); if (!$conf) { $self->my_die('cannot_read_cfg', ...
Kolya lastname
7
Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
Блин, интересно, кто-нибудь когда-нибудь переписывал какую-нибудь игру с x86 на arm? Вообще, такое возможно?
Alan 🔝 Бэброу
13
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
7
Всем доброго дня! Подскажите может кто использовал связку Pagebuilder + Clientsetting. Сами параметры с типом pagebuilder в модуле Clientsetting работают нормально, можно такж...
Александр Добриков
12
I just installed it but how do I use it?
Talula
12
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
А почему в си некоторые вещи работают с двойными кавычками некоторые с одинарными? Нельзя было все сделать с одними или чтоб работало с разными? например чтоб выводить строки ...
.
15
Карта сайта