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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C++ и Assembler, Программы на C++ с Assembler кодами 
V
    Опции темы
BNPmaster
Дата 4.7.2006, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем привет,
Кто - нибудь знает как вызывать
подпрограмму написанную на Assembler 
из программы на C++.

К примеру.
WORK.ASM
    .MODEL MEDIUM,C    
    .CODE        
        public _DD    
    _DD PROC FAR 
        mov AX,10    
        add AX,20    
    _DD    ENDP    
        END    
ASM.CPP
    #include<stdio.h>
    #include<conio.h>

    extern "C" void DD();

    int main(void)
    {

        DD();
        getch();
        return 0;
    }
Оба файда я помещаю в папку где находится компилятор C++ (TCC.EXE)
тудаже копирую компилятор Assembler (TASM.EXE), затем набираю
E:\C\BIN\TCC.EXE -IE:\C\INCLUDE ASM.cpp  WORK.asm
(параметр -I указывает библиотеку для С)
И вот что мне выдают :
//------------------------------------------------------------
Turbo C++ Version 3.00 Copyright © 1992 Borland International
asm.cpp:
work.asm:
Microsoft ® Macro Assembler Version 5.10
Copyright © Microsoft Corp 1981, 1988.  All rights reserved.


  49952 + 373789 Bytes symbol space free

      0 Warning Errors
      0 Severe  Errors
Turbo Link  Version 5.0 Copyright © 1992 Borland International
Error: Undefined symbol _DD in module asm.cpp 

        Available memory 4089184
//-------------------------------------------------------------
Undefined symbol _DD in module asm.cpp ---почему ??
Я Assembler только учу, но на C программирую давно. Может я
с assembler что-то напутал.
Если кто-то может помочь, буду очень благодарен. 
Спасибо

Я использую MASM 5.1 и TC 3.0




 
PM MAIL   Вверх
Dray
Дата 4.7.2006, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Материалист
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 7.10.2003
Где: г. Всеволожск

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



это нужно в сторону asm смотреть. Блок такой есть. 


--------------------
忍者

user posted image
PM MAIL   Вверх
0x07L
Дата 4.7.2006, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сам я ассемблер знаю не то чтобы очень хорошо, но возникает вопрос, почему в ассемблерном файле у тебя функция называется _DD, а в сишном файле ты пытаешься вызвать DD. 
PM MAIL   Вверх
Fedor
Дата 4.7.2006, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


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

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



Насколько я помню, когда на масме пишешь, нужно объявлять прототип функции.

А вообще, вот:
http://webster.cs.ucr.edu/Page_TechDocs/MA...ide/Chap_12.htm

Сам когда делал лабы, написал прогу с помощью этого. Еще в разделе Asm на форуме поищи, там и мои вопросы должны быть по взаимосвязи языков. 


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
dumb
Дата 5.7.2006, 04:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



хех, неудачная попытка ручного преобразования имен smile

1. в указании модели в ассемблерном листинге ты поставил язык C - преобразование компилер сделает сам (то бишь добавит _ )
2. используя ассемблер, лучше не забывать добавлять ret в конец процедур ;)
3. так как ты указал конкретную модель памяти в ассембленом куске, то и при компиляции изволь ее поставить - опция -mm в данном случае.

edit: да, и имя процедуры лучше измени...  smile 

Это сообщение отредактировал(а) dumb - 5.7.2006, 04:44
PM MAIL   Вверх
BNPmaster
Дата 5.7.2006, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всё. Народ, всем большое спасибо.
Теперь всё работает.
Надо было поставить ret в конце процедуры и 
убрать подчёркивание в имени. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

 
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.