ARM アセンブラを C 言語から呼び出す
アセンブラをC言語コードから呼び出す小さいサンプルを作ってみました。
extern void kakeruni(int *a, int b);
int main(int argc, char *argv[]){
int v;
v = atoi(argv[1]);
printf("%d\n", v);
kakeruni(&v, v);
printf("%d\n", v);
return 0;
}
.text
.global kakeruni
.type kakeruni, %function
kakeruni:
MOV R2, R1, LSL #1;
STR R2, [R0];
BX lr;
$ arm-xilinx-linux-gnueabi-gcc kakeruni.o main.c
2
4
root@zynq:~# ./a.out 23
23
46
root@zynq:~# ./a.out 125
125
250
ウェブでヒットしたサンプルコードを見よう見まねで動かしました。望ましくない書き方などがあればコメントいただけると嬉しいです
main.c
#include <stdio.h>extern void kakeruni(int *a, int b);
int main(int argc, char *argv[]){
int v;
v = atoi(argv[1]);
printf("%d\n", v);
kakeruni(&v, v);
printf("%d\n", v);
return 0;
}
kakeruni.s
.eabi_attribute Tag_ABI_align8_preserved,1.text
.global kakeruni
.type kakeruni, %function
kakeruni:
MOV R2, R1, LSL #1;
STR R2, [R0];
BX lr;
コンパイルリンク
$ arm-xilinx-linux-gnueabi-as -o kakeruni.o kakeruni.s$ arm-xilinx-linux-gnueabi-gcc kakeruni.o main.c
実行結果
root@zynq:~# ./a.out 22
4
root@zynq:~# ./a.out 23
23
46
root@zynq:~# ./a.out 125
125
250
ウェブでヒットしたサンプルコードを見よう見まねで動かしました。望ましくない書き方などがあればコメントいただけると嬉しいです