0

我正在 NIOS II IDE 中学习 MIPS 32 位汇编,我有一个完整的工作子例程,它将存储在 r4 和 r5 中的两个数字相乘并在 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 回答