2014-06-26 135 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。