ARM アセンブラを C 言語から呼び出す ー 戻り値の利用
昨日の簡単な関数 kakeruni (掛ける2) を戻り値を使うように変更しました。
変更した箇所を赤で強調しています。
extern int kakeruni(int b);
int main(int argc, char *argv[]){
int v;
v = atoi(argv[1]);
printf("%d\n", v);
v = kakeruni(v);
printf("%d\n", v);
return 0;
}
.text
.global kakeruni
.type kakeruni, %function
kakeruni:
MOV R0, R0, LSL #1;
BX lr;
コンパイルの手順と実行結果は昨日と同じです。
ここで確認したかったことは関数の戻り値は R0 に格納すればよいということでした。
これに関連して関数の戻り値、呼び出しについて考察たので、別の記事として次に投稿します
変更した箇所を赤で強調しています。
main.c
#include <stdio.h>extern int kakeruni(int b);
int main(int argc, char *argv[]){
int v;
v = atoi(argv[1]);
printf("%d\n", v);
v = kakeruni(v);
printf("%d\n", v);
return 0;
}
kakeruni.s
.eabi_attribute Tag_ABI_align8_preserved,1.text
.global kakeruni
.type kakeruni, %function
kakeruni:
MOV R0, R0, LSL #1;
BX lr;
コンパイルの手順と実行結果は昨日と同じです。
ここで確認したかったことは関数の戻り値は R0 に格納すればよいということでした。
これに関連して関数の戻り値、呼び出しについて考察たので、別の記事として次に投稿します