Добрый день! вот у меня возникла задача: прогу люди пишут под MSVC++ 6.0 а мне нужно создать несколько функций через MASM32 и объектный файл присоединить к проекту С++ но у меня не получается (( и я не знаю в чем проблема... подскажите пожалуйста! вот что я делаю: module.asm: Код (Text): .486 .model flat, stdcall __sin proto :dword, :dword .code __sin proc pOut: dword, angle: dword mov eax, pOut push 180 fld angle fdiv dword ptr [esp] fldpi fmulp st(0), st(1) fsin wait fstp [eax] pop ebx ret __sin endp end потом я компилирую его в объектник добавляю этот объектник к проекту MSVC++ создаю прототип: void __stdcall _sin(float *pOut, float angle); и когда использую, линкер кричит: LINK error: unresolved externla symbol: void __stdcall __sin(float*, float) что делать?? кто-нибуть знает, как решить данную проблему??
Пиши с одним подчеркиванием (второе масм подставит, раз ты обьявил прототип и тип вызова): _sin proc pOut: dword, angle: dword Ну и extern "C" не забывай, если это С++ а не ANSI-С ЗЫ: А кто-нить точно знает как в таком случае VC будет передавать функции параметры - на стэке, как и задумывалось, или таки в st(x)?
Вроде в тему - An Introduction to Assembly Language: Part I By darwen - 03/15/2005 This article, the first in a series, shows how to write and compile files containing assembly language using Visual C++. http://nl.internet.com/ct.html?rtr=on&s=1,1h5y,1,a5iq,ej4g,lfgk,2a9g - An Introduction to Assembly Language: Part II By darwen This article covers registers, functions, and a few important assembly language instructions. http://nl.internet.com/ct.html?rtr=on&s=1,1h5y,1,brkv,bcbw,lfgk,2a9g - An Introduction to Assembly Language: Part III By darwen The third and final part of the series of tutorials on Assembly language. This covers the most commonly used instructions and some of the macros in MASM that make life so much easier for the Assembler developer. http://nl.internet.com/ct.html?rtr=on&s=1,1h5y,1,9lfi,cafa,lfgk,2a9g
Asterix спасибо! теперь все работает но проблема в другом возникла( fsin почему-то выдает неправильный результат( все результаты для угла <= п/2 верны - в промежутке 0..1 а вот когда угол больше, начинается ерунда если п/2 > угол > п, то угол высчитывается как sin(п/2) + sin(угол - п/2) ну т.е. 1 + синус (данный угол - п/2) потом, при угле = п результат = 0 а когда угол > п, опять ерунда начинается в чем проблема???