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

 
 
> Соглашения по передаче параметров
RRaptor
сообщение Aug 18 2006, 09:29
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 3-08-06
Из: Санкт-Петербург
Пользователь №: 19 279



Решил вот немного подучить ARM - ассемблер и в плане тренировки написать быструю функцию strlen. В связи с этим появилась одна проблема, как корректно передать/принять параметры. Не нашел где это описано ни в хелпе к CrossStudio ни ARM Architecture. Может кто уже чем то таким занимался. В идеале хотелось бы получить пример типа

Код
uint32_t AddOne(uint32_t data)
{
  asm("LDR R1,[R3]");            // по идее какой то регистр должен быть указателем стека, какой?
  asm("ADD  R1,R1,#0x01");  // прибавляем 1
  asm("STR R0,[R3]");           // возвращение через стек
  asm("MOV R0,R1");            // или через регистр
}

насколько есть смысл писать функции в таком виде, может лучше описать в отдельном asm файле, но как в нем указать что эта функция будет вызываться из С (что то типа extrn/public в ассемблере для процесоров Intel).

И еще, как заставить CrossStudio создавать asm исходники из C/C++, тогда бы я и сам посмотрел
как он генерирует код для вызова функций.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
klen
сообщение Aug 18 2006, 10:50
Сообщение #2


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(RRaptor @ Aug 18 2006, 13:29) *
И еще, как заставить CrossStudio создавать asm исходники из C/C++, тогда бы я и сам посмотрел
как он генерирует код для вызова функций.

А дизасемлер че, не катит? Написал функцию на С, и смотри че компиллер сгенерил. А ваще то по умолчанию вызывающий код должен засовыват в стек параметры начиная с конца, а код функции перед возвратом подымать стек обратно. Но это в стандарте, но через регистры быстрее.
Go to the top of the page
 
+Quote Post
RRaptor
сообщение Aug 18 2006, 11:14
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 3-08-06
Из: Санкт-Петербург
Пользователь №: 19 279



Цитата(klen @ Aug 18 2006, 14:50) *
А дизасемлер че, не катит? Написал функцию на С, и смотри че компиллер сгенерил.

Простите за назойливость, а под дизассемблером понимается отдельная программа или он встроен в CrossStudio? Если первое, то название plz (или где можно взять), если второе, то как его включить, у меня генерятся только elf и hex файлы.
Настройки проекта смотрел, настройки среды тоже, вроде ничего похожего нет.
Go to the top of the page
 
+Quote Post



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

 


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


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