Ein Interrupt-Handler muss alle allgemeinen Register speichern, die er verwenden soll (um bei der Rückkehr wiederhergestellt zu werden). Dazu müssen Sie jedoch mindestens ein Register zuerst ändern (etwas wie sw $t0, saved_t0
wird auf zwei Maschinenanweisungen erweitert, indem $at
verwendet wird).
Diese Situation wird durch das Verbot von Anwenderprogrammen aus mit zwei allgemeinen aufgelöst - Universalregistern, $k0
und $k1
(Die k steht für Kernel, der ein Exception-Handler Teil ist). Der Interrupt-Handler darf $k0
und $k1
verwenden, ohne ihre Werte speichern oder wiederherstellen zu müssen. Dies erlaubt gerade genug Spielraum, um das Speichern von Registern zu starten, sowie das Zurückkehren von dem Interrupt-Handler zu ermöglichen.
'$ k0' und' $ k1' sind nur Aliase für die Register '$ 26' und' $ 27'. Der "reservierte" Teil ist nur per Konvention, die CPU ist es egal. Das Betriebssystem kann es für alles verwenden, was es will. Kann als Scratch-Register nützlich sein, das verwendet werden kann, ohne Angst davor zu haben, den Benutzer-Space-Status zu beschädigen. – Jester
@Jester OK, und so, Wie kann OS diese Register verwenden? (Wie '$ 1', das vom Assembler benutzt wird, während Pseudobefehle in Anweisungen umgewandelt werden) (Als ich nach meinen Antworten suchte, stieß ich auf Begriffe wie:" Sie werden zur Verwaltung der Interrupts verwendet "und so. Wie werden sie verwendet Reihenfolge der Verwaltung von Interrupts oder was sie nützlich sind?) – AliLotfi
Sie sind normale Register, Sie können sie wie gewohnt verwenden. Versteh deine Frage nicht. Zur Verwaltung von Interrupts können sie als Scratch-Register verwendet werden, bis der Benutzerstatus gespeichert wird. Das habe ich schon gesagt. – Jester