Создал си проект программы имеющую асм подрограмму, при этом абсолютно не могу понять каким образом передавать данные подпрограмме и извлекать результат(что в какие регистры попадает и по каким правилам).
Еще один момент это использование 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