|
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
|
||||||
Встроенный asm не понимает метки (GCC).28.05.2009, 20:39. Показов 12883. Ответов 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики
1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
|
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928
Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
|
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего
Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
|
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы
Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
|
|
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока
Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
|
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
|
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат»
Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
|
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
|