Поиск:

Ответ в темуСоздание новой темы Создание опроса
> VC++ 6.0 Inline Assembler, Переход на метку обьявл. в другой ф-ции 
:(
    Опции темы
BISHAN
Дата 7.2.2008, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

void Processor() 
{ 
    __asm 
    { 
        lea eax,Label00000000; 
        mov Return,eax; 
        <некий Asm код> 
        Label00000000: 
    } 
} 


предпологается что эта ф-ция будет исполнятся достаточно часто. а адрес Label00000000 сохранить в unsigned long переменную Return нужно 1 раз только. потому я пытаюсь перенести эти строки в отдельную ф-цию.

Код

void Initialisation() 
{ 
    __asm 
    { 
        lea eax,Label00000000; 
        mov Return,eax; 
    } 
} 


но компилятор (Microsoft Visual C++ 6.0) говорит что:
C:\main\Documents\C++\RM\Sources\KeyBoard.cpp(32) : error C2094: label 'Label00000000' was undefined

Пробовал менять ф-ции Processor и Initialisation местами. результат тот же. Я думаю должен быть какой-то способ обьявить метку глобальной. Пробовал искать в гугле/яндексе/рамблере, ответа так и не нашел нигде. Находил темы по GCC'шному встроенному асму и там есть такая возможность сделать метку глобальной с помощью приставки .globl пробовал писать приставки .globl .global globl global но результат был один и тот же. И раз есть в GCC'шном то почему не должно быть в VC++? Может кто-нибудь подсказать как все таки в VC++'ном компиляторе сделать метку глобальной? Был бы очень признателен.
PM MAIL ICQ   Вверх
BISHAN
Дата 11.2.2008, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А время идет и идет, просмотры темы добавляются и добавляются, а ответов не прибавляется и не прибавляется  smile
Ну я не сидел сложа лапки ожидая помощи, и нашел все таки один способ решить проблему а именно:
Код

lea eax,Processor;
#ifdef NDEBUG
add eax,31;
#else
inc eax;
add eax,dword ptr[eax];
add eax,53;
#endif
mov ReturnPoint,eax;

Были некоторые проблемы с написанием (а именно то что код в программы в целом в дебаге и в релизе различается благодаря оптимизациям) но главное не это. Мой метод - не панацея. Я уверен что стоит мне попробовать его скомпилировать в другой среде, а то и просто в другой версии Microsoft'овского, как все сразу ухнет. Так что вопрос пожалуй остается открытым: можно ли все таки получить адресс метки находящейся в другой ф-ции?
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




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


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

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