历史上的今天
返回首页

历史上的今天

今天是:2025年12月09日(星期二)

正在发生

2022年12月09日 | ARM汇编教程(3): ARM指令集

2022-12-09 来源:zhihu

ARM与Thumb

ARM 处理器有两种主要的运行状态,ARM 和 Thumb。这些状态与特权级别无关。例如,以 SVC 模式运行的代码可以是 ARM 或 Thumb。这两种状态的主要区别在于指令集,ARM 状态下的指令始终是 32 位的,而 Thumb 状态下的指令是 16 位的(但也可以是 32 位的)。


ARM 版本的调用约定非常混乱,并非所有 ARM 版本都支持相同的 Thumb 指令集。在某些时候,ARM 引入了增强的 Thumb 指令集(Thumbv2),它允许 32 位 Thumb 指令甚至条件执行,这在之前的版本中是不可能的。为了在 Thumb 状态下使用条件执行,引入了“it”指令。然而,这条指令在后来的版本中被删除,并与一些本应不那么复杂的东西交换,结果适得其反。我不知道所有不同 ARM 版本的 ARM/Thumb 指令集的所有不同变体,老实说我不关心。你也不应该。您唯一需要知道的是目标设备的 ARM 版本及其特定的 Thumb 支持,以便可以调整代码。 ARM Infocenter 应该可以帮助您确定 ARM 版本的细节 


如前所述,有不同的 Thumb 版本。不同的命名只是为了将它们彼此区分开来(处理器本身总是将其称为 Thumb)。


Thumb-1(16 位指令):用于 ARMv6 和更早的架构。

Thumb-2(16 位和 32 位指令):通过添加更多指令并允许它们为 16 位或 32 位宽(ARMv6T2、ARMv7)来扩展 Thumb-1。

ThumbEE:包括一些针对动态生成代码(在执行前不久或执行期间在设备上编译的代码)的更改和添加。


ARM 和 Thumb 的区别:

条件执行:ARM状态下的所有指令都支持条件执行。某些 ARM 处理器版本允许使用 IT 指令在 Thumb 中进行条件执行。条件执行导致更高的代码密度,因为它减少了要执行的指令数量并减少了昂贵的分支指令的数量。


32 位 ARM 和 Thumb 指令:32 位 Thumb 指令有一个 .w 后缀。

桶形移位器是另一个独特的 ARM 模式功能。它可用于将多条指令缩减为一条。例如,不是使用两条指令进行乘法(将寄存器乘以 2 并使用 MOV 将结果存储到另一个寄存器中),而是可以通过使用左移 1 -> Mov R1、R0、LSL 将乘法包含在 MOV 指令中#1; R1 = R0 * 2

要切换处理器执行的状态,必须满足两个条件之一:

我们可以使用分支指令 BX(分支和交换)或 BLX(分支、链接和交换)并将目标寄存器的最低有效位设置为 1。这可以通过将偏移量加 1 来实现,例如 0x5530 + 1。可能这会导致对齐问题,因为指令是 2 字节或 4 字节对齐的。但是因为处理器会忽略最低有效位。


如果设置了当前程序状态寄存器中的 T 位,我们就知道我们处于 Thumb 模式。


ARM指令集的介绍

本部分的目的是简要介绍ARM的指令集和它的一般用途。对我们来说,了解汇编语言的最小部分是如何运作的,它们是如何相互联系的,以及通过组合它们可以实现什么,这一点至关重要。


如前所述,汇编语言是由指令组成的,这些指令是主要的构建块。ARM指令后面通常有一个或两个操作数,一般使用以下模板。

由于ARM指令集的灵活性,并非所有指令都使用模板中提供的所有字段。然而,模板中字段的目的描述如下。

虽然MNEMONIC、S、Rd和Operand1字段是直截了当的,但条件和Operand2字段需要多加说明。条件字段与CPSR寄存器的值密切相关,或者准确地说,与寄存器中特定位的值密切相关。Operand2被称为灵活的操作数,因为我们可以以各种形式使用它--作为即期值(具有有限的值集)、寄存器或带移位的寄存器。例如,我们可以使用这些表达式作为Operand2。

作为一个快速的例子,让我们看看下面的指令清单。

作为一个简单的总结,让我们看看最常见的指令,我们将在未来的例子中使用。

指令描述指令描述
MOV移动数据EOR亦或
MVN移动并求反LDR加载
ADDSTR存储
SUBLDM加载多个
MULSTM存储多个
LSL逻辑左移PUSHpush到堆上
LSR逻辑右移POP从堆上pop出来
ASR算术右移B跳转
ROR向右旋转BL跳转并连接
CMP比较BX跳转并交换
ANDBLX跳转连接并交换
ORRSWI/SVC系统调用

本文是ARM汇编系列教程的第3部分, 介绍arm的基本指令集, 


推荐阅读

史海拾趣

