asm вставки в С++

Тема в разделе "LANGS.C", создана пользователем dj0nik, 12 авг 2007.

  1. dj0nik

    dj0nik New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2007
    Сообщения:
    15
    Я пользуюсь Dev-C++ компилятором. Как делать asm вставки в этой среде разработки?
    Или может есть какие нибудь маны на русском? подскажите пожалуйсто.
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Вот пример вставки, которая равносильна сишному return ( (!x) ? 0 : (scale * log10(x)) );
    Код (Text):
    1.     int rescale(int x){
    2.         asm(    "test %%eax,%%eax\n\t"
    3.             "pushl %%eax\n\t"
    4.             "jz rescale_R\n\t"
    5.             "fldlg2\n\t"
    6.             "fildl (%%esp)\n\t"
    7.             "fyl2x\n\t"
    8.             "fldl (_scale)\n\t"
    9.             "fmulp %%st,%%st(1)\n\t"
    10.             "fistpl (%%esp)\n\t"
    11.             "rescale_R:\n\t"
    12.             "popl %%eax"
    13.             : "=a" (x)
    14.             : "a" (x)
    15.         );
    16.         return x;
    17.     }
    Более подробно о синтаксисе асма AT&T и оформлении вставок можно почитать в манах GCC. Ссылку на конкретный топик можно найти в факе.
     
  3. dj0nik

    dj0nik New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2007
    Сообщения:
    15
    а как делать асм вставки в Visual C++ 2005 Express Edition?
     
  4. HandMill

    HandMill New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2007
    Сообщения:
    5
    dj0nik
    __asm
    {
    }
     
  5. dj0nik

    dj0nik New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2007
    Сообщения:
    15
    Используя Dev-C++ решил протестить асм вставки, написал простенький до ужаса кодес:

    Код (Text):
    1. #include <cstdio>
    2. #include <cstdlib>
    3.  
    4. using namespace std;
    5.  
    6. int main(int argc, char* argv[])
    7. {
    8. cout << "asm vstavki\n";
    9.  
    10. asm("mov %eax, 10") ;
    11. asm("add %eax, 15") ;
    12.  
    13. system("PAUSE");
    14. return 0;
    15. }
    компилится отлично, но вот запускаеш .exe файл скомпилированной проги, как винда выкидывает "недопустимую ошибку и окно будет закрыто, хотите отправить отчет?"

    в чем проблема?
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Отлаживать не пробовал?
     
  7. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    dj0nik
    Код (Text):
    1. #include <cstdio>
    2. #include <cstdlib>
    3.  
    4. int main() {
    5.   printf("test\n");
    6.   asm("movl $10, %eax\n\t"
    7.       "addl $15, %eax\n\t");
    8.   return 0;
    9. }
    Все таки пренебрегать этим не надо.
     
  8. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    в Intel-нотации это будет так:
    Код (Text):
    1. mov dword ptr [10], eax
    2. add dword ptr [15], eax
    Результаты ясны :)
     
  9. dj0nik

    dj0nik New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2007
    Сообщения:
    15
    ненашел я в факе нихрена, мож кто даст тогда, закрепите ссылочкой текст то свой..
     
  10. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    dj0nik
    GCC-Inline-Assembly-HOWTO
    Что-то мне подсказывает, что справочник Вам не поможет...
     
  11. CroX

    CroX New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2006
    Сообщения:
    37
    В AT&T-нотации обратный интеловскому порядок следования операндов:
    Intel:
    Код (Text):
    1. mov eax,10
    2. add eax,15
    AT&T:
    Код (Text):
    1. movl $10,%eax
    2. addl $15,%eax
     
  12. JohnSmith

    JohnSmith New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    41
    асмовых вставок рекомендуется избежать ввиду плохой переносимости между средами разработки.
    разумеется если речь идет о реальных проектах.