gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:28:47 28 4
gpt4 key购买 nike

以下代码摘自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: )

也请给我一些入门教程。

最佳答案

许多 ARM 微 Controller 有两种不同的指令集:

  1. 默认的 32 位 ARM 指令集
  2. 轻量级 16 位 Thumb 指令集

在程序执行期间,ARM 芯片可以在两种模式之间切换,以便运行来自这些集合中的任何指令。

The purpose of these lines seems to be the selection of the right mode (i.e., .arm or .thumb) in order to execute properly the subsequent code.

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

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

.arm

This performs the same action as .code 32.

-

.thumb

This performs the same action as .code 16.

-

.code [16|32]

This directive selects the instruction set being generated. The value 16 selects Thumb, with the value 32 selecting ARM.

关于assembly - 汇编代码中的 .arm 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24430027/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com