Макрос с ассемблером
От: zheka2  
Дата: 27.04.11 05:18
Оценка:
Понадобилось написать макрос, в котором используются инструкции ассемблера
#define CALC1 \
        __asm\
        {\
            mov eax, dword ptr [begin2]    \
        lea edx, beginlbl        \
        }\

При компиляции ругается на lea мол зарезервированное слово, я так понимаю препроцессор переводит конструкцию в одну строку. В таком случае как разделить команды?
Re: Макрос с ассемблером
От: const_volatile  
Дата: 27.04.11 05:35
Оценка: 4 (1) :)
Здравствуйте, zheka2, Вы писали:

Z>При компиляции ругается на lea мол зарезервированное слово, я так понимаю препроцессор переводит конструкцию в одну строку. В таком случае как разделить команды?


оператор "__asm" сам по себе является разделителем команд.

#define CALC1 \
    __asm mov eax, dword ptr [begin2] \
    __asm lea edx, beginlbl


забавно, что в msdn написано, что в блоке __asm команды можно опционально разделять ";", однако встроенный ассемблер всё что после ";" воспринимает как комментарий. микрософт такой микрософт
Re: Макрос с ассемблером
От: ilnar Россия  
Дата: 27.04.11 07:59
Оценка:
Здравствуйте, zheka2, Вы писали:

Z>Понадобилось написать макрос, в котором используются инструкции ассемблера

Z>
Z>#define CALC1 \
Z>        __asm\
Z>        {\
Z>            mov eax, dword ptr [begin2]    \
Z>        lea edx, beginlbl        \
Z>        }\
Z>

Z>При компиляции ругается на lea мол зарезервированное слово, я так понимаю препроцессор переводит конструкцию в одну строку. В таком случае как разделить команды?

а я все же предлгаю сделать инлайн функцию, а не макросом решать
Re[2]: Макрос с ассемблером
От: zheka2  
Дата: 27.04.11 08:21
Оценка:
Здравствуйте, ilnar, Вы писали:

I>Здравствуйте, zheka2, Вы писали:


Z>>Понадобилось написать макрос, в котором используются инструкции ассемблера

Z>>
Z>>#define CALC1 \
Z>>        __asm\
Z>>        {\
Z>>            mov eax, dword ptr [begin2]    \
Z>>        lea edx, beginlbl        \
Z>>        }\
Z>>

Z>>При компиляции ругается на lea мол зарезервированное слово, я так понимаю препроцессор переводит конструкцию в одну строку. В таком случае как разделить команды?

I>а я все же предлгаю сделать инлайн функцию, а не макросом решать


а есть возможность передать адрес метки в inline функцию?
Re[3]: Макрос с ассемблером
От: rg45 СССР  
Дата: 27.04.11 08:31
Оценка:
Здравствуйте, zheka2, Вы писали:

I>>а я все же предлгаю сделать инлайн функцию, а не макросом решать


Z>а есть возможность передать адрес метки в inline функцию?


Нет, к сожалению. Если бы это было возможно, то получение адресов начала и конца тела функции, о котором речь шла здесь
Автор: rg45
Дата: 21.04.11
, можно было бы не встраивать внутрь целевой функции, а реализовать отдельно.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[4]: Макрос с ассемблером
От: zheka2  
Дата: 27.04.11 08:40
Оценка:
Спасибо. Тогда посижу на макросе)
Re[3]: Макрос с ассемблером
От: ilnar Россия  
Дата: 27.04.11 08:46
Оценка:
Здравствуйте, zheka2, Вы писали:

Z>Здравствуйте, ilnar, Вы писали:


I>>Здравствуйте, zheka2, Вы писали:


Z>>>Понадобилось написать макрос, в котором используются инструкции ассемблера

Z>>>
Z>>>#define CALC1 \
Z>>>        __asm\
Z>>>        {\
Z>>>            mov eax, dword ptr [begin2]    \
Z>>>        lea edx, beginlbl        \
Z>>>        }\
Z>>>

Z>>>При компиляции ругается на lea мол зарезервированное слово, я так понимаю препроцессор переводит конструкцию в одну строку. В таком случае как разделить команды?

I>>а я все же предлгаю сделать инлайн функцию, а не макросом решать


Z>а есть возможность передать адрес метки в inline функцию?


нет. в код asm не вдавался, когда предложил inline
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.