我正在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
如何调用子程序并从中打印一些内容以确保它按预期工作?这是我的第一个子程序,我之前从未打过一个子程序,所以请原谅我,如果我马上就不懂了。
答案 0 :(得分: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
。