Linguagem de montagem dos MIPS-registo temporário vs registos gravados
eu faria. gostaria de ver um exemplo relativamente simples em que um registo $t0-9 não actuaria da mesma forma que um registo $s0-9 e, como resultado, produziria um valor diferente?
1 answers
Não há diferença entre as variáveis temporárias e salvas na forma como funcionam. A diferença reside na forma como são utilizados, ou melhor, na forma como devem ser utilizados.
A Convenção de chamadas MIPS especifica como os vários registos devem ser usados -- os registos $v
são para retornos de funções, os registos $a
são para argumentos de funções, as variáveis $t
são temporárias chamadas salvas , enquanto os registos $s
são chamadas salvo.
A diferença entre a chamada e a chamada guardada é a seguinte: ao chamar uma função, A Convenção garante que os registos $s
são os mesmos após o retorno, enquanto a Convenção não garante isso para os registos $t
. Claro que isso significa que se você deseja usar os registros $s
em uma rotina, você deve salvar e restaurar seus valores. Por exemplo, se a função a usa registradores $t0
e $s0
e então chama uma função B, ela deve salvar o registrador $t0
se quiser usá-lo depois da função B Voltar. A função B deve salvar $s0
antes de poder começar a usá-la.
Um exemplo:
main:
li $s0 7
li $t0 7
jal myFunction
#$s0 guaranteed to equal 7
#$t0 value not guaranteed
Esta ligação parece uma informação decente e mais profunda.
Claro, tudo isto é apenas uma convenção, e por isso só funciona se você e os outros programas respeitarem a Convenção salvando e restaurando os registos $s
de modo que não sejam substituídos por uma chamada de função.