簡體   English   中英

cortex M4 Thumb匯編功能地址

[英]cortex M4 Thumb Assembly function address

我目前正在嘗試了解Cortex-M內核的ARM組裝。

我知道處於Thumb模式(這是內核支持的唯一模式)的函數由其地址調用,並且該地址的LSB很高,以指示目標是Thumb代碼。

在匯編中,我在函數“ Reset_Handler”前面編寫了以下代碼,以告訴匯編器標簽處的數據是可執行的/一個函數:

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

如果我現在加載標簽的地址

  LDR R0, =Reset_Handler

R0的LSB被設置。

我是否必須將此.type指令放在要用作間接調用函數的每個標簽的前面?

還是有辦法讓匯編程序自動確定正確的地址?

如果要將函數的代碼復制到RAM並加載此函數的地址,則必須自己清除LSB以獲得數據所在的“真實”地址,對嗎?

在這種情況下,是否需要.type指令? 我知道有必要立即將地址放入向量表中,因為這需要設置LSB。

好吧,地址(標簽)有兩種。 一種類型是您要調用的地址,即函數入口點的地址,對於拇指來說bx或pop需要lsbit設置。 另一個是數據項的地址,字符串的開頭,數組的開頭等,並且不希望lsbit損壞,因為這會導致對齊錯誤。 因此,除非您希望在使用bx之前必須將代碼添加到一個地址上,否則您確實希望匯編程序在定義標簽或使用標簽時有一個解決方案。

因此,對於gnu匯編程序,您需要在標簽前加上.thumb_func(可能還有其他方法),對於匯編程序而言,您似乎需要匯編程序所需的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM