MIPS Syscalls e $t registri
-
16-09-2019 - |
Domanda
MIPS registri hanno una convenzione - $s registri sono conservati attraverso chiamate di subroutine, quindi, se la subroutine li modifica, si dovrebbe salvare nello stack, mentre $t registri non vengono mantenute.
Ora, può un syscall potenzialmente modificare un $t registrare?In un simulatore che ho, non è così, ma potrebbe una vera e propria macchina ha i $t registri cambiare, potenzialmente?Lo chiedo perchè voglio sapere se è sicuro di assumere un $t registrare rimarrà lo stesso in una syscall.
Soluzione
Non è saggio, se non documentato, a fare affidamento su qualsiasi chiamata di conservazione di specifici registri.
Se il doco per la syscall membri, che modifica solo alcuni registri, che è un contratto con il tuo codice.Se si rompe il contratto, è un bug (anche se probabilmente più facile per voi per risolvere nel proprio codice di aspettare che lo sviluppatore).Se si afferma nulla del genere, non dipende, convenzione o altro.
Ben scritta, chiamate a conservare tutti registri che non sono specificamente utilizzato per la restituzione di informazioni.Ma, se non siete sicuri, ed è necessario che il registro conservato, do it yourself, prima di chiamare la syscall.
Altri suggerimenti
Ora, può un syscall potenzialmente modificare un $t registrare?
Sì!
Naturalmente, il vostro sistema operativo syscall interfaccia può conservare tutti questi registri.Ma non c'è nessun motivo tecnico, perché una syscall non può modificarli.Controllare la documentazione del vostro sistema operativo.