Сравнение строк в сборке

Итак, я довольно новичок в ассембле. Моя задача - проверить подстроку в строке и распечатать ответ да / нет. Обе строки вводятся пользователем.

Я поместил смещение строки в регистр bx, смещение подстроки в регистр bp. Используя индексы в регистрах di и si, я хочу сравнить символы моих строк. Оба моих индексных регистра установлены в 2, что должно быть первым символом строки.

mov dl,[bx+di]
mov al,[bp+si]
cmp dl,al
jz AnswerYes
jmp AnswerNo

Я использовал это для сравнения первых символов в каждой строке.

Когда я добавляю "a" в обе строки, программа должна перейти к AnswerYes и распечатать "yes". Когда я печатаю [bx+di] и [bp+si], он выводит "a" для них обоих, что означает, что они одинаковы, но программа всегда переходит к AnswerNo.

Если я сделаю это:

cmp dl,'a'

это печатает наше да, означая, что они одинаковы.

Когда я делаю это:

cmp al,'a'

это печатает нет, даже если они одинаковы.

Я подозреваю, что проблема заключается в том, что я использую регистр bp, поскольку я никогда не использовал его раньше. Я всегда использовал только одну строку в моей программе, для которой я всегда использовал регистр bx.

Спасибо за помощь заранее.

1 ответ

Загрузите строковые адреса в DS:SI а также ES:DIи положить длину в CX (сделай это FFFFh если вы используете строки C, в противном случае увеличьте ноль байта длины или вставьте в него известную длину).

Затем очистить DF (флаг направления) с CLD и использовать REPE CMPSB сделать сравнение. Результат в ZF (флаг ноль / равно).

Другие вопросы по тегам