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

Снова я с выводом номера вхождения подстроки в строку. Исправил

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

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): $'
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 ;счетчик для подстроки
back dw 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, позиция совпавшей буквы
sub di, pos ;возвращаем di к начальному состоянию

mov ax, pos
add s1_of, ax
lea di, s1_of ;Переходим к совпавшей букве
mov cx, count_s2 ;в cx длина подстроки
repe cmpsb
cmp cx, 0
je position
mov ax, count_s2
mov back, ax
sub back, cx
sub si, back ;возвращаем si к начальному состоянию
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

2 ответов

110 просмотров

> lea di, s1_of ;Переходим к совпавшей букве Не переходим. mov. Плюс ты не учитываешь, что после scasb у тебя di смотрит на следующую букву, а не на совпавшую.

Ыиу- Автор вопроса
s54820
> lea di, s1_of ;Переходим к совпавшей букве Не пе...

Я вроде это учел, sub di, pos ;возвращаем di к начальному состоянию.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта