Моя цель - сравнить две строки . Если они равны, продолжайте программу. Если не равно, ветвь где-то еще. Если я не в конце строки и пока все равно, l oop соответствует следующему символу.
Я использую visual studio, inline intel asm.
программа работает, хотя при первом запуске она принимает ветвь NOTSAME и завершает программу, даже если сравниваемые строки одинаковы. Это не Я oop вообще из-за этого, что означает, что что-то идет не так в сравнении.
Я попытался отладить его, и, похоже, регистры содержат правильный адрес. По моему мнению, увеличивать / уменьшать его можно, увеличивая его, просто перемещая указатель на один байт вперед, указывая на следующий символ. У меня нет четкого представления о том, какая часть идет не так, я просто знаю, что это не сравнивается с тем, как я планировал.
int main()
{
string arr[] = {"a","b","c","d","e" };
string a= "a";
__asm
{
lea esi, arr // load address into esi
lea edi, a
dec edi
LOOPING:
inc edi// ds:di->next character in string2
lodsb// load al with next char from string, lodsb increments si automatically.
cmp[edi], al//; compare characters
jne NOTSAME//; jump out of loop if they are not the same
cmp al, 0//; they are the same, but end of string ?
jne LOOPING//; no - so go round loop again
После некоторой дополнительной отладки кажется, что AL не принимает правильный байт из строки. Пока не знаю, почему.