Cal-Chip Electronics公司的发展小趣事

Cal-Chip Electronics公司的创始人[创始人姓名]在XXXX年怀揣着对电子技术的热爱和对市场需求的敏锐洞察,决定创立这家公司。初期,公司面临着资金短缺、人才匮乏和技术难题等多重挑战。然而,[创始人姓名]凭借坚定的信念和不懈的努力,成功吸引了第一批投资者,并组建了一支由行业精英组成的核心团队。通过不断的技术研发和市场调研,公司逐渐在半导体芯片领域站稳了脚跟。

Chiefdom Electronic Co Ltd公司的发展小趣事

在快速发展的过程中,Chiefdom Electronic Co Ltd注重企业文化的建设。公司倡导创新、协作、诚信和担当的价值观,通过举办各类文化活动、培训项目等方式,增强员工的归属感和凝聚力。同时,公司还建立了完善的激励机制和晋升通道,为员工提供广阔的职业发展空间。这些举措使得公司拥有一支高效、团结、富有创造力的团队,为公司的持续发展提供了有力的保障。


这些故事仅作为示例,实际的公司发展历程可能会因市场环境、技术趋势、公司战略等多种因素而有所不同。如果您需要更具体的信息,建议直接查阅相关公司的官方资料或行业报告。

宝乘(baocheng)公司的发展小趣事

作为淄博市的重大项目,宝乘公司得到了各级政府的大力支持。这些支持不仅体现在资金扶持上,还包括政策优惠、人才引进等多个方面。在政府的助力下,宝乘公司得以快速发展,不断壮大。同时,公司也积极响应政府的号召,参与新旧动能转换等重大项目,为地方经济的发展做出了贡献。

BROTHER公司的发展小趣事

随着全球市场的不断扩大,BROTHER意识到要实现持续发展,必须走国际化道路。因此,公司在上世纪五十年代开始积极实施国际化战略。首先,BROTHER在美国纽约建立了销售总部,以更好地服务北美市场。随后,公司又在欧洲等地建立生产基地和销售网络,进一步拓展国际市场。通过国际化战略的实施,BROTHER不仅提升了品牌知名度和市场份额,还积累了丰富的跨国经营经验。

Anachip公司的发展小趣事

Anachip公司自成立以来,一直致力于半导体技术的研发。在某个关键时期,公司研发团队成功开发出一种新型的芯片技术,这项技术在性能上远超当时的行业标准。凭借这一技术突破,Anachip迅速在市场上推出了一系列高性能的芯片产品,赢得了客户的广泛认可。随着产品销量的增长,公司的知名度和市场份额也逐步提升。

Esterline Technologies Corporation公司的发展小趣事

Anachip公司自成立以来,一直致力于半导体技术的研发。在某个关键时期,公司研发团队成功开发出一种新型的芯片技术,这项技术在性能上远超当时的行业标准。凭借这一技术突破,Anachip迅速在市场上推出了一系列高性能的芯片产品,赢得了客户的广泛认可。随着产品销量的增长,公司的知名度和市场份额也逐步提升。

问答坊 | AI 解惑

I2C器件接口IP核的CPLD设计

由于CPLD数字设计结构化的趋势,将出现针对CPLD不同层次的IP(Intellectual Property)核。各个IP核可重复利用,可大大提高设计能力和效率。国外各大公司都推出了专门的IP核,我国也迫切需要发展自己的IP核。本文针对I2C的主方式串行扩展通信的特点, ...…

查看全部问答>

同是Cortex-M3,恩智浦MCU的秘密武器是什么?

PPT文件, 这是NXP在2009ARM技术研讨会上的发言。 也可知晓NXP LPC1100的原理和应用。 …

查看全部问答>

wince 系统怎么装入导入?

怎么将 wince 系统安装到芯片上啊? …

查看全部问答>

串口通信

串口通信  …

查看全部问答>

2416+16550 驱动外包

各位仁兄:     小弟有项目如下:     基于S3C2416的串口驱动程序,串口芯片16550,     现在有MDD+PDD(中间层)缺少最低层对16550的初始化代码     由于时间关系,现将项目外包     ...…

查看全部问答>

录音问题

这两天在调ce6的音频驱动,在调mic的时候想知道录音的时候上层应用发给音频驱动的message是什么?是不是:REQ_ID_AUDIO_START_RECORD? 今天早上花了一个早上在网上当了不少ce下的录音软件,可惜一个都不能用,郁闷!! 问题: 1。录音程序开始 ...…

查看全部问答>

protel与altium

哪位大哥给讲一下是protel dxp 2004好一些还是altium design 09好? 还有就是AD后面有时是winter,有时是summer,是指发布时间吗,软件功能上有什么区别? 不知道学那个?…

查看全部问答>

上本书《CPU Design FAQ》

关于设计CPU的一些常见问答,可能对跟我一样迷惑的人有些用。…

查看全部问答>