やまものブログ

メモ書きブログです (^_^;A

ARM アセンブラを C 言語から呼び出す

アセンブラC言語コードから呼び出す小さいサンプルを作ってみました。

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 2
2
4
root@zynq:~# ./a.out 23
23
46
root@zynq:~# ./a.out 125
125
250



ウェブでヒットしたサンプルコードを見よう見まねで動かしました。望ましくない書き方などがあればコメントいただけると嬉しいです