Решил вот немного подучить 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++, тогда бы я и сам посмотрел
как он генерирует код для вызова функций.