0

CプログラムをMIPSアセンブリコーディングに変換してみたい

C言語プログラムは次のとおりです。

int x=2;

int index;

for(index = 0;index<4;index++){

     x=x+index;

}

MIPSアセンブリコーディングに対する私の試みは次のとおりです。

      li $8,4   # the limit
      li $9,2   #x = 2
      li $10,0  #index, starts at 0

forLoop:
      slt $11,$10,$8   #if index <4 then $11 = true =1
      beq $11,$0,Exit  #if $11 = 0 = false means reached 4, then exit
      add $9,$9,$10    #adding the index with the value in x
      addi $10,1       # add 1 to the index if didnt reach the limit
      j forLoop        # repeat the loop
Exit:
      nop              #end 

私は mips シミュレーターを持っていないので、これが正しいかどうか皆さんに尋ねる必要があります。プログラムを終了する方法がわかりません。nop は有効な終了計画ですか?

4

2 に答える 2

1

これは、C コードを MIPS に変換する単純なバージョンです。

注: これには SPIM を使用しています。

main:
    li $t0, 2           # $t0 = x = 2
    li $t1, 0           # $t1 = index = 0
    li $t2, 4           # $t2 = indexLimit = 4
    jal forLoop         # jump and link the forLoop label
    move $a0, $t0       # move the result into $a0 for printing
    li $v0, 1           # load print integer code
    syscall             # tell system to do it
    li $v0, 10          # load exit code
    syscall             # clean exit

forLoop:
    bge $t1, $t2, exit  # if index >= 4 goto exit label
    add $t0, $t0, $t1   # x = x + index
    addi $t1, $t1, 1    # index++
    j forLoop           # continue loop by jumping back up

exit:
    jr $ra              # jump and return the return address

あなたの質問に答えるには:nop何もしません。タイミングの目的などに使用できます。さらに読むためのウィキペディアのリンクhttp://en.wikipedia.org/wiki/NOPを次に示します。MIPS プログラムを終了するには、10 を $v0 にロードしてから syscall にロードすることに注意してください。

編集:

あなたのコメントに応えて:あなたは正しい軌道に乗っていますが、メインラベルを追加することを忘れないでください。次に、メインラベルから forLoop にジャンプし、Exit ラベルでプログラムを終了させます(必要に応じて整数を最初に出力します)。 .

これらは、MIPS でのプログラミングに役立つ 2 つのリンクです。 http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html http://logos.cs.uic.edu/366/notes/mips %20quick%20tutorial.htm

于 2013-06-19T01:33:51.553 に答える