всем привет 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 - ну очень неудобно. Динамически тоже никак. Можно ли как-то компилятор научить не ругаться на константы?
Great я спросил уже после постинга респект ) censored спс Код (Text): #define xDD(X) \ { \ __asm _emit (X) & 0xff \ __asm _emit (X>>8) & 0xff \ __asm _emit (X>>16)& 0xff \ __asm _emit (X>>24)& 0xff \ } #define xDW(X) \ { \ __asm _emit (X) & 0xff \ __asm _emit (X>>8) & 0xff \ } Заодно набросал для дворда и ворда макросы...
Чтобы лишнюю тему не создавать - спрошу в этой. Такой вопрос. Почему все системные структуры подсвечиваются, а мои нет. точнее когда как. Когда подсвечиваются, а когда нет. Т.е. что я имею ввиду. При вводе кода набираем pSomeStruct-> вот после набора "->" разворачивается структура и мы просто выбираем нужный элемент, а не вводим его руками полностью... А вот для моих структур так бывает не всегда... Хотя ошибок нет. Все компилится. Я ввожу "->" но структура не разворачивается... Приходится все печатать самому... Помогите, в чем может быть трабл? И как можно решить? Юзаю VC++ 6
попробуй через "." (прямой вызов компонента) вместо косвенного ("->"), это зависит от того, как ты объявил структуру: Код (Text): struct somestruct { int q; } somestruct, * Psomestruct ; Для somestruct - прямой вызов, для Psomestruct - косвенный. хотя, в этом случае компилятор должен был бы поругаться
RamMerLabs неа. дело не в этом. Я знаю разницу между PSOME_STRUCT a; SOME_STRUCT b; в первом случае а-> / во втором b. ознательно таких ошибок не допускаю. Структура не подсвечивается никак. Не прямо, не косвенно. К тому же, тут в аське порасспрашивал - не у одного меня такая трабла. Но все как-то отмахиваются...
Обычно такая проблема возникает, если файл с описанием структуры не включен в проект. Добавь хидер в проект и будет все ок.. я так выкручивался
может бага в том что ты пытаешься редактировать код во время отладки, жмакаешь shift-f5 и пробуешь заново
nitrotoluol Обновись до 7.1 или поставь VisualAssist (только не плюйся сразу, а просто поотключай в нём всё ненужное).
nitrotoluol Вся фича в том как и где у тебя что описано: Код (Text): ... struct somestruct { ... } somestruct, * psomestruct ; include "ххх.cpp" ... часто в ххх.срр подсветка работать не будет
Насчёт констант. Можно ли зарезервировать не байт, а сразу некоторый буффер. то есть аналог db 100 dup (0) rb 100 Не очень-то хочеться писать: __asm{ _emit 0 _emit 0 ... _emit 0} Да и коряво это получится...
Криво, но лучше чем 100 раз набивать ) Код (Text): #define DUP20_ZERO \ __asm _emit 0 __asm _emit 0 __asm _emit 0 __asm _emit 0 \ __asm _emit 0 __asm _emit 0 __asm _emit 0 __asm _emit 0 \ __asm _emit 0 __asm _emit 0 __asm _emit 0 __asm _emit 0 \ __asm _emit 0 __asm _emit 0 __asm _emit 0 __asm _emit 0 \ __asm _emit 0 __asm _emit 0 __asm _emit 0 __asm _emit 0 \ int main() { __asm { mov eax, 5 DUP20_ZERO DUP20_ZERO DUP20_ZERO DUP20_ZERO DUP20_ZERO xor eax, edx } }