2016-12-21 64 views
1

我一直在嘗試學習Mips彙編語言,但我很難知道在不同情況下使用哪些寄存器。就像當我使用$ V0,$ A0或$ T1 ...我如何知道哪些寄存器用於Mips程序

+0

我們不提供教程或建議書。如果你的問題沒有最後一段,請編輯它(左下角,「編輯」鏈接)。如果不是,請考慮刪除它。 –

回答

3

當你不使用他人,包括系統調用編寫任何代碼,你可以使用寄存器不過你想要的,只要$at保留給彙編程序,/jalr隱含使用$ra

這是不太可能你不會使用任何系統調用或任何其他人編寫的代碼。
爲了讓編譯器和人員在不查看代碼的情況下使用例程,專家之間建立了一個約定。
它被稱爲應用程序二進制接口(ABI)和MIPS got one too

ABI要求如何使用寄存器。
你只要尊重ABI:

  1. 您使用的是尊重ABI已代碼。 在這種情況下,ABI大部分是信息性的,它告訴你函數在哪裏期待參數以及它使用哪個寄存器。
  2. 當您想要與期望ABI的代碼或工具兼容時。
    當你編寫一個函數時,你稍後會給一個同事,關於ABI寫它是很好的。這樣他們已經習慣了慣例,他們會發現它很自然。
    如果您使用編譯器,它肯定會編譯有關ABI的源代碼,因此它會期望任何人類生成的程序集來執行此操作。

引述MIPS32 ABI這些是使用的寄存器:

$ 0($零)總是具有值0。

$在($ AT)臨時通常由彙編程序使用。 [從不用戶它]

$ 2 .. $ 3($ $ V0-V1)用於表達評估和保持整數 和指針類型函數返回值。 [$ v0爲其中整數的函數把它們的返回值]

$ 4 .. $ 7($ $ A0〜A3)用於傳遞函數參數;在函數調用中保留的值不是 。其他參數 在堆棧上傳遞,如下所述。 [這是參數去]

$ $ 8- 15($ $ T0- T7)用於表達評價臨時寄存器;在函數調用中不會保留值 。

$ 16- $ 23($ s0- $ s7)保存的寄存器;值保存在功能 調用中。 [如果您使用這些函數裏面,保存和恢復他們]

24 $ .. $ 25($ -T 8 $ T9)用於表達評價臨時寄存器;在函數調用中不會保留值 。當調用位置獨立函數 $ 25時,必須包含被調用函數的地址 。

$ 26- $ 27($ kt0- $ kt1)僅供操作系統使用。

$ 28($ gp)全局指針和上下文指針。 [編譯器使用]

$ 29($ sp) sp堆棧指針。 [使用此堆棧]

$ 30($ S8)保存的寄存器(如S0-S7)。 [保存和恢復功能,如果此修改]

$ 31($ RA)返回地址。返回地址是 的位置,函數應該返回控制權。 [設置由jal/jalr]

相關問題