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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top