|
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
|
||||||
Встроенный asm не понимает метки (GCC).28.05.2009, 20:39. Показов 13281. Ответов 64
Метки нет (Все метки)
Только не думайте, что я, как чуть что - сразу спрашивать бегу. Искал... (Вообще, вроде должен видеть все метки и к переменные, "как свои". Так я думал...) Добавлено через 9 часов 14 минут 6 секунд Пробовал в операнд (имя метки) добавлять "_" (одно нижнее подчёркивание) - нет...
0
|
||||||
| 28.05.2009, 20:39 | |
|
Ответы с готовыми решениями:
64
Встроенный asm и 64-битные регистры Встроенный asm не видит метку (Borland 3.1) AVRstudio 4 + GCC + ASM |
|
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
|
||
| 02.06.2009, 11:03 [ТС] | ||
"Что позволено Гераклу, Не позволено в gcc" ![]() Вот, читал тут.http://www.ibiblio.org/gferg/l... HOWTO.html Там о переходах из блока asm вообще скромно умалчивают.
0
|
||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 02.06.2009, 11:11 | |
|
Ultrator, не понял чего? Переход из ассемблерного кода на внешнюю метку после return вполне возможен. В крайнем случае, это можно сделать без метки, каким-либо другим способом. Например, используя eip или еще что-то. Сейчас просто времени нет смотреть что-то по этому вопросу, других дел хватает.
Добавлено через 3 минуты 2 секунды Но любой такой способ, как было упомянуто выше Evg, будет являться хаком. Скорее всего.
0
|
|
|
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
|
||
| 02.06.2009, 11:17 [ТС] | ||
|
А в таком асмовом коде, как вариант 3, будет окончание типа:
...................jc OUT1; ....................... jmp OUT2; //а как же иначе? OUT1: mov $0, %0; //запись "0" в "res", после jc OUT2: //конец блока. return res; } Что мы имеем? Один "лишний" jmp... Добавлено через 2 минуты 17 секунд
А в GCC - покажи, плз, как, если знаешь... (Уже 2 дня пытаюсь это сделать)
0
|
||
|
|
||||||||||||||||
| 02.06.2009, 11:43 | ||||||||||||||||
|
Блин, да нарисуйте же вы мне код на ассемблере для умножения в цикле - всё сделаю. Для таких конструкций, чтобы избежать лишнего jmp'а в наиболее часто работающей ветке, используется subsection
> В других компилерах - конечно! Другие компиляторы работают с вставками предельно тупо. Ассемблерная вставка это полюс, через который не работает ни одна оптимизация. Только за счёт такого поведения возможно из вставки непосредственно обращаться к переменным, меткам и т.п. Добавлено через 1 минуту 22 секунды Реально получается, что туеву кучу времени и слов потратил только потому, что не понимаю интеловский ассемблер, а те кто знает начисто игнориуют несколько раз написанную просьбу написать код Добавлено через 8 минут 41 секунду Если настолько лениво писать код, то посмотрите, как выглядит реализация spinlock'а:
Т.е. если написать код (в предположении, что процедура проинлайнится),
0
|
||||||||||||||||
|
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
|
|
| 02.06.2009, 12:16 [ТС] | |
|
MULL источник
Выполняет беззнаковое умножение источника (регистр или переменная) на содержимое EAX и помещает результат в EDX:EAX. Если старшее слово в результате (EDX) не равно 0, флаг CF (и флаг OF тоже) - "1", иначе - "0".
0
|
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|||||||||||
| 02.06.2009, 12:16 | |||||||||||
|
Мдя...еще спины припахал.
Я сделал проще:
0
|
|||||||||||
|
|
|||
| 02.06.2009, 12:26 | |||
|
1
|
|||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
||||||
| 02.06.2009, 12:47 | ||||||
|
Блин, не на ту кнопку попал
![]() С кодом вообще не ко мне. Выше я написал код, который будет работать. Если ты не можешь справиться с опциями оптимизации это твоя личная проблема и недостаток знаний. Я выше поэтому и написал, что способов дофига. Добавлено через 15 минут 54 секунды Evg, да, тьфу...
Ладно, я привел уже два рабочих примера. Сами разбирайтесь со спинами там, где и без легко можно обойтись.
0
|
||||||
|
|
||||||||||||||
| 02.06.2009, 13:04 | ||||||||||||||
|
См. комментарии около ассемблерных конструкций и поправьте код, если написал неправильно:
Добавлено через 5 минут 13 секунд Добавлено через 2 минуты 42 секунды
0
|
||||||||||||||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 02.06.2009, 13:29 | |
|
Блин, ты че, думать разучился. Его рабочим сделать проще простого. Выше смотри, слепой.
0
|
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 02.06.2009, 13:43 | |
|
Все канает. Достаточно вставить любой код, который компилер не сможет обработать на стадии компиляции и он попадет в бинарь. Я дал рабочую идею. Пример рабочий привел. Башка есть? Значит, доделаешь.
0
|
|
|
|
||
| 02.06.2009, 13:48 | ||
|
Постановка была такая: Функция должна считать факториал и при переполнении возвращать 0. Хотелось сделать максимально быструю, насколько возможно
0
|
||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 02.06.2009, 14:05 | |
|
Детский сад, я тебе выше привел код, который будет работать.
Если решать вопрос о нахождении факториала, то я бы вообще так не извращался в метками, прыжками из ассемблерных вставок, и возни с оптимизацией. Если решать только посталенную задачу, то все элементарно, безо всяких извращений с прыжками, которыми заразили с самого начала. Добавлено через 1 минуту 26 секунд Тогда самый обычный чистый ассемблерный код все решает. Добавлено через 5 минут 41 секунду Короче, если брать решение именно задачи с факториалом, то все вещи здесь описанные нами на фиг не нужны.
0
|
|
|
|
||||||
| 02.06.2009, 14:16 | ||||||
|
1. В этом месте надо понимать программные соглашения (хотя я косвенно это зацепил, принудительно распределив res на регистр %eax) 2. Код на ассемблере уже нельзя будет inline'ить. Код написанный в виде процедуры обкладки плюс ассемблерная вставка - можно. Вообще высокопроизводительные библиотеки на этом базируются - строятся такие примитивные кирпичики в виде коротких процедур, далее строится нужное тебе большое выражение, состоящее из этих кирпичиков, а далее компилятор всё это дело по возможности оптимальным образом схлопывает. Единственно, что gcc далеко не всегда сделает это максимально оптимальным образом (мы с тобой уже это обсуждали), а потому без доработки напильником иногда не обойтись. При этом всегда нужно чётко осознавать, что код должен быть корректным. И по возможности избегать читов, которые я приводил с asm entry
0
|
||||||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 02.06.2009, 14:33 | |
|
Ну вопрос максимальной скорости, это уже другой вопрос. Тогда не понимаю, зачем вообще нам понадобились джампы через сишный код? Смысла нет, по сути, в таком подходе изначально.
0
|
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
||
| 02.06.2009, 14:37 | ||
Добавлено через 1 минуту 59 секунд Ладно, код на асме ты ему вроде написал. Способ оставить метку у него теперь тоже есть. Все зашибись
0
|
||
|
|
||
| 02.06.2009, 14:41 | ||
|
Кстати. в моём коде на ассемблере в самом конце можно сделать "ret" вместо перехода на метку "2", но это менее честный вариант, т.к. он коряво отработает в том случае, если процедура про'inline'иться (ну и не говоря уж о том, что это гораздо более явное использование знаний о программных соглашениях, а потому способ менее честный)
0
|
||
|
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
|
|
| 02.06.2009, 14:52 [ТС] | |
|
Наконец, понял я, в чём проблема.
В том, что он её инлайнит. Только и всего. Если ф-ю не вызывать нигде - всё пучком, хоть с оптимизацией, хоть без. Вот попробуйте...
0
|
|
| 02.06.2009, 14:52 | |
|
Нужно вставить блок на асме, но он не понимает asm и __asm Asm вставки в AVR GCC STM32 + ASM + arm-none-eagi-gcc = непонятки Использование внешних переменных в asm вставке и компиляцией gcc Реализовать 2 функции с использованием языка C и конструкции asm компилятора gcc Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
|
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
|
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи.
. . .
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|