2014-06-26 188 views
2

以下代碼取自https://github.com/Xilinx/linux-xlnx/blob/master/arch/arm/kernel/head.S彙編代碼中的.arm是什麼?

我從來沒有做過ARM彙編編程,所以可以幫助我理解這些行中到底發生了什麼?什麼是.ar。?等:

.arm   
    __HEAD 
ENTRY(stext) 

THUMB(adr  r9, BSYM(1f) ) @ Kernel is always entered in ARM. 
THUMB(bx r9    ) @ If this is a Thumb-2 kernel, 
THUMB(.thumb     ) @ switch to Thumb now. 
THUMB(1:      ) 

同時,請點我一些教程開始。

+0

** gas **,gnu彙編程序的ARM特定功能[全部記錄](https:// sourceware。組織/ binutils的/文檔/ AS/ARM_002dDependent.html)。在彙編程序中,任何類似'.directive'的東西都是彙編程序改變某些行爲的指令或命令。有[通用指令](https://sourceware.org/binutils/docs/as/Pseudo-Ops.html)和[武器專用指令](https://sourceware.org/binutils/docs/as/ARM- Directives.html)。嘗試[DaveSpace](http://www.davespace.co.uk/arm/introduction-to-arm/)和[ARM GCC食譜](http://www.ethernut.de/en/documents/arm- inline-asm.html)以獲取更多信息。 –

回答

6

ARM微控制器的大量有兩個不同的指令集:

  1. 默認的32位ARM指令集
  2. 輕質16位Thumb指令集

在程序執行期間,ARM芯片可以在兩種模式之間切換,以便運行來自任何這些集合的指令。

這些線的目的似乎是正確的模式 (即,.ARM或.thumb),以便正確地執行後續 代碼的選擇。

編輯:對不起,我犯了一個錯誤。真正的目的是指定將在生成的代碼中使用哪一組指令。例如,如果編寫add r0, r1, #3,則生成的二進制指令屬於ARM或Thumb指令集,具體取決於您在.arm.thumb之間選擇的指令。

https://sourceware.org/binutils/docs/as/ARM-Directives.html

.ARM

這執行相同的動作爲.code 32.

-

.thumb

這執行16.

相同的動作爲.code -

.CODE |設爲產生[16 32]

該指令選擇該指令。 值16選擇Thumb,值32選擇ARM。