MASM32 сравнение строк - PullRequest
       7

MASM32 сравнение строк

0 голосов
/ 24 июня 2011

Я написал следующий код для сравнения двух строк, одна из которых предопределена, а другая взята в качестве ввода от пользователя.Но каждый раз программа показывает их как неравные.пожалуйста, помогите мне.Я использую ассемблер MASM32.

.data
msg1 db '***Welcome to My Program***',13,10,0
msg2 db 'Please Enter a Product: ',0
msg3 db 'You Entered Shoes: ',0
p1 db 'Shoes',0

.data?
product db 100 dup(?)
.code

start:
invoke StdOut,ADDR msg1
invoke StdOut,ADDR msg2
invoke StdIn,ADDR product,100 ; receive text input

lea    esi, p1          ; Load the buffer start address
lea    edi, product     ; Load the save buffer start address
mov    ecx, 10          ; Load the operation count
repe   cmpsb            ; Compare the byte into the buffer
jne Terminate
invoke StdOut,ADDR msg3

Terminate:
invoke ExitProcess,0
END start

1 Ответ

1 голос
/ 24 июня 2011

У меня нет ссылки на MASM32, но из памяти StdIn также будет получать возврат каретки + перевод строки после нажатия клавиши ввода в консоли, и это будет отражено в прочитанной вами переменной.

MASM32 имеет встроенную функцию StripLF или что-то подобное, чтобы справиться с этим. Сравнение должно пройти после этого.

Для подобных проблем я настоятельно рекомендую OllyDbg, который позволит вам пошагово выполнить код и увидеть дамп памяти и стек.

Редактировать: Только что нашел на форумах MASM32 тему, демонстрирующую именно то, что я описываю (игнорируйте тот факт, что это отчет об ошибке, но комментируйте назначенное поведение StdIn): http://www.masm32.com/board/index.php?PHPSESSID=b98a1a56c52fdc4c07a2bca3553302e2&topic=51.0

...