У меня вопрос по поводу nasm и его связи с C ++. Я объявляю небольшую тестовую функцию как
extern "C" void __cdecl myTest( byte i1, byte i2, int stride, int *width );
и я называю это так:
byte i1 = 1, i2 = 2;
int stride = 3, width = 4;
myTest( i1, i2, stride, &width );
метод служит только для отладки сборки и ознакомления с тем, как указатель стека используется для получения аргументов. кроме того, значение аргументов указателя должно быть установлено в 7, чтобы выяснить, как это работает. Это реализовано так:
global _myTest
_myTest:
mov eax, [esp+4] ; 1
mov ebx, [esp+8] ; 2
mov ecx, dword [esp+16] ; width
mov edx, dword [esp+12] ; stride
mov eax, dword [esp+16]
mov dword [eax], 7
ret
и скомпилировано с помощью
yasm -f win32 -g cv8 -m x86 -o "$(IntDir)\$(InputName).obj" "$(InputPath)"
, затем связано с приложением c ++. В режиме отладки все отлично работает. функция вызывается пару раз и работает, как и ожидалось, тогда как в режиме выпуска функция работает один раз, но последующие программные операции не выполняются Мне кажется, что что-то не так с указателями стека / фрейма, рядом / далеко, но я совершенно новичок в этом вопросе и нуждаюсь в небольшой помощи. заранее спасибо!
а.