汇编代码中的.arm是什么?

时间:2014-06-26 12:02:21

标签: assembly arm

以下代码取自https://github.com/Xilinx/linux-xlnx/blob/master/arch/arm/kernel/head.S

我从未做过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:                       )

还请指点一些教程开始。

2 个答案:

答案 0 :(得分:6)

大量ARM微控制器有两种不同的指令集:

  1. 默认的32位ARM指令集
  2. 轻量级16位Thumb指令集
  3. 在程序执行期间,ARM芯片可以在两种模式之间切换,以便从这些模块中的任何一组运行指令。

      

    这些线的目的似乎是选择正确的模式   (即.arm或.thumb)以便正确执行后续操作   代码。

    编辑:对不起,我搞错了。真正的目的是指定将在生成的代码中使用哪组指令。例如,如果您编写add r0, r1, #3,则生成的二进制指令属于ARM或Thumb指令集,具体取决于您在.arm.thumb之间选择的指令。

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

      

    .ARM

         

    执行与.code 32相同的操作。

    -

      

    .thumb

         

    执行与.code 16相同的操作。

    -

      

    .code [16 | 32]

         

    该指令选择正在生成的指令集。   值16选择Thumb,值32选择ARM。

答案 1 :(得分:1)

汇编程序指令.arm.code 32的别名)和.thumb.code 16的别名)用于在标准ARM指令编码和Thumb指令编码之间切换。 / p>

另请参阅:https://sourceware.org/binutils/docs-2.24/as/ARM-Directives.html

相关问题