2009-11-05 105 views
1

MIPS寄存器有一個約定 - 跨子程序調用保留$ s寄存器,所以如果你的子程序修改它們,它應該將它們保存到堆棧,而$ t寄存器不被保留。

現在,系統調用可以修改$ t寄存器嗎?在我有的模擬器中,它不會,但真正的機器可能會改變$ t寄存器嗎?我問,因爲我想知道 是否可以安全地假設$ t寄存器在系統調用中保持不變。

+2

什麼操作系統?它不依賴於特定操作系統的實現嗎? – 2009-11-05 06:01:37

回答

2

這是不明智的,除非有記錄,依靠任何調用保持特定的寄存器。

如果系統調用的doco聲明它只修改某些寄存器,那麼這是與您的代碼的契約。如果它違反了合同,這是一個錯誤(儘管你可能更容易修復你自己的代碼而不是等待開發者)。如果沒有說明這一點,不要依賴它,約定或其他。

寫得好的調用將保留全部寄存器,這些寄存器並非專門用於返回您的信息。但是,如果您不確定,並且您需要保存該寄存器,請在調用系統調用之前自行完成。

1

現在,系統調用可以修改$ t寄存器嗎?

是的!

當然,您的操作系統的系統調用接口可能會保留所有這些寄存器。但沒有技術上的原因,爲什麼系統調用不能修改它們。檢查您的操作系統的文檔。