![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| BNPmaster |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
| Dray |
|
|||
![]() Материалист ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 7.10.2003 Где: г. Всеволожск Репутация: 2 Всего: 6 |
это нужно в сторону asm смотреть. Блок такой есть.
|
|||
|
||||
| 0x07L |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 10.6.2006 Где: Москва Репутация: нет Всего: 5 |
Сам я ассемблер знаю не то чтобы очень хорошо, но возникает вопрос, почему в ассемблерном файле у тебя функция называется _DD, а в сишном файле ты пытаешься вызвать DD.
|
|||
|
||||
| Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: нет Всего: 32 |
Насколько я помню, когда на масме пишешь, нужно объявлять прототип функции.
А вообще, вот: http://webster.cs.ucr.edu/Page_TechDocs/MA...ide/Chap_12.htm Сам когда делал лабы, написал прогу с помощью этого. Еще в разделе Asm на форуме поищи, там и мои вопросы должны быть по взаимосвязи языков. -------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 8 Всего: 158 |
хех, неудачная попытка ручного преобразования имен
1. в указании модели в ассемблерном листинге ты поставил язык C - преобразование компилер сделает сам (то бишь добавит _ ) 2. используя ассемблер, лучше не забывать добавлять ret в конец процедур ;) 3. так как ты указал конкретную модель памяти в ассембленом куске, то и при компиляции изволь ее поставить - опция -mm в данном случае. edit: да, и имя процедуры лучше измени... Это сообщение отредактировал(а) dumb - 5.7.2006, 04:44 |
|||
|
||||
| BNPmaster |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 4.7.2006 Репутация: нет Всего: нет |
Всё. Народ, всем большое спасибо.
Теперь всё работает. Надо было поставить ret в конце процедуры и убрать подчёркивание в имени. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |