Linguagem de montagem dos MIPS-registo temporário vs registos gravados

Até agora tenho usado registos $s0-$s9 e da mesma forma que registos $t0-$t9. Fui informado e Lido inúmeros posts e parágrafos do fórum aqui e no Google explicando a diferença, mas sem exemplos de codificação. Disseram-me que devia ver a diferença em relação ao uso de procedimentos, mas criei um número incontável de cenários envolvendo procedimentos num esforço para encontrar a diferença entre registos guardados e registos temporários, mas falhei.

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?

Author: Gingerbread, 2013-11-21

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.

 41
Author: Konrad Lindenbach, 2015-04-30 08:44:45