Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/54: Рейтинг темы: голосов - 54, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 17.11.2012
Сообщений: 43

Как вызывать функции на ASM из CИ?

20.11.2012, 14:54. Показов 10157. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Поделитесь плз ссылками на доки про то, как вызывать функцию на ASM из модуля на CИ и функцию
на Cи из модуля на ASM. Нужно повысить быстродействие. Про встроенный ASM уже прочитал
Пишу в ATMEL STUDIO 6.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.11.2012, 14:54
Ответы с готовыми решениями:

Как определять функции в asm, а вызывать их в Си
Здравствуйте! Кто нибудь знает как определять функции в asm, а вызывать их в Си? И как их вместе связывать? В инете искал, нет ничего...

Delphi и ASM - не работает вызов функции Invoke через asm
В Delphi не работает вызов функции Invoke через asm. часть кода: asm invoke CloseHandle,ebx; invoke ExitProcess,0; ...

Как правильно вызывать функции
Всем привет! Ковыряюсь-разбираюсь с jQuery ... Есть хтмл страничка и есть отдельный документ scripts.js со скриптами. Хочу...

16
0 / 0 / 0
Регистрация: 27.06.2010
Сообщений: 405
20.11.2012, 15:16
Если асмовая функция принимает параметры, то сначала нужно почитать о соглашениях вызовов: http://gcc.gnu.org/wiki/avr-gcc. Раздел Calling Convention. Потом в соответствии с параметрами объявить прототип этой функции:
Code
1
int FunctionName(int);
А асм-файле имя должно соответствовать прототипу:
Code
1
2
3
FunctionName:
...
ret
Всё.
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
20.11.2012, 15:25
Какое то патологическое нежелание воспользоваться поиском.
Использование asm-функций в коде Си. - http://forum.iosyitistromyss.r... ilit=asm+c
Asm + C: идеологический вопрос - http://forum.iosyitistromyss.r... ilit=asm+c
Обработчик прерывания Си & ASM - http://forum.iosyitistromyss.r... ilit=asm+c
Переход на ASM после Си - http://forum.iosyitistromyss.r... ilit=asm+c
Дружба Asm и C - http://forum.iosyitistromyss.r... lit=+asm+c
0
0 / 0 / 0
Регистрация: 17.11.2012
Сообщений: 43
20.11.2012, 17:35
Быстренько просмотрел все. Получается, что из ASM-функции, которая вызывается в проекте на Си, нельзя вызвать Си-функцию из этого же проекта?
А в чем там проблема?
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
20.11.2012, 19:11
Цитата Сообщение от mxpsomtrottir
А в чем там проблема?
Линкер ассемблера не умеет адресовать и привязывать С функции. Да и откомпилить С функцию не умеет.
0
0 / 0 / 0
Регистрация: 17.11.2012
Сообщений: 43
21.11.2012, 00:29
Цитата Сообщение от omokost
Цитата Сообщение от mxpsomtrottir
А в чем там проблема?
Линкер ассемблера не умеет адресовать и привязывать С функции. Да и откомпилить С функцию не умеет.
А причем тут линкер ассемблера?
Я же в Си пишу. Из Си вызываю ASM-функцию, а из нее вызываю Си-функцию этого же проекта.
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
21.11.2012, 07:14
Если в С на вызываемую функцию можно поставить метку или привязать ее к строго определённому адресу, то можно поизвращаться.
0
0 / 0 / 0
Регистрация: 17.11.2012
Сообщений: 43
21.11.2012, 15:48
Цитата Сообщение от YTYOUT
Если в С на вызываемую функцию можно поставить метку или привязать ее к строго определённому адресу, то можно поизвращаться.
Зачем нужно извращаться?
У функции есть имя/параметры.
Где-то должен быть док, который описывает как компилится и линкуется файл на ASM, вставленный
в проект на CИ. Какой должен быть синтаксис обьявлении функций и переменных, используемых
в этом файле. Или же в каком-то доке должно быть написано, что я могу вставить в проект на СИ
файл на ASM, но в нем можно только определить тела функций, без вызова функции, которые
определены вне этого файла. А как быть если у меня несколько файлов на ASM ? А как быть с глобальными переменными?
Не может быть, чтобы все было так фигово.
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
21.11.2012, 16:11
Цитата Сообщение от mxpsomtrottir
Не может быть, чтобы все было так фигово.
Именно так и обстоит дело для МК. С для ASM является языком высокого уровня, структуры которого компилируются в инструкции того же ASM. Фунуции ASM при использовании в С должны быть специальным образом оформлены. И препроцессор С просто вставляет ASM функции в программу. При этом он проверяет только синтаксис, не соответствует соглашению - крах программы. В свою очередь ассемблер ничего не знает о ЯВУ, нет никаких соглашений о вызове функций ЯВУ и т. д. Поэтому препроцессор С не примет вызов функции из ASM. Хотя и не пробовал такое извращение, попробуйте потом расскажете.
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
21.11.2012, 17:19
Что бы там нее писалось на С - всё равно компилятор переведёт сие в asm , ему так понятней сгенерить hex + добавит вставки asm. А вот вставка asm , зная где находится теперь уже asm-кая функция (бывшая С) легко уйдёт на эту функцию т.к. компилятор команды asm вставки никогда и не при каких оптимизациях не тронет , для него это табу. А уж как в asm "скакать" куда угодно через стек , я думаю большенство знает.
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
21.11.2012, 17:28
Разговор ни о чем.
Если проект на С, препроцессор С умеет вызывать правильно оформленные ASM функции. Если проект на ASM, препроцессор ASM не умеет вызывать функции оформленные на ЯВУ. Я не знаю способа, позволяющего препроцессору С правильно состыковать вызов С функции из ASM кода. Никогда раньше об этом не слышал (именно для МК).
Если знаете такой способ, приведите рабочий пример, или аппноту.
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
21.11.2012, 18:01
Сам я такое ещё не проделывал. Но не постеснялся спросить у знающих людей. Вот , что мне ответили.
В доке на ваш компилятор должно быть написано.
Рискну предложить посмотреть в ASM листинг Вашей программы, там будут сплошь и рядом ASM вызовы функций написанных на Си.
Вот ещё такая подсказка
Не надо делать вставок. Вызвать -- call <имя функции>. Но... нужно соблюдать порядок передачи аргументов, в частности кто от них стек освобождает.
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
21.11.2012, 18:07
В доке на ваш компилятор должно быть написано.
Кажется единстенный из ваших советчиков кто дал толковый ответ. И что говорят доки?
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
21.11.2012, 18:16
И что говорят доки?
Насколько я понимаю ответ был дан сразу после первого поста TC
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
21.11.2012, 18:22
[QUOTE="YTYOUT"][QUOTE="Цитата:[/QUOTE]
И что говорят доки?
Насколько я понимаю ответ был дан сразу после первого поста TC
Не внималельно читаете, ответ был дан о возможности вызова ASM функции из С проекта. Вы же отвечаете о возможности в С проекте вызвать С функцию (того же проекта) из прилинкованной ASM функции.
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
21.11.2012, 19:31
Так , вот слова TC
как вызывать функцию на ASM из модуля на CИ и функцию
на Cи из модуля на ASM.
В принципе и то и другое возможно.
Вот у ATMEL , есть такой док. Приложение с примером правда для IAR , но на чём пишет TC
Отвечая на мой вопрос , как из ASM вызвать C , народ ответил call имя функции и компилятор поймёт , что я хочу.

Вот , что он хочет узнать.
Где-то должен быть док, который описывает как компилится и линкуется файл на ASM, вставленный
в проект на CИ. Какой должен быть синтаксис обьявлении функций и переменных, используемых
в этом файле. Или же в каком-то доке должно быть написано, что я могу вставить в проект на СИ
файл на ASM, но в нем можно только определить тела функций, без вызова функции, которые
определены вне этого файла. А как быть если у меня несколько файлов на ASM ? А как быть с глобальными переменными?
Так Вы посмотрите как ваша Си функция вызывается в другом месте и повторите подготовительные этапы в нужный кусок кода. Что там перед call <имя функции> умный компилятор еще делает?

./styles/iosyitistromyss/imageset/icon_topys_attach.gif" width="14" height="18
[94.31 Кб]
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
21.11.2012, 19:39
Вот аппноты для IAR дествительно раньше не видел. Наверное потому что изредка пользуюсь Keil.
Но все же, зачем в одном проекте делать перекрестные связи между C и ASM частями? Других заморочек не хватает?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.11.2012, 19:39
Помогаю со студенческими работами здесь

Как вызывать тригонометрические функции?
Имеется: Double shag, x, xLev = -1, xPrv = -0.5, y; Int16 m, n = 5; shag = (xPrv - xLev) / n; while (m &lt;= n) { y = (sin(x) *...

ManagerClass как вызывать функции
Здравствуйте! Пишу такой код: main.cpp .... ManagerClass* Manager = new ManagerClass; Manager-&gt;CreateData(тип данных); .......

Как правильно вызывать функции?
Подскажите, пожалуйста, почему не выводится сообщение. При нажатии на кнопку 2, должно генерироваться случайное число 0 или 1,...

Как правильно вызывать функции
Ребят, объясните как правильно ее вызывать ,пожалуйста.

Как вызывать функции из DLL?
Здравствуйте. Как вызывать функции из DLL? Вот например, если функция представляет собой что - то такое: void setValue( int x, int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru