2016-07-14 42 views
0

我目前正試圖理解Cortex-M內核的ARM彙編。cortex M4 Thumb彙編函數地址

我知道這是在Thumb模式(這是核心支持的唯一模式)功能通過自己的地址,稱爲與LSB地址的高,表明目標是Thumb代碼。

在組件我寫以下在函數「Reset_Handler」的前面告訴彙編,在標籤中的數據是可執行的/功能:

.type Reset_Handler, %function 
    Reset_Handler: 
    MOV R0, R0 # just do something 

如果現在加載標籤

的地址
LDR R0, =Reset_Handler 

LSB R0的設置。

我必須把這個.TYPE指令在每個標籤我想與間接調用一個函數使用的面前?

或者有沒有辦法讓彙編器自動決定正確的地址?

如果我要複製功能的代碼到RAM,並加載該函數的地址,我要明確自己LSB得到了數據所在的「真實」的地址,對嗎?

在這種情況下是否需要.type指令?我知道,只要我想把地址放在向量表中就需要這個地址,因爲這需要設置LSB。

+0

你正在使用什麼彙編語言(彙編語言是由彙編程序定義的,它通常不是普遍的) –

回答

2

那麼有兩種類型的地址(標籤)。一種類型是你想要調用的地址,一個函數入口點的地址以及拇指bx或pop需要lsbit設置的地址。另一個是數據項的地址,字符串的開始,數組的開始,無論如何,並且不希望lsbit損壞,因爲這會導致對齊錯誤。因此,除非您想在使用bx之前將代碼添加到地址中,否則您確實希望彙編程序在定義標籤或使用標籤時提供解決方案。

所以對於GNU彙編程序,你需要.thumb_func標籤(也可能是其他的方式來做到這一點)之前,爲您彙編看來你需要你的彙編需要什麼。