在Raspberry Pi上的ARM彙編代碼中,我們可以使用寄存器r1(而不是寄存器r0)來接收第一個函數參數,而只保留函數返回值的寄存器r0?或者必須將前4個功能參數按順序嚴格地存儲在寄存器r0,r1,r2和r3中?ARM彙編中的Raspberry Pi寄存器r0-r4中是否存在嚴格的函數參數存儲序列?
0
A
回答
0
取決於您的代碼是否必須從其他代碼中使用/調用。關於如何使用寄存器有一些「規則」,參數應該如何在調用之間傳遞等等。這些規則被稱爲ABI(應用程序二進制接口),對於ARM可以在這裏找到:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.subset.swdev.abi/index.html
這允許將用「C」編寫的代碼調用編寫(例如)彙編程序或其他語言編寫的代碼,這是共享庫背後的魔力的一部分。
如果您將您的Raspberry作爲裸機硬件編程,也就是說,您沒有在做與操作系統或其他應用程序交互的SW,您可以在自己的路上編寫代碼,但總的來說,您應該在彙編程序中編程時遵循這些規則。即使您不打算與其他SW組件或操作系統一起工作。這將使您的代碼更簡單。
相關問題
- 1. ARM彙編中的偶數或奇數寄存器
- 2. ARM彙編,POP堆棧和存儲在寄存器
- 3. ARM彙編程序中的編碼寄存器操作數是怎樣的?
- 4. 在C編程中訪問Raspberry PI寄存器
- 5. XOR寄存器,寄存器(彙編)
- 6. 68k彙編:CPU是否在中斷時存儲狀態寄存器?
- 7. 爲什麼參數存儲在寄存器中而不是x86-64彙編中的堆棧上?
- 8. 如何將數據存儲在存儲器或寄存器中
- 9. 彙編語言整數寄存器
- 10. 彙編和寄存器
- 11. ARM寄存器的功能
- 12. 如何在ARM內聯彙編程序中使用特定寄存器
- 13. MIPS中的浮點寄存器是哪些數字寄存器?
- 14. 如何使用NASM(彙編)顯示存儲在dl寄存器中的值?
- 15. 在ARM中使用r9寄存器
- 16. 在GCC中使用內聯ARM彙編時優化使用的寄存器
- 17. Python是否將函數參數加載到寄存器中,還是將它們保存在堆棧中?
- 18. MIPS彙編語言 - 臨時寄存器vs保存的寄存器
- 19. 在彙編程序寄存器之間移動數據
- 20. x86彙編,ROR旋轉,從寄存器或內存計數
- 21. 的內聯彙編使用寄存器
- 22. PIC彙編 - 通過寄存器作爲參數
- 23. 如何加載和存儲陣列以及如何通過使用寄存器在ARM彙編語言
- 24. ARM彙編件打印寄存器值十進制
- 25. ARM彙編:由scanf存儲的值未正確保存。
- 26. 將函數的參數傳遞給堆棧還是寄存器?
- 27. 彙編器反轉XMM寄存器
- 28. 在彙編程序中移動(移位)兩個寄存器
- 29. 爲什麼編譯器將變量存儲在寄存器中?
- 30. Matlab中是否存在函數緩存?
如果是你自己的代碼,你可以做任何你想做的事情。如果您想與第三方代碼進行互操作,您必須明確遵守慣例。來電者如何知道你期望在不同的地方有爭議? – Jester
你*可以*只需要一個未使用的第一個參數(僞參數)。不優雅,但它不會打破平臺ABI。 – EOF
如果在編寫輸出「r0」時需要輸入參數,被調用的例程必須保存「r0」。通常情況並非如此。另一種方法是使用'callee saved'寄存器(R4-R10)來保存返回值,然後在返回之前將其放入'r0'中。即使它是你自己的代碼,出於理智的原因,堅持一個標準是很好的,尤其是如果例程可以外部調用。如果它是一個彙編程序幫助函數,那麼出於效率原因,您可以忽略ABI。如果您不使用ABI,您需要很好地記錄界面。 ABI mix可以創建難以發現的錯誤。 –