реклама на сайте
подробности

 
 
> Передача аргументов из Си в Асм и обратно, Кто как делает?
=GM=
сообщение Jun 12 2007, 18:29
Сообщение #1


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Народ, у меня такой вопрос назрел.

Для тексасовских процов, кто как передаёт аргументы из головной программы, написанной на Си в ассемблерную подпрограмму и как получает обратно?

До недавнего времени передавал обычно адреса двух массивов, один для входных аргументов, второй для выходных. Ещё раньше передавал значения через стек. Теперь стал задумываться о передаче и получении аргументов по значению.

Стало интересно выяснить, а как вы делаете?


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AVL
сообщение Jun 12 2007, 20:08
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 392
Регистрация: 29-05-07
Из: Москва
Пользователь №: 28 020



Для каких именно?
Я программирую сейчас для TMS320C55x. Передаю и получаю параметры через регистры и/или указатели на массивы.
Есть полезный документ TMS320C55x Optimizing C/C++ Compiler User's Guide (spru281d.pdf).
В разделе Run-Time Environment->Function Structure and Calling Conventions описано какие регистры для чего используются при вызове дочерней подпрограммы из родительской.
Например регистры xar0...xar4 для передачи указателей, t0, t1, ar0...ar4, ac0...ac2 - аргументы по значению. Возврат значения в t0, ac0.
Более подробно и обо всех возможностях см. указанный документ.

Сообщение отредактировал AVL - Jun 12 2007, 20:08
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jun 13 2007, 09:05
Сообщение #3


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(AVL @ Jun 12 2007, 19:08) *
Для каких именно? Я программирую сейчас для TMS320C55x. Передаю и получаю параметры через регистры и/или указатели на массивы.

Для семейства TMS320F28xx. Я тоже передаю параметры в асм-подпрограмму через регистры AL, AH, а указатели через xar4, xar5, если их мало. И принимаю значение функции через асс.

Сейчас пишу несколько заказных программ для КАНа, туда надо передавать один параметр, а получать четыре (один из них указатель). Мне удобно передавать по значению. Стал смотреть, что генерит компилятор. Оказалось, идёт некая возня со стеком. Присмотрелся - идёт передача по значению, отсюда и вопрос выплыл.

Цитата(AVL @ Jun 12 2007, 19:08) *
Есть полезный документ TMS320C55x Optimizing C/C++ Compiler User's Guide (spru281d.pdf).

Документ посмотрю, спасибо, хотя проц немного другой.

Цитата(Alex11 @ Jun 12 2007, 17:56) *
Естественно, разнообразными способами. Как удобнее в звисимости от количества параметров, которое нужно передать. Если мало, то через регистры. Благо там все фиксировано.

Интересует возврат в Си программу нескольких аргументов именно по значению. Можно ли сделать возврат разного числа аргументов?


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Warlord
сообщение Jun 14 2007, 05:46
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 121
Регистрация: 23-09-05
Из: Москва
Пользователь №: 8 874



Цитата(=GM= @ Jun 13 2007, 13:05) *
Интересует возврат в Си программу нескольких аргументов именно по значению. Можно ли сделать возврат разного числа аргументов?

Врядли, ведь функция С может возвратить всего лишь одно значение.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 14 2007, 06:10
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Warlord @ Jun 14 2007, 08:46) *
Врядли, ведь функция С может возвратить всего лишь одно значение.

Или возвращать указатель на структуру, или получать указатели на нужное количество переменых и устанавливать их значения.





Цитата(=GM= @ Jun 12 2007, 21:29) *
Стало интересно выяснить, а как вы делаете?

Так, как нужно в конкретном случае.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 21:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01401 секунд с 7
ELECTRONIX ©2004-2016