OBJ-файлы от MASM32 и другие линковщики

Тема в разделе "WASM.ASSEMBLER", создана пользователем Nomad, 31 мар 2005.

  1. Nomad

    Nomad New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2004
    Сообщения:
    2
    Адрес:
    Калининград
    Добрый день!

    вот у меня возникла задача:

    прогу люди пишут под MSVC++ 6.0 а мне нужно создать несколько функций через MASM32 и объектный файл присоединить к проекту С++



    но у меня не получается (( и я не знаю в чем проблема... подскажите пожалуйста!



    вот что я делаю:



    module.asm:
    Код (Text):
    1.  
    2. .486
    3. .model flat, stdcall
    4.  
    5. __sin proto :dword, :dword
    6.  
    7. .code
    8.  
    9. __sin proc pOut: dword, angle: dword
    10.   mov eax, pOut
    11.   push 180
    12.  
    13.   fld angle
    14.   fdiv dword ptr [esp]
    15.   fldpi
    16.   fmulp st(0), st(1)
    17.   fsin
    18.   wait
    19.   fstp [eax]
    20.  
    21.   pop ebx
    22.   ret
    23. __sin endp
    24.  
    25. end
    26.  




    потом я компилирую его в объектник

    добавляю этот объектник к проекту MSVC++



    создаю прототип:

    void __stdcall _sin(float *pOut, float angle);



    и когда использую, линкер кричит:

    LINK error: unresolved externla symbol: void __stdcall __sin(float*, float)





    что делать?? кто-нибуть знает, как решить данную проблему??
     
  2. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    Пиши с одним подчеркиванием (второе масм подставит, раз ты обьявил прототип и тип вызова):

    _sin proc pOut: dword, angle: dword

    Ну и extern "C" не забывай, если это С++ а не ANSI-С



    ЗЫ: А кто-нить точно знает как в таком случае VC будет передавать функции параметры - на стэке, как и задумывалось, или таки в st(x)?
     
  3. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Вроде в тему



    - 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
     
  4. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
  6. Nomad

    Nomad New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2004
    Сообщения:
    2
    Адрес:
    Калининград
    Asterix

    спасибо! теперь все работает



    но проблема в другом возникла(

    fsin почему-то выдает неправильный результат(

    все результаты для угла <= п/2 верны - в промежутке 0..1

    а вот когда угол больше, начинается ерунда

    если

    п/2 > угол > п, то угол высчитывается как sin(п/2) + sin(угол - п/2)

    ну т.е. 1 + синус (данный угол - п/2)



    потом, при угле = п результат = 0 а когда угол > п, опять ерунда начинается



    в чем проблема???