fasm: je неправильно работает
0xbffffb99: cmp eax, edx
0xbffffb9b: je 0xbffffbce ;это не адрес метки founded
0xbffffb9d: (bad) [ecx]
0xbffffbaf: (bad)
0xbffffb90: xor eax, eax
0xbffffba2: mov al ,0x4
Исходный текст проги:
Код:
xor eax, eax
xor ebx, ebx
xor ecx, ecx
xor edx, edx
xor esi, esi
xor edi, edi
push "root" ;нужно найти слово root в тексте
mov [ebp-24], esp
mov ecx, [ebp-16] ;[ebp-16] адрес начала текста в куче
searching:
xor ebx, ebx
xor eax, eax
xor edx, edx
add [ebp-24], edi
add ecx, edi
inc edi
xor ebx, ebx
mov ebx, [ebp-24]
mov al, byte[ebx]
mov dl, byte[ecx]
cmp eax, edx ;сравниваем буквы, но так как первая буква в тексте и в нашем слове r, то сравнение должно сработать
jz founded ;должен перепрыгнуть на метку founded
founded:
xor ebx, ebx
xor edx, edx
xor eax, eax
mov al, 4
mov edx, edi
cmp edx, eax
jne searching ;если количество попаданий меньше числа букв в слове root ищем дальше
xor ebx, ebx
xor ecx, ecx
xor edx, edx
xor esi, esi
xor edi, edi
push "root" ;нужно найти слово root в тексте
mov [ebp-24], esp
mov ecx, [ebp-16] ;[ebp-16] адрес начала текста в куче
searching:
xor ebx, ebx
xor eax, eax
xor edx, edx
add [ebp-24], edi
add ecx, edi
inc edi
xor ebx, ebx
mov ebx, [ebp-24]
mov al, byte[ebx]
mov dl, byte[ecx]
cmp eax, edx ;сравниваем буквы, но так как первая буква в тексте и в нашем слове r, то сравнение должно сработать
jz founded ;должен перепрыгнуть на метку founded
founded:
xor ebx, ebx
xor edx, edx
xor eax, eax
mov al, 4
mov edx, edi
cmp edx, eax
jne searching ;если количество попаданий меньше числа букв в слове root ищем дальше
Код:
push "root" ;нужно найти слово root в тексте
mov [ebp-24], esp
mov [ebp-24], esp
Код:
push "root"
pop dword [ebp-24]
pop dword [ebp-24]
Цитата: Виталий Голованов
Я в ФАСМе не силен (предпочитаю МАСМ32/NASM), но меня смущает вот это:
Выходит, что Вы ложите в [ebp-24] значение, записанное в esp, т. е. адрес верхушки стека, но не содержимое. Я бы написал так:
Код:
push "root" ;нужно найти слово root в тексте
mov [ebp-24], esp
mov [ebp-24], esp
Код:
push "root"
pop dword [ebp-24]
pop dword [ebp-24]
Ваш способ неприемлем: 1. как перебирать по букве слово root(esp нужен как начало) 2. как использовать ваш dword [ebp-24] в операции cmp?
так je или jn ?