Сравнение строк в сборке
Итак, я довольно новичок в ассембле. Моя задача - проверить подстроку в строке и распечатать ответ да / нет. Обе строки вводятся пользователем.
Я поместил смещение строки в регистр 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
(флаг ноль / равно).