Access violation выскочил при компиляции: Code: #include <windows.h> int myadd(int,int); int main() { int res = 0; __asm { xor eax,eax xor edx,edx push 5 push 10 call myadd mov res,eax retn } } int myadd (int x,int y) { __asm { mov eax,x mov edx,y add eax,edx } } Вот только непонятно,почему.Ещё и интеллисенс говорит,что у меня в еах есть уже число 625,а как это может быть,если перед вызовом я обнуляю регистры ?! Плюс компиль должен сам заботиться о стеке(во всяком случае,так пишет Пирогов : ) ) в плане возврата параметров.
по умолчанию в студии, на сколько помню, конвенция вызовов для функций - cdecl. Стек освобождает вызывающая сторона. Поэтому после call myadd необходимо написать add esp, 8 Да и посмотри наконец, что тебе сбацал компилятор в дизасме.
ой...там такой набор инструкций - кот наплакал : (.Могу скинуть,конечно,но сам я в нём буквально утопаю...Не имел конкретно с ним дело.
Welemir, ph0enix.re правильно посоветовал, вот как должно выглядеть: Code: __asm { xor eax,eax xor edx,edx push 5 push 10 call myadd add esp, 8 mov res,eax }