0

私は NIOS II IDE で MIPS 32 ビット アセンブリを学んでおり、r4 と r5 に保存されている 2 つの数値を乗算し、結果を r2 に返す完全に機能するサブルーチンを取得しています。

      .global muladd            # makes label "main" globally known

        .text                   # Instructions follow
        .align  2               # Align instructions to 4-byte words

muladd:
   movi r2, 0 # total = 0
   movi r8, 0 # i = 0
L1:   # if( i >= a ) goto L2
   bge r8, r4, L2 # a i r4
    # total = total + b
   add r2, r2, r5 # öka b med r5
   addi r8, r8, 1 # i = i + 1
   br L1 # goto L1
L2: # return( total )
ret

サブルーチンを呼び出して、そこから何かを出力して、期待どおりに動作していることを確認するにはどうすればよいですか? これは私の最初のサブルーチンであり、以前にサブルーチンを呼び出したことがないので、すぐにすべてを理解できない場合はご容赦ください。

4

1 に答える 1

1

次のように main からサブルーチンを呼び出します。

main:
  ...
  li r4, 123    // load some test data into r4 and r5
  li r5, 1
  jal muladd    // call muladd. Return address is stored in r31
  nop           // branch delay slot
  // muladd returns to this address. 
  // If muladd worked correctly r2 should contain decimal 123+1, or 124
  // print subroutine call goes here
  ...

Muladd はjr r31(レジスター 31 に含まれるアドレスにジャンプ) を使用して戻ります。非標準環境では、これをret.

于 2012-08-23T01:05:26.083 に答える