以下代码摘自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: )
Run Code Online (Sandbox Code Playgroud)
还请指点一些教程开始.
大量ARM微控制器有两种不同的指令集:
在程序执行期间,ARM芯片可以在两种模式之间切换,以便从这些模块中的任何一组运行指令.
这些行的目的似乎是选择正确的模式(即.arm或.thumb),以便正确执行后续代码.
编辑:对不起,我犯了一个错误.真正的目的是指定将在生成的代码中使用哪组指令.例如,如果编写add r0, r1, #3,则生成的二进制指令属于ARM或Thumb指令集,具体取决于您在.arm和之间选择的指令.thumb.
来自https://sourceware.org/binutils/docs/as/ARM-Directives.html:
.臂
这与.code 32执行相同的操作.
-
.拇指
这与.code 16执行相同的操作.
-
.code [16 | 32]
该指令选择正在生成的指令集.值16选择Thumb,值32选择ARM.
| 归档时间: |
|
| 查看次数: |
1008 次 |
| 最近记录: |