2017-02-21 12 views
1

私はMIPSで助けが必要なCコードを持っています。 Cコードは以下の通りです。CからMIPSへの変換。配列のロード・ワード・オフセット?

for (i=0; i<100; i++){ 
    a[i] = b[i] + c[i] - d[i]; 
} 

これをMIPSに変換しましたが、ロード・ワードのオフセットに何を入れるべきかわかりません。

addi $t0, $zero, 0    #i = 0 

for_loop: 
    bgt $t0, 100, for_loop_done  #i <100 
    addi $t0, $t0, 1    #i++ or i = i+1 


    lw $t4, __($s0)    # load a in t4 
    lw $t1, __($s1)    # load b in t1 
    lw $t2, __($s2)    # load c in t2 
    add $t4, $t2, $t1     # add b with c and store in a 
    lw $t3, __($s3)    # load d in t3 
    sub $t4, $t3, $t4     # sub contents of a from d 
    sw $t4, __($s0)    # store contents of t4 into a 

    j for_loop      # go to start of loop 

for_loop_done: 

a、b、c、dはそれぞれs0、s1、s2、s3、s4であると仮定する。コードが必要とするのは、どのようにしてロード・ワードを相殺し、Cコードから常に変化する 'i'でワードを格納できるかということです。なぜなら、私が知っている限り、単語は静的な値しか使わないからです。

+0

あなたは1つの配列項目の各ループの大きさによって、S0、S1、S2、...をインクリメントすることができます。または、それらのコピーを作成し、元の開始アドレスが失われないように増分します。これは、これを含むほとんどの命令セットで機能します。 –

答えて

1

アレイは、メモリ内の最下位ベースアドレスに配置され、4バイトのオフセットにより、次の要素にインデックスされる[ハリスDM、ハリスSLからイメージ - デジタル設計とコンピュータアーキテクチャ、第2版 - 2012]。

Harris D. M., Harris S. L. - Digital Design and Computer Architecture, 2nd Edition - 2012

for_loop: 
     bgt $t0, 100, for_loop_done  #i <100 
     addi $t0, $t0, 1    #i++ or i = i+1 


     lw $t4, 0($s0)    # load a in t4 
     lw $t1, 4($s1)    # load b in t1 
     lw $t2, 8($s2)    # load c in t2 
     add $t4, $t2, $t1   # add b with c and store in a 
     lw $t3, 12($s3)    # load d in t3 
     sub $t4, $t3, $t4   # sub contents of a from d 
     sw $t4, 0($s0)    # store contents of t4 into a 

     j for_loop     # go to start of loop 

for_loop_done: 
関連する問題