Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2010, 04:00   #1
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию Assembler'ные вставки и goto

Доброго времени суток уважаемые форумчане!

У меня возник такой вопрос, на который я так и не нашел не одного ответа в googl'e.

Можно ли при помощи ассемблерных вставок, переместиться на какой-то отрезок кода, примерно так.

Код:
void main()
{
    // Тут что-то типа метки
    printf("Hello world!");
    _asm
    {
        jmp МЕТКА 
    }
}
Идея думаю понятна, не знаю можно ли вообще такое, просто не очень хочется использовать goto...

За ранее благодарен за любую помощь
coNsept вне форума Ответить с цитированием
Старый 31.03.2010, 04:11   #2
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Тупица тупицай, 3:08 (мозги уже не варят)

Код:
void main()
{
    Metka:
    printf("Hello world!");
    _asm
    {
        jmp Metka
    }
}
Сам с себя смеюсь, извиняюсь за тупой пост, по желанию можете его удалить
Я просто думал, что метка к примеру BLABLA: может использоваться только с оператором goto :D
coNsept вне форума Ответить с цитированием
Старый 31.03.2010, 04:33   #3
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Цитата:
просто не очень хочется использовать goto...
В чем же отличие этого...ммм.. метода от goto ?
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 31.03.2010, 06:24   #4
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Без понятий, но по мне так красивее смотреться :D :D :D слово asm светится в коде, а когда я слышу либо вижу что, что-то связанно с Assembler'ом, *вырезано цензурой*, но на счёт Asma, я фанат.

Последний раз редактировалось MaTBeu; 14.06.2010 в 17:45.
coNsept вне форума Ответить с цитированием
Старый 02.04.2010, 14:05   #5
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
Без понятий, но по мне так красивее смотреться
а нельзя-ли тогда просто в начале программы написать
Код:
#define goto jmp
а вообще, автор, использование всяких goto в ЯВУ это наркоманство.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 02.04.2010, 14:49   #6
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Можно вообще написать
Код:
//asm asm asm asm asm asm
//asm asm asm asm asm asm
void main()
{
  while(1)
  {
    printf("Hello world!");
  }
}//ASM !!!
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 02.04.2010 в 14:51.
Goodwin98 вне форума Ответить с цитированием
Старый 02.04.2010, 15:49   #7
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Then he'll come. :)
ds.Dante вне форума Ответить с цитированием
Старый 02.04.2010, 20:16   #8
Assemblerru
Форумчанин
 
Регистрация: 28.01.2010
Сообщений: 224
По умолчанию

вообшето винда 98 и младше тебе позволит это сделать, так можно работать под дос.

вообше то в учебникх по С++ не рекомендуют это делать (я про те которые сам читал)

пробуй писать на С++ а по возникаюшим вопросам иши ответы на форуме

==> тебе в помощ
всему свое время как зиме и весне
и каждому солнцу свой неба кусок
Assemblerru вне форума Ответить с цитированием
Старый 13.04.2010, 07:05   #9
svbezm
Форумчанин
 
Регистрация: 02.04.2010
Сообщений: 104
По умолчанию

С
goto ,
jmp
или while
никакой разницы, главное синтаксис соблюдай, а EXE файлы будут совершенно одинаковы.
Единственная разница , если будешь передавать исходник по правилам
хорошего стиля в си лучше использовать while...
svbezm вне форума Ответить с цитированием
Старый 14.06.2010, 17:04   #10
nacgull
Пользователь
 
Аватар для nacgull
 
Регистрация: 17.11.2009
Сообщений: 65
Восклицание

Цитата:
Сообщение от svbezm Посмотреть сообщение
С
goto ,
jmp
или while
никакой разницы, главное синтаксис соблюдай, а EXE файлы будут совершенно одинаковы.
Единственная разница , если будешь передавать исходник по правилам
хорошего стиля в си лучше использовать while...
Ну как же нет разницы! Вот, к примеру, мне нужно прыгнуть с ЕХЕ в DLL, причем через адрес находящийся в переменной. Компилятор С++ не сможет поместить метку в переменную как значение и никакие union-конструкции не помогут в этом. Кроме того, мне нужно сделать прыжок без выхода из стека возврата функции, а выйти в новом месте (о корректности возврата из функции я позабочусь). Как быть?

Нужна конструкция типа

Код:
 
//-------------------------------------------------------
//  модуль  main.exe
// main_exe.cpp

   int var = 12345; //условно адрес перехода на метку  "label:"

int Foonc(int a)
{
  if(a > 0)
  {
        __asm
        {
           jmp var 
       }
   } 
   return a;
}

//=========================================
//  модуль  my.dll
// my_dll.cpp

int Foonc(int b)
{
   if(b > 0)
  {

label:   b = (int)&b; //адрес перехода = 12345

   } 
   return b;
}
C помощью исключений тоже (имхо) не получится - стек возврата сбрасывается.

Какой универсальный код ассемблера предложите (С++ Builder & msVisual C++) ?

Может такое?:
Код:

        _ЕАХ = a; //_ЕАХ    псевдопеременная C++Builder, соответствует регистру ЕАХ

        __asm
        {
           jmp ЕАХ 
        }
CPUcode&Asm1801ВМ1,AsmZ80,Asm xPentiumII, Basic,Pascal,Forth,LSL, Delphi,C++,MySQL; web&game prog-ng,code hacking; DreamWeaver,C++Visual&Builder,Photo shop,3Dmax,GoldWaveEditor,Softice..

Последний раз редактировалось nacgull; 14.06.2010 в 17:55.
nacgull вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
goto bye; Ошибка при компиляции в MVS2008 TheWanderer Общие вопросы C/C++ 4 14.06.2010 18:10
goto Serg12 Помощь студентам 12 14.06.2010 17:31
GoTo Diego__ Microsoft Office Word 3 13.03.2010 19:55
чем заменить goto? Agronom Общие вопросы C/C++ 3 19.12.2009 19:43
php goto TDrive PHP 10 28.07.2009 00:04