Pergunta

MIPS registros têm uma convenção - registradores $ s devem ser preservadas entre as chamadas de sub-rotina, por isso, se seus modifica sub-rotina deles, deve guardá-los para a pilha, enquanto $ registros t não são preservadas

.

Agora, pode um syscall potencialmente modificar um registro $ t? Em um simulador que tenho, isso não acontecer, mas poderia uma máquina real tem a mudança $ t registros, potencialmente? Eu pergunto porque eu quero saber se é seguro assumir um registo $ t permanecerá o mesmo através de uma syscall.

Foi útil?

Solução

Não é sábio, a menos documentada, a contar com qualquer preservando chamada registos específicos.

Se o doco para os estados syscall que ele só modifica certos registros, isso é um contrato com o seu código. Se quebrar esse contrato, é um bug (embora provavelmente mais fácil para você corrigir em seu próprio código de esperar que o desenvolvedor). Se ele afirma nada do tipo, não depender dele, convenção ou de outra forma.

chamadas bem escritos irá preservar todas registros que não são usadas especificamente para devolver-lhe a informação. Mas, se você não tiver certeza, e você precisa que o registo preservada, faça você mesmo antes de chamar o syscall.

Outras dicas

Agora, pode um syscall potencialmente modificar um registro $ t?

Sim!

Claro, interface de syscall do seu sistema operacional pode preservar todos esses registros. Mas não há nenhuma razão técnica pela qual uma syscall não pode modificá-los. Verifique a documentação de seu sistema operacional.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top