我有一個問題,支持分支指令B arm926ejs_reset_handler
跳轉到標籤arm926ejs_reset_handler:
,因此忽略之間的代碼。我不知道爲什麼有人會這樣做?忽略重要數據的分支指令?
和一些額外的解釋。標籤__start:
是該程序的入口點。分支指令忽略的行是啓動ISROM應該在啓動時獲得的參數。 但是,如果我們跳過它們,啓動ISROM如何獲得這些參數?它對我沒有任何邏輯。
__start:
arm926ejs_reset:
B arm926ejs_reset_handler
.word 0x41676d69
.word 0,0,0,0,0
image_type:
.word 0x0000000A
sizeOfPermanentCode:
.word (__image_size)
.word 0,0
bootparameter:
.word 0
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
arm926ejs_reset_handler:
這就是分支所做的事情,它在某處分支或跳轉。就像C中的goto一樣。如果它沒有這樣工作,那將會非常糟糕,你不能編寫程序。程序櫃檯與它可以訪問的內容完全無關。其他指令集使用跳轉而不是分支,在這種情況下兩者意味着同樣的事情,根據定義,代碼執行分支或跳轉到另一個路徑,從而留下它所在的路徑。 – 2012-03-02 14:38:14
也閱讀你的手臂手冊,以瞭解前幾個/許多取決於體系結構,內存(字)位置是重置向量,所以爲了避免問題,您必須使用分支到某處或ldr pc,某些東西要分支到某處爲了正確使用異常表。這正是這個代碼正在做的。 – 2012-03-02 14:40:14
作爲一個入口點只與加載程序相關(例如加載linux二進制應用程序的操作系統),這似乎是具有異常表的啓動代碼,並且一旦將此二進制文件置於ram/rom啓動時啓動標籤無關處理器。 – 2012-03-02 14:42:12