|
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
|
||||||
Встроенный asm не понимает метки (GCC).28.05.2009, 20:39. Показов 12611. Ответов 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта
Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
|
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром.
возможно получится прикрутить интерпретатор питон для кастомизации игровой логики.
что есть на текущий момент:. . .
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|
|
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|