Sne*_*meh 16 procedure function mips
我是MIPS语言的新手,我不明白MIPS汇编语言中的函数(过程)是如何工作的.这是但我会指出我的问题:
什么:
jal
jr
$ra
意思是mips语言和重要的事情
Mih*_*rtu 20
首先,您可能想要查看此快速MIPS参考.它真的帮助了我.
其次,解释jal
,jr
和$ra
.什么jal <label>
是跳转到label
标签并将程序计数器(将其视为当前指令的地址)存储在$ra
寄存器中.现在,当您想要从label
最初的位置返回时,您只需使用jr $ra
.
这是一个例子:
.text
main:
li $t0, 1
jal procedure # call procedure
li $v0, 10
syscall
procedure:
li $t0, 3
jr $ra # return
Run Code Online (Sandbox Code Playgroud)
您将注意到在SPIM仿真器中运行它时,剩下的值$t0
是3,即在所谓的过程中加载的值.
希望这可以帮助.
小智 10
1.前两个是指令,第三个是特殊注册
我们经常使用这样的指令......
它表示返回(跳转)到$ ra中保存的地址.
2.
这是C中的示例函数(过程)
int main(){
x=addthem(a,b);
}
int addthem(int a, int b){
return a+b;
}
Run Code Online (Sandbox Code Playgroud)
MIPS中的功能
.text
main: #assume value a is already in $t0, b in $t1
add $a0,$0,$t0 # it's the same function as move the value
add $a1,$0,$t1
jal addthem # call procedure
add $t3,$0,$v0 # move the return value from $v0 to where we want
syscall
addthem:
addi $sp,$sp,-4 # Moving Stack pointer
sw $t0, 0($sp) # Store previous value
add $t0,$a0,$a1 # Procedure Body
add $v0,$0,$t0 # Result
lw $t0, 0($sp) # Load previous value
addi $sp,$sp,4 # Moving Stack pointer
jr $ra # return (Copy $ra to PC)
Run Code Online (Sandbox Code Playgroud)