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)
person
pohchen
schedule
06.04.2011