首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汇编代码中的.arm是什么?

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

Stack Overflow用户
提问于 2014-06-26 20:02:21
回答 2查看 1.3K关注 0票数 2

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

我从来没有做过ARM装配编程,所以能不能帮我理解一下这些行到底是怎么回事?什么是.ar?等等:

代码语言:javascript
复制
.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:                       )

也请给我一些入门的教程。

EN

回答 2

Stack Overflow用户

发布于 2014-06-26 21:10:14

许多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

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

-

.code 16|32

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

票数 6
EN

Stack Overflow用户

发布于 2014-06-26 20:10:59

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24430027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档