2
このCプログラムをどのようにしてアセンブリコードに正確に変換できますか?私は、unsigned intの操作を理解するのに苦労しています。C関数をARMアセンブリ言語に変換する
unsigned int sum(unsigned int n){
if(n==0) return 0;
else return n+sum(n-1);
}
私はunsigned int型のために考えることint型 .Howを考慮すれば、私はこれを行っていますか?
sum:
SUB sp, sp, #8
STR lr, [sp,#4]
STR r0, [sp,#0]
CMP r0,#0
BGE L1
MOV r0, #0
ADD sp, sp, #8
MOV pc, lr
L1: SUB r0, r0, #1
BL sum
MOV r12, r0
LDR r0, [sp,#0]
LDR lr, [sp,#4]
ADD sp, sp, #8
ADD r0, r0, r12
MOV pc, lr
さて、あなたはコンパイラをとり、いくつかのフラグを付けてこのプログラムを渡します。 clangの場合、 'clang -march arm -S yourprogram.c'のようなものです。 – arrowd
@arrowd 'clang -target arm -S yourprogram.c'が正しいです。 – fuz