Я новичок, я хочу изучить язык ассемблера ARM и использовать набор инструментов gnu, поэтому я решил начать с небольшого проекта, который смешивает файл сборки arm и файл C с помощью набора инструментов gnu.Моя идея заключается в вызове функции, определенной в файле сборки.
multi.S:
.globl multi
multi:
str fp,[sp,#-4]!
add fp,sp,#0
sub sp,sp,#12
str r0,[fp,#-8]
str r1,[fp,#-12]
ldr r3,[fp,#-8]
ldr r2,[fp,#-12]
mul r1,r2,r3
mov r3,r1
mov r0,r3
add sp,fp,#0
ldr fp,[sp],#4
bx lr
multi.c:
#include <stdio.h>
unsigned int multi(unsigned int a, unsigned int b);
int main(int argc, char *argv[]){
unsigned int x = multi(3,4);
printf("%u\n",x);
return 0;
}
Затем я попытался связатьих вместе, используя команду следующим образом:
arm-none-eabi-gcc -g -c -o multi-arm.o multi.S
arm-none-eabi-gcc -g -c -o multi.o multi.c
arm-none-eabi-ld multi.o multi-arm.o -o multi.elf
Но произошли некоторые ошибки:
- предупреждение: не удается найти символ ввода _start;по умолчанию 0000000082000000 => Я решил эту проблему, добавив -lc --entry main, и предупреждающее сообщение исчезло.
- multi.c: 6: неопределенная ссылка на 'printf'.Я застрял с этой ошибкой, и мне потребовалось 2 часа на поиски решения, но я до сих пор не могу это исправить.
Выше мой вопрос.Спасибо всем за чтение.