Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 6475
Последний выпуск: 19.06.2015

fasm: je неправильно работает

468
26 октября 2012 года
Charley
173 / / 16.08.2011
Делаю прогу по поиску заданного слова в тексте. Здесь я привел не весь текст, т.е. прога работатае если текст начинается со слова root в моем случае. Так вот в gdb я увидел, что сравнение срабатывает(jump is taken z=1), но jz founded переходит не на метку founded, а гораздо дальше(перепрыгивает эту метку на неcколько инструкций вперед). В что показывает gdb:
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 ищем дальше
85K
26 октября 2012 года
Виталий Голованов
5 / / 13.10.2012
Я в ФАСМе не силен (предпочитаю МАСМ32/NASM), но меня смущает вот это:

 
Код:
push "root" ;нужно найти слово root в тексте
mov [ebp-24], esp
Выходит, что Вы ложите в [ebp-24] значение, записанное в esp, т. е. адрес верхушки стека, но не содержимое. Я бы написал так:

 
Код:
push "root"
pop dword [ebp-24]
468
26 октября 2012 года
Charley
173 / / 16.08.2011
Я в ФАСМе не силен (предпочитаю МАСМ32/NASM), но меня смущает вот это:

 
Код:
push "root" ;нужно найти слово root в тексте
mov [ebp-24], esp
Выходит, что Вы ложите в [ebp-24] значение, записанное в esp, т. е. адрес верхушки стека, но не содержимое. Я бы написал так:

 
Код:
push "root"
pop dword [ebp-24]


Ваш способ неприемлем: 1. как перебирать по букве слово root(esp нужен как начало) 2. как использовать ваш dword [ebp-24] в операции cmp?

236
01 ноября 2012 года
koderAlex
1.4K / / 07.09.2005
так je или jn ?

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог