_asm {...} - константы

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

  1. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    всем привет

    VC++ 6.
    нужно в с++ коде сделать асм-вставку, в которой присутствуют переменные и константы...

    Но на такой вот код

    _asm
    {
    mov eax, 0x12345678
    dd 0x12345678
    };

    не прокатывает. Компилятор ругается:
    inline assembler syntax error in 'opcode'; found 'constant'

    Как быть?

    Писать инструкциями в данном случае наподобие таких
    00407061 123456 ADC DH,BYTE PTR DS:[ESI+EDX*2]
    00407064 ^78 C9 JS SHORT Test.0040702F


    чтобы заменить 12345678 - ну очень неудобно. Динамически тоже никак.

    Можно ли как-то компилятор научить не ругаться на константы?
     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    __asm _emit + search
     
  3. wasm_test

    wasm_test wasm test user

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

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    Great
    я спросил уже после постинга
    респект )

    censored
    спс

    Код (Text):
    1. #define xDD(X)         \    
    2. {                           \
    3.   __asm _emit (X) & 0xff    \
    4.   __asm _emit (X>>8) & 0xff \
    5.   __asm _emit (X>>16)& 0xff \
    6.   __asm _emit (X>>24)& 0xff \
    7. }
    8.  
    9. #define xDW(X)             \
    10. {                           \
    11.   __asm _emit (X) & 0xff    \
    12.   __asm _emit (X>>8) & 0xff \
    13. }
    Заодно набросал для дворда и ворда макросы...
     
  5. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    Чтобы лишнюю тему не создавать - спрошу в этой.

    Такой вопрос.

    Почему все системные структуры подсвечиваются, а мои нет. точнее когда как.
    Когда подсвечиваются, а когда нет.

    Т.е. что я имею ввиду.

    При вводе кода набираем pSomeStruct->

    вот после набора "->" разворачивается структура и мы просто выбираем нужный элемент, а не вводим его руками полностью...

    А вот для моих структур так бывает не всегда... Хотя ошибок нет. Все компилится.
    Я ввожу "->" но структура не разворачивается...
    Приходится все печатать самому...

    Помогите, в чем может быть трабл? И как можно решить?
    Юзаю
    VC++ 6
     
  6. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    попробуй через "." (прямой вызов компонента) вместо косвенного ("->"), это зависит от того, как ты объявил структуру:
    Код (Text):
    1. struct somestruct {
    2.  int q;
    3. } somestruct, * Psomestruct ;
    Для somestruct - прямой вызов, для Psomestruct - косвенный.

    хотя, в этом случае компилятор должен был бы поругаться
     
  7. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    RamMerLabs
    неа. дело не в этом. Я знаю разницу между

    PSOME_STRUCT a;
    SOME_STRUCT b;
    в первом случае а-> / во втором b.

    ознательно таких ошибок не допускаю.
    Структура не подсвечивается никак. Не прямо, не косвенно. К тому же, тут в аське порасспрашивал - не у одного меня такая трабла. Но все как-то отмахиваются...
     
  8. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    у меня таких проблем нет, правда среда 8ая.
     
  9. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    кстати: у меня тоже таких трабл нету, студия 6 и 8.
     
  10. wasm_test

    wasm_test wasm test user

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

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    может бага в том что ты пытаешься редактировать код во время отладки, жмакаешь shift-f5 и пробуешь заново
     
  12. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    nitrotoluol
    Обновись до 7.1 или поставь VisualAssist (только не плюйся сразу, а просто поотключай в нём всё ненужное).
     
  13. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    far+colorer=best ide
     
  14. P_F

    P_F New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2006
    Сообщения:
    116
    Адрес:
    Russia
    nitrotoluol
    Вся фича в том как и где у тебя что описано:
    Код (Text):
    1. ...
    2. struct somestruct
    3. {
    4.   ...
    5. } somestruct, * psomestruct ;
    6. include "ххх.cpp"
    7. ...
    часто в ххх.срр подсветка работать не будет
     
  15. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    За такой код вообще надо отрывать руки.
     
  16. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    Насчёт констант. Можно ли зарезервировать не байт, а сразу некоторый буффер. то есть аналог

    db 100 dup (0)
    rb 100

    Не очень-то хочеться писать:
    __asm{
    _emit 0
    _emit 0
    ...
    _emit 0}

    Да и коряво это получится...
     
  17. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    char buf[100] = {0};
     
  18. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    так он мне выделит чёрт знает где. а мне нужно именно в теле функции.
     
  19. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Криво, но лучше чем 100 раз набивать )

    Код (Text):
    1. #define DUP20_ZERO                                      \
    2. __asm _emit 0 __asm _emit 0 __asm _emit 0 __asm _emit 0 \
    3. __asm _emit 0 __asm _emit 0 __asm _emit 0 __asm _emit 0 \
    4. __asm _emit 0 __asm _emit 0 __asm _emit 0 __asm _emit 0 \
    5. __asm _emit 0 __asm _emit 0 __asm _emit 0 __asm _emit 0 \
    6. __asm _emit 0 __asm _emit 0 __asm _emit 0 __asm _emit 0 \
    7.  
    8.  
    9.  
    10. int
    11. main()
    12. {
    13.  
    14.     __asm {
    15.  
    16.     mov eax, 5
    17.  
    18.     DUP20_ZERO
    19.     DUP20_ZERO
    20.     DUP20_ZERO
    21.     DUP20_ZERO
    22.     DUP20_ZERO
    23.  
    24.     xor eax, edx
    25.  
    26.     }
    27.  
    28. }
     
  20. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    не чёрт знает где, а в секции данных ;)