aiwa 0 13 декабря, 2015 Опубликовано 13 декабря, 2015 · Жалоба Существующий проект для 6.10 при компиляции в 6.60 выдает ошибку: asm("label_1: \n"); asm(" SBIS 0x0E, 0x07 \n"); asm(" RJMP label_1 \n"); Error[Og005]: Unknown symbol in inline assembly: "label_1" Error[Og006]: Error in inline assembly: "Error[54]: Expression can not be forward" Если возможность отключения анализа inline-инструкций? Предлагаемый шведами вариант asm("label_1: \n " SBIS 0x0E, 0x07 \n " RJMP label_1 \n"); нежелателен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 0 14 декабря, 2015 Опубликовано 14 декабря, 2015 · Жалоба Если возможность отключения анализа inline-инструкций? дело тут не в анализе, а в метке, нельзя глобальные метки оставлять в инлайн асме! а каждый asm(".... оператор - отдельный, поэтому jmp между ними не сделать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aiwa 0 14 декабря, 2015 Опубликовано 14 декабря, 2015 · Жалоба дело тут не в анализе, а в метке, нельзя глобальные метки оставлять в инлайн асме! а каждый asm(".... оператор - отдельный, поэтому jmp между ними не сделать. Метка локальная. Пример взят из совершенно рабочего проекта, компилируемым версией 6.10.1: asm-инструкции относительных переходов с метками он копипастил напрямую. А в более поздних решили анализировать, совершенно не озадачивая себя вопросом совместимости. Вопрос снят. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 14 декабря, 2015 Опубликовано 14 декабря, 2015 · Жалоба В gcc тулчейне допустимо для меток следующее: blablabla%=: В итоге %= будет заменено уникальной подстановкой, сформированной с участием имени файла и номера строки. Хотя, если вы не пишете макросы с асмовыми вставками, то это и не особо требуется... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться