为了支持调用过程的指令,MIPS中提供了jal(Jump and Link)指令。该指令用于跳转到一个指定地址并在跳转之前将返回地址保存在寄存器中,以便在函数调用结束后返回到调用的位置。
jal指令的操作是将跳转目标地址存储在寄存器$ra中,并将PC指向跳转目标地址。跳转发生时,返回地址被压入堆栈中,并重新设置PC指向跳转目标地址。当跳转目标地址执行完成后,使用jr指令将$ra寄存器中的地址作为跳转目标地址,以返回到调用点。
示例代码:
main:
addi $sp, $sp, -4 # create space for storing return address
sw $ra, 0($sp) # save return address in the stack
jal my_function # jump to my_function
lw $ra, 0($sp) # restore return address from the stack
addi $sp, $sp, 4 # delete space for storing return address
jr $ra # jump to return address
my_function:
# function code here
jr $ra # return back to the calling code
在此示例中,程序执行到jal my_function时,会将返回地址存储在$ra寄存器中,并跳转到my_function的地址执行。在my_function执行完成后,使用jr $ra返回并继续执行main函数中的指令。