Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Помогите состыковать C++ и ассемблер

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
suvolod



Зарегистрирован: 02.05.2006
Сообщения: 2

СообщениеДобавлено: Вт Май 02 2006 08:51    Заголовок сообщения: Помогите состыковать C++ и ассемблер Ответить с цитатой

У меня есть программка на Си
Код:

#include <iostream.h>

int var_ext1;
extern "C" {void fnSumm (void);}

void main()
{
   cout<<var_ext1<<endl;
   fnSumm();
   cout<<var_ext1<<endl;
}

И модуль на ассемблере:
Код:

.386
.model flat, C

.code
Extrn   C   var_ext1:DWORD   ;эту переменную получаем из С-модуля
Public   C   fnSumm      ;фция, которая будет видна (вызываться) из С-модуля

fnSumm   PROC   far
   mov   WORD PTR var_ext1,1234h
   mov   WORD PTR var_ext1+2,5678h
   ret
fnSumm   endp
   end


Я создаю объектный файл из ассемблерного кода, добавляю его в проект VC++ 6.0, и соответственно хочу, чтобы при вызове фции fnSumm глобальная переменная var_ext1 изменила свое значение. Однако компилятор сыплет ошибками:
1// prim_test.obj : error LNK2001: unresolved external symbol _var_ext1. Как я понял, MASM 8, которым я создаю из asm -> obj, добавляет к каждой переменной знак подчеркивания спереди. Я долго пытался избавиться от этого знака, перерыл все настройки Masm-а, но у меня ничего не получилось Sad((
//2 Тогда я попробовал этот знак подчеркивания добавить к переменной в cpp-коде, и ничего не изменилось, компилятор по прежнему плюется ошибкой «unresolved external symbol _var_ext1». Как я понимаю, var_ext1 у меня в Си-коде объявлена глобальной, а значит видна всем модулям в пределах приложения, в том числе должна быть видна и объектному модулю из asm-а, тем более что эта переменная и так там явно объявлена как Extrn
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
suvolod



Зарегистрирован: 02.05.2006
Сообщения: 2

СообщениеДобавлено: Вт Май 02 2006 08:52    Заголовок сообщения: Ответить с цитатой

Я хочу еще раз подчеркнуть: мне по условию задачи надо изменить глобальную переменную var_ext1 си-шного модуля, используя фцию, релизованную на асме, которая не принимает и не возвращает никаких параметров. Фактически я пытаюсь просто разобраться, как можно «передать» переменную в asm-модуль, причем передать не в качестве параметра фции, а явно, чтобы и asm, и си-модуль реально общались с одной переменной, и чтобы изменения, произошедшие с переменной в asm-модуле, сразу же были отражены в си-модуле
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...