MIPS syscalls e $ registros t
-
16-09-2019 - |
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.
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.