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

 
 
> Keil и thumb ассемблер ARM, проблема с передачей и возвращением данный из си ф-ии в асм
drum1987
сообщение Mar 16 2011, 09:52
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 255
Регистрация: 3-02-09
Из: Омск
Пользователь №: 44 323



Создал си проект программы имеющую асм подрограмму, при этом абсолютно не могу понять каким образом передавать данные подпрограмме и извлекать результат(что в какие регистры попадает и по каким правилам).

Еще один момент это использование asm вставок в режиме Thumb (ни в какую не компилируется и не могу понять в чем загвоздка). Пробовал:

asm("MOV R1, R0");
__asm("MOV R1, R0");


Ошибка: использование inline ассемблера не возможно в режиме Thumb.


main файл:

#include <stdio.h>
extern void strcopy(int d, int s);
int main()
{ int srcstr = 3;
int dststr = 1;
/* dststr is an array since we’re going to change it */
strcopy(dststr,srcstr);
return (0);
}


Функция strcopy находится в файле scopy.s с содержанием:

PRESERVE8
AREA SCopy, CODE, READONLY
EXPORT strcopy
THUMB
strcopy ; R0 points to destination string.
; R1 points to source string.
MOV R1,#2 ; Load byte and update address.
MOV R2,#5 ; Store byte and update address.
BX lr ; Return.
END


Компилируется, работает, однако значение srcstr не возвращается.


Только начинаю работать со связкой асм+си пожэтому сильно не пинайте(или пните в сторону туда где чего почитать).

Проект прилагаю.

Сообщение отредактировал drum1987 - Mar 16 2011, 09:53
Прикрепленные файлы
Прикрепленный файл  Blinky.rar ( 51.67 килобайт ) Кол-во скачиваний: 16
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
drum1987
сообщение Mar 18 2011, 08:36
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 255
Регистрация: 3-02-09
Из: Омск
Пользователь №: 44 323



изучил вопрос, но одна деталь осталась открытой:
как быть если необходимо передать функции больше чем 4 переменных, и как поступись в случае если требуется фунции передавать данные так:

mult(out, out, in, in, param, param, param)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 18 2011, 12:16
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(drum1987 @ Mar 18 2011, 11:36) *
как быть если необходимо передать функции больше чем 4 переменных

В этом случае используется стек.

Цитата(drum1987 @ Mar 18 2011, 11:36) *
как поступись в случае если требуется фунции передавать данные так:

mult(out, out, in, in, param, param, param)

Поясните, чем этот случай отличается от "более четырех параметров"?
Go to the top of the page
 
+Quote Post
drum1987
сообщение Mar 18 2011, 13:08
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 255
Регистрация: 3-02-09
Из: Омск
Пользователь №: 44 323



Цитата(aaarrr @ Mar 18 2011, 19:16) *
Поясните, чем этот случай отличается от "более четырех параметров"?

Это был один и тот же вопрос...

Код
#include <stdio.h>

static __asm int MUL_F1(int rezult, int x, int y)
{
     smull r5, r0, r2, r1;
     BX   lr          ; Return.
}

static __inline int MUL_F2(int x, int y)
{
    volatile int rezult;
    MUL_F1(rezult, x, y);
    return rezult;
}

int main(void)
{
volatile int x=0xfffff, y=0xffff;
volatile int z;

z=MUL_F2(x, y);
}


Наваял прогу, после выполнения асм функции MUL_F1 в R0 как и положено кладется нужный мне результат, но перевенная rezult не меняется.

Понимаю что косяк детский и скорее всего я просто чтото не понимаю, поэтому прошу сильно не пинать...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- drum1987   Keil и thumb ассемблер ARM   Mar 16 2011, 09:52
- - aaarrr   Цитата(drum1987 @ Mar 16 2011, 12:52) Соз...   Mar 16 2011, 10:00
- - scifi   Цитата(drum1987 @ Mar 16 2011, 12:52) Тол...   Mar 16 2011, 10:16
|- - drum1987   Цитата(scifi @ Mar 16 2011, 17:16) Поясни...   Mar 16 2011, 10:37
|- - scifi   Цитата(drum1987 @ Mar 16 2011, 13:37) Раб...   Mar 16 2011, 11:03
|- - drum1987   Цитата(scifi @ Mar 16 2011, 18:03) Ну ё-м...   Mar 16 2011, 12:32
- - RabidRabbit   Вот например, что работает в Keil у меня: CODE// 2...   Mar 16 2011, 12:03
- - yashok   Цитатавот например пример 6.1 по адресу http://www...   Mar 16 2011, 12:50
|- - drum1987   Цитата(yashok @ Mar 16 2011, 19:50) Функц...   Mar 16 2011, 14:07
|- - aaarrr   Цитата(drum1987 @ Mar 16 2011, 16:57) Так...   Mar 16 2011, 14:08
- - yashok   Попробуйте написать функции с требуемым количество...   Mar 18 2011, 09:23
- - yashok   ЦитатаНаваял прогу, после выполнения асм функции M...   Mar 18 2011, 13:23
- - aaarrr   По порядку: 1. В своей подпрограмме вы не имеете п...   Mar 18 2011, 13:26
- - drum1987   Спасибо. Сделал как написали все заработало Но е...   Mar 21 2011, 12:34
- - aaarrr   Цитата(drum1987 @ Mar 21 2011, 15:34) Пол...   Mar 21 2011, 13:49
- - scifi   Цитата(drum1987 @ Mar 21 2011, 15:34) в и...   Mar 21 2011, 14:04


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

 


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


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