Машинные команды в C

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

  1. Mingan

    Mingan New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2007
    Сообщения:
    3
    Уважаемые, подскажите пожалуйста
    каким образомможно в прогамме на языке C вставить машинный код (не ассемблер именно машинный !)
     
  2. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    нужно спрашивать не про C, а про конкретный компилятор
    вообще в асме машинные инструкции вставляются с помощью db
    асм в C вставляется с помощью __asm
    но в MS Visual C так не получится
     
  3. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    ну можно сделать массив вроде char code[]=...
    потом __asm
    {
    lea eax, code
    jmp eax
    }
    ну или как то в этом духе
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    __emit ?
     
  5. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    шо це?
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    это типа db но для асм-вставок в си.

    пример - команда NOP:

    Код (Text):
    1. __asm {
    2.    __emit 0x90
    3. }
    аналог db 90h

    Вообщем-то, __emit и есть ответ на вопрос топика.

    Другой пример - XOR EAX,EAX:
    Код (Text):
    1. __asm {
    2.   __emit 0x33
    3.   __emit 0xC0
    4. }
    Аналог db 33h, 0c0h


    spencer
    извращенец ))
     
  7. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    разводите..

    зы проверил, не разводите ))
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    да не вру я) сам юзал этот эмит и нормально всё )
    он просто объявляет один байт в текущем месте.
     
  9. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    да понял я )
    не знал, кстати
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    я тоже узнал о ней не так давно =) кодга потребность возникла, потыкал db, повтыкал долго на ошибку компиляции и забил))
     
  11. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Все беды от того, что народ доки не читает
     
  12. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    это какие такие доки? iec 14882? не чител и не буду, ибо бред на флуде! ))
     
  13. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.549
    Адрес:
    Russia
    Кстати, а если собирать под 64х битную машину, то это не прокатит.. Надо отдельно асм файл билдить ml64 и линковать объектник.
     
  14. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    эх, блин.. люди уже вовсю юзают 64 бита, а у меня до сих пор Athlon 1333 ))
    нуна срочно апгрейдиться.. )
    (оффтоп)
     
  15. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    нафиг... я не перейду на 64бита, пока не будет острой необходимости в этом.
     
  16. dag

    dag New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    446
    __asm __volatile (".byte 0xEB;"
    ".byte 0x04;"
    ".byte 0xEB;"
    ".byte 0x05;"
    ".byte 0x89;"
    ".byte 0x01;");
     
  17. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    dag
    gcc?
    кстати, всегда хотел узнать, что означает violate применительно к asm?
     
  18. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Nouzui
    Практически то же, что и для ЦеПеПе - способ сказать компилятору - "не выделывайся, оптимизатор хренов, пиши шо говорят" :)
     
  19. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    эй-эй.. а так что, компилер может прооптимизировать ассемблерную вставку??
     
  20. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    насколько я помню, функции с асм-вставками никогда не подвергаются оптимизации.