2017-03-18 9 views
0

ARMアセンブラを初めて使用しています。 qemuエミュレータの使用。ユーザ入力をCからアセンブラに渡す

このsolutionは私にとっては機能しませんでした。

私は、このCファイルmd1_main.cあります

#include <stdio.h> 
#include <stdlib.h> 
#include "md1.h" 

    int main (void) 
    { 
      int n; 
      scanf("%d", &n); 
      printf("Result = %u\n", asum(n)); 
      return 0; 
    } 

と.hファイルは、関数プロトタイプunsigned int asum(unsigned int n);

が含まれている私は、アセンブラコードにnを渡す方法を、本当に混乱しています。

アセンブラコードmd1.sです:ちょうどそれを得ることができない

.text 
.align 2 
.global asum 
.type asum, %function 

asum: 
    mov r1, #0 
    mov r2, #1 

loop: 
    cmp r2, #3 ; instead of 3 there should be my input 
    bgt end 
    add r1, r1, r2 
    add r2, r2, #1 
    b loop 

end: 
    mov r0, r1 
    bx lr 

+2

このCコードをコンパイルする対象は何ですか?プラットフォーム - Linux、Windowsなど何か? –

+0

@AjayBrahmakshatriya、linux。 – alalambda

+0

@ベニー、その解決法(?)は私のために働かなかった。 – alalambda

答えて

4

OPはアーキテクチャをARM64と言いました。したがって、私は呼び出し規約に従って答えます。

最初の4つの引数は、r0、r1、r2、r3に渡されます。

これは、コンパイラがCファイルをコンパイルするときに行う処理です。したがって、パラメータnがr0レジスタにあると期待できます。直接使用することができます。

あなたの関数が符号なしの値を返すこともわかります。それはr0レジスタに返されます。

呼び出し規約の詳細については、thisを参照してください。