Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не состыковывается Borland C++ и asm 
:(
    Опции темы
MaKeGoRR
Дата 13.1.2014, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 28.8.2013

Репутация: нет
Всего: нет



Как в Borland C++ привязать к проекту файл temp.asm
Почему в файле prim.cpp на строке
prim();
это вызов функции асма выдает ошибку
undefined simbol _prim in module primc.cpp


Кто то писал, что надо назвать функцию с (черточкой)_
Но бесполезно, назовешь с _(одной чертой), выдаст ошибку, что не нашел с __(двумя чертами)

Кто то писал, как подключен prim.asm? 
Никак, он и так видит файл асма, потому что создает prim.obj

просто функцию объявляешь так:
Код

extern "C"
{   void prim (void);}


prim.cpp
Код

#include <conio.h>
#include <iostream.h>
#include <limits.h>
 
inline  int     test(long int a)
     {return ((a>>15)+1)&~1;}
 
int     primC(int a, const int b, const int c, const int d)
{ double z = (2.0*a+1.0*b*c)/(d-a); 
  if (z > SHRT_MIN && z < SHRT_MAX) return z;
   else
    { cout << "\n!!!!!!!!!!! Limits of int value !!!!!!!!!!!\n  x = "
           << z << endl;
      return SHRT_MIN; //-32768
     }
 }
 
extern "C"
{   void prim (void);}
 
int X,a;
 
void main(void)
{   char ch;
    const b=-333;
    const c= 1000;
    const d=-10;
    long int a1;
    do {X = 0;
        //clrscr();
        cout << "\n    x=(2*a+b*c)/(d-a);  int x,a,b=-333,c=1000,d=-10;" << endl;
        do{ cout<<"\n    Enter a [-32768..32767], a!= " << d << " ====> ";
            cin>> a1; 
           }while (test(a1) || d - a1 == 0 || test (d-a1));
        a = a1;
        X = primC(a, b, c, d);
        if (X!=SHRT_MIN)
         { cout << " Result (C++) x = " << X << endl;
           X = 0;
           prim();
           cout << " Result (ASM) x = " << X << endl;
          }
        cout << "\n\nExit? - (y/n)\n";
        ch = getch();
       } while (!(ch=='y' || ch =='Y'));
}

prim.asm

Код

        title Арифметические выражения
        model  large,C
        ; tasm PRIM.ASM /l /ml !!!!!!!!!!!!!!!!!!!!!!!!
        ; CopyRight by Голубь Н.Г., 1993-1997, 2000
        ; Пример 6.2.
        ;x=(2*a + b*c)/(d-a), d<>a !!!
        ;int x,a,b,c,d;
        CODESEG
;============= ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ
        Extrn   C X:word
        Extrn   C a:word

;=========== ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕ - КОНСТАНТЫ
b       dw      -333
c       dw      1000
d       dw      -10
;===================================================
        Public  C prim
prim    proc    far
        mov     ax,2
        Imul    a       ; <dx>:<ax>=2*a
        mov     bx,dx   ; bx <=== ст.часть (dx)
        mov     cx,ax   ; cx <=== мл.часть (ax)
        mov     ax,b
        Imul    c       ; <dx>:<ax>=b*c
        add     ax,cx   ; <ax>=<ax>+<cx>  (мл.часть)
        adc     dx,bx   ; <dx>=<dx>+<bx>  (ст.часть)
        mov     cx,d
        sub     cx,a    ; <cx>=<cx>-a
        Idiv    cx      ; <ax>=<dx>:<ax>/<cx>
        mov     X,ax
        ret
prim    endp
        end


Это сообщение отредактировал(а) MaKeGoRR - 13.1.2014, 10:33
PM MAIL   Вверх
bsa
Дата 13.1.2014, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



MaKeGoRR, а как ты привязываешь?
PM   Вверх
MaKeGoRR
Дата 13.1.2014, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 28.8.2013

Репутация: нет
Всего: нет



Цитата

а как ты привязываешь?

Читайте, выше я добавил
Я не знаю как, в книге почему то ничего не написано про подключение файла асма
Наверно нужно как то подключить, но я не знаю как

Это сообщение отредактировал(а) MaKeGoRR - 13.1.2014, 10:36
PM MAIL   Вверх
bsa
Дата 13.1.2014, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



MaKeGoRR, во-первых, prim.obj создается из prim.cpp. Во-вторых, для сборки экзешника тебе необходимо создать ПРОЕКТ и добавить в него твои cpp и asm файлы. В-третьих, чтобы проблем не было, дай разные имена файлам. Так как объектные файлы у них будут одинаковыми и перетрут друг друга. В-четвертых, если у тебя только одна функция, то можно написать так: extern "C" void prim (void); В-пятых, если будут проблемы с ненахождением функции prim, попробуй в ассемблерном файле добавлять подчеркивания перед именем функции.
PM   Вверх
MaKeGoRR
Дата 13.1.2014, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 28.8.2013

Репутация: нет
Всего: нет



Цитата

 во-первых, prim.obj создается из prim.cpp. Во-вторых, для сборки экзешника тебе необходимо создать ПРОЕКТ и добавить в него твои cpp и asm файлы. В-третьих, чтобы проблем не было, дай разные имена файлам. Так как объектные файлы у них будут одинаковыми и перетрут друг друга. В-четвертых, если у тебя только одна функция, то можно написать так: extern "C" void prim (void); В-пятых, если будут проблемы с ненахождением функции prim, попробуй в ассемблерном файле добавлять подчеркивания перед именем функции. 

проект у меня и был создан, у меня .obj с разными именами, подчеркивание в асм файле ничего не меняет
почему ищется функция в файле .cpp,  а не .asm? 

Это сообщение отредактировал(а) MaKeGoRR - 13.1.2014, 11:38
PM MAIL   Вверх
bsa
Дата 13.1.2014, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(MaKeGoRR @  13.1.2014,  12:37 Найти цитируемый пост)
у меня .obj с разными именами
с какими? prim.cpp и prim.asm превратятся в prim.obj. Или у тебя другие имена?
Цитата(MaKeGoRR @  13.1.2014,  12:37 Найти цитируемый пост)
почему ищется функция в файле .cpp,  а не .asm?
линкер не работает ни с asm, ни с cpp. Он работает с obj. Чтобы получился экзешник необходимо, чтобы во всех объектных файлах были функции, на которые в них есть ссылки.
Судя по всему, у тебя объектный файл от ассемблерного исходника не попадает линкеру. Или ты не создал проект, и/или не добавил в него ассемблерный файл (меню Project).

На самом деле, сборка программы идет следующим образом:
//компиляция
1.cpp -> asm -> 1.obj
2.c -> asm -> 2.obj
3.pas -> asm -> 3.obj
4.asm -> 4.obj
...
//линковка
1.obj 2.obj 3.obj 4.obj ... some.lib other.lib ...  -> prog.exe
PM   Вверх
MaKeGoRR
Дата 13.1.2014, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 28.8.2013

Репутация: нет
Всего: нет



добавил узел к проекту файл асм(через проект не знаю как)
пишет undefined simbol _A in module primm.asm

Почучается ошибка в коде, буду пробывать искать

ВСЕ, заработало, убрал primm.obj, который вручную создавал через тасм, теперь  primm.obj создал Borland C++ и все стало норм, кстате почему, если сделать .obj через TASM, то выдает ошибку:
undefined simbol _A in module primm.asm

Это сообщение отредактировал(а) MaKeGoRR - 13.1.2014, 12:53
PM MAIL   Вверх
bsa
Дата 13.1.2014, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



возможно, из-за разных параметров. Так как в обоих случаях запускается tasm.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0466 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.