Метки в С+Асм

Тема в разделе "WASM.ZEN", создана пользователем 2student, 8 дек 2004.

  1. 2student

    2student New Member

    Публикаций:
    0
    Регистрация:
    8 дек 2004
    Сообщения:
    3
    Люди,помогите мне студенту с метками в С с вставкой асм-кода..

    т.е. мне необходимо объявить метку,а затим использовать ее в асм-коде....

    Пример:


    Код (Text):
    1. #define m1
    2. #define m2
    3. #define m3
    4. ..............
    5. _asm{
    6.   cmp x,5
    7.   jng m1
    8.   cmp z,6
    9.   jg m1
    10. @m1:
    11.   cmp y,0
    12.   jne m2
    13.   cmp x,0
    14.   je m2
    15. @m2:
    16.   mov ax,4
    17.   imul x
    18.   mov bx,ax
    19.   mov ax,5
    20.   imul y
    21.   add ax,bx //ax=4x+5y
    22.   sub ax,z
    23.   mov f,ax
    24. @m3:


    Вот тут у меня трабла.....Когда компилирую,у меня выскакивает сообщение о эрроре......Типа неизвестная метка....

    Как правильно объявлять метки?Может я неправильно что-то объявляю....Или предложите свой способ решения данной проблемы.....Спаисбо вам!!!
     
  2. _Juicy

    _Juicy Active Member

    Публикаций:
    0
    Регистрация:
    12 авг 2003
    Сообщения:
    1.159
    Адрес:
    SPb
    Это у вас что? Инлайн-ассемблер с++?
     
  3. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Попробуйте так:
    Код (Text):
    1.  
    2. _asm {
    3.   ...instruction...
    4.   ...instruction...
    5.   ...instruction...
    6. }
    7.  
    8. @LABEL1:
    9. _asm {
    10.   ...instruction...
    11.   ...instruction...
    12.   ...instruction...
    13. }
    14.  
    15. @LABEL2:
    16. _asm {
    17.   ...instruction...
    18.   ...instruction...
    19.   ...instruction...
    20. }
    21.  


    или так:
    Код (Text):
    1.  
    2. _asm ...instruction...
    3. _asm ...instruction...
    4. _asm ...instruction...
    5.  
    6. @LABEL1:
    7. _asm ...instruction...
    8. _asm ...instruction...
    9. _asm ...instruction...
    10.  
    11. @LABEL2:
    12. _asm ...instruction...
    13. _asm ...instruction...
    14. _asm ...instruction...
    15.  


    А также надо убрать вот это (зачем это кстати?):
    Код (Text):
    1.  
    2. #define m1
    3. #define m2
    4. #define m3
    5.  


    ^^^ Если m1 применить в коде - он превратится в пустое место, так что @m1: превратится в @:
     
  4. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Си не понимает символы "@"



    Компилятор MSVC понимает метки внутри блоков __asm {}:
    Код (Text):
    1.  
    2. __asm
    3. {
    4. label:  nop
    5.     jmp label
    6. }




    А intel C++ compiler "видит" ассемблерные метки из Си кода:
    Код (Text):
    1.  
    2. asm
    3. {
    4. label:  nop
    5.     jmp label
    6. }
    7. //
    8. goto label;




    ЗЫ: изначальный пример, это что-то вроде turbo C под дос ?
     
  5. 2student

    2student New Member

    Публикаций:
    0
    Регистрация:
    8 дек 2004
    Сообщения:
    3
    S_T_A_S_

    да,ты прав!!!

    Turbo C.....

    Ну спасибо вам огромное,что помогли :)
     
  6. 2student

    2student New Member

    Публикаций:
    0
    Регистрация:
    8 дек 2004
    Сообщения:
    3
    AsmGuru62

    Кул......все пашет!



    _asm {

    ...instruction...

    ...instruction...

    ...instruction...

    }



    @LABEL1:

    _asm {

    ...instruction...

    ...instruction...

    ...instruction...

    }



    @LABEL2:

    _asm {

    ...instruction...

    ...instruction...

    ...instruction...

    }





    Вот этот способ прокатил ;)