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 ответов

73 просмотра

Если ты новичок, то лучше: 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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта