我一直在嘗試學習Mips彙編語言,但我很難知道在不同情況下使用哪些寄存器。就像當我使用$ V0,$ A0或$ T1 ...我如何知道哪些寄存器用於Mips程序
回答
當你不使用他人,包括系統調用編寫任何代碼,你可以使用寄存器不過你想要的,只要$at
保留給彙編程序,/jalr
隱含使用$ra
。
這是很不太可能你不會使用任何系統調用或任何其他人編寫的代碼。
爲了讓編譯器和人員在不查看代碼的情況下使用例程,專家之間建立了一個約定。
它被稱爲應用程序二進制接口(ABI)和MIPS got one too。
ABI要求如何使用寄存器。
你只要尊重ABI:
- 您使用的是尊重ABI已代碼。 在這種情況下,ABI大部分是信息性的,它告訴你函數在哪裏期待參數以及它使用哪個寄存器。
- 當您想要與期望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
]
- 1. MIPS中的浮點寄存器是哪些數字寄存器?
- 2. 如何知道使用哪個整數寄存器
- 3. 如何知道寄存器變量存儲在哪裏?
- 4. MIPS $ gp寄存器
- 5. MIPS寄存器保存
- 6. 我如何知道哪些觀察屬於哪個簇?
- 7. MIPS,寄存器,初學者
- 8. 我在哪裏可以找到* all * MIPS寄存器列表?
- 9. 我如何知道我的Android應用程序將使用哪些設備?
- 10. 如何知道在Android應用程序中使用哪些庫
- 11. MIPS編譯器中的寄存器 - 使用哪個?
- 12. 我如何知道我的Java應用程序執行哪些CRUD操作?
- 13. 如何知道哪些應用程序在後臺運行
- 14. 如何知道應用程序提供了哪些服務?
- 15. 如何知道哪些應用程序在Linux
- 16. 如何知道應用程序試圖訪問哪些文件?
- 17. 我如何知道我的服務器有哪些IP?
- 18. 我如何知道我安裝了哪些Eclipse M2E連接器?
- 19. 如何知道哪個w3wp進程用於Intranet應用程序我在尋找
- 20. 我如何知道文本輸入的哪些類別屬於?
- 21. MIPS系統調用和$ t寄存器
- 22. 我如何知道我的應用程序來自哪裏?
- 23. 用MIPS編寫的程序如何知道返回什麼?
- 24. MIPS:將寄存器地址複製到另一個寄存器
- 25. Android如何知道哪些聯繫人已安裝我的應用程序?
- 26. 如何知道哪些buildpack上演了Cloud Foundry中我的應用程序?
- 27. 如何知道我在一臺iPhone上安裝了哪些應用程序
- 28. 如何知道java程序需要運行哪些jar文件?
- 29. 我如何知道哪個dsn驅動程序正在使用?
- 30. MQTT:如何知道puback是用於哪些msg?
我們不提供教程或建議書。如果你的問題沒有最後一段,請編輯它(左下角,「編輯」鏈接)。如果不是,請考慮刪除它。 –