|
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
|
||||||
Встроенный asm не понимает метки (GCC).28.05.2009, 20:39. Показов 12361. Ответов 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 | |
|
Помогаю со студенческими работами здесь
60
Нужно вставить блок на асме, но он не понимает asm и __asm Asm вставки в AVR GCC STM32 + ASM + arm-none-eagi-gcc = непонятки Использование внешних переменных в asm вставке и компиляцией gcc Реализовать 2 функции с использованием языка C и конструкции asm компилятора gcc Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|