1. первые два - инструкции, третий - специальный регистр
- jal = переход и ссылка (адрес следующей инструкции помещается в $ ra и переход к целевому адресу)
- jr = перейти к указанию регистра
- $ ra = обратный адрес
мы часто используем инструкцию, подобную этой ...
- jr $ ra (скопировать $ ra в счетчик программы)
это означает возврат (переход) на адрес, сохраненный в $ ra.
2
Вот пример функции (процедуры) в C
int main(){
x=addthem(a,b);
}
int addthem(int a, int b){
return a+b;
}
функция в 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)