не работает возврат из call

 
0
 
ASM
ava
scuter | 30.03.2013, 02:14
делаю вызов функции командой call а обратно это дело не возвращается

код простой


mov edi, [m3]
mov esi, m1
mov ecx, (m2-m1)
mov  al, 2
mov [m6], al
mov eax, free+(m2-m1)
mov [m7], eax
mov  ax, 6
mov [m8], ax
mov eax, m2
mov [m9], eax
mov ax, 0
mov [m10], ax
mov eax, 0
mov [m11], ax
mov eax, '<-->'
mov [m12], eax
mov eax, free
mov [m13], eax
mov eax, free+(m2-m1)
mov [m14], eax
Kommentare (5)
ava
ChihPih | 30.03.2013, 21:52 #
Какое дело? Функция не возвращает значение или функция некорректно завершается?
ava
scuter | 30.03.2013, 23:59 #
Цитата (ChihPih @  30.3.2013,  21:52 findReferencedText)
Какое дело? Функция не возвращает значение или функция некорректно завершается?


функция не возвращается на то место от куда вызвана.



call test_fun

test_fun:
mov edi, [m3]
mov esi, m1
mov ax, 0
mov [m10], ax
ret
ava
ChihPih | 31.03.2013, 08:18 #
А стек, указатель и т.п. на кусок памяти правильно настроены? Модель памяти какая и под какую ОС? Компилятор?
ava
scuter | 31.03.2013, 17:03 #
с указателем там всё нормально,
в чём косяк так и не понял, но pushad спасает.
ava
LeonidPr | 05.04.2013, 08:07 #
Цитата (scuter @  30.3.2013,  23:59 findReferencedText)
функция не возвращается на то место от куда вызвана.

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

mov [m10], ax

затираете адрес возврата.
А вообще хорошо бы сообщить название ассемблера и ОС под которую пишете.
Цитата (scuter @  31.3.2013,  17:03 findReferencedText)
но pushad спасает. 

Если есть pushad, где-то должен быть и popad!
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden