我第一次遇到80年代的ARM指令集,从那时起就没有使用它。出于好奇,我正在查看平板电脑和其他ARM设备,并注意到CPU是由不同的制造商生产的。
我做了一个快速搜索,但我找不到一个明确的陈述,因为不同的ARM芯片是否有不同的指令集。
我认为它们在主要方面是相同的。
答案 0 :(得分:6)
左下方的goto http://infocenter.arm.com查找ARM体系结构。并根据参考手册。曾经有一个单独的ARM ARM(ARM体系结构参考手册),但这个家族已经发展到他们必须将其分解为家庭的程度。
ARM ARM将向您展示指令集。我认为他们称之为ARMv5手册的是旧的ARM ARM。您将找到ARM指令(32位)和拇指指令(16位)。对于每条指令,它们列出了支持它的架构,因此您可能会看到ARMv4不支持的ARMv5指令(ARMv4 a.k.a ARM7,与流行的ARM7TDMI内核一样)。 ARMv4T及更新版等支持Thumb指令
所以有一个核心的32位arm指令集,你可能已经习惯了不时添加的新指令和修复的错误/限制(例如ldr r0,[r0]等)
浮点单元已经进行了一次或两次大修,大多数内核没有fpu,而那些拥有fpu并不意味着芯片供应商将其包含在芯片中。 fpa是较老的,vfp是更新的,现在是霓虹灯的东西。如果你注意这些都属于通用协处理器指令类别。但是你不必知道/使用协处理器版本,他们对所有东西都有别名。
有这个java / jazelle的东西,同样的故事,一些核心可能有它作为选项并不意味着供应商包括它。
拇指指令集至少有两组thumb2扩展。在thumb2扩展之前,thumb指令都是16位并且与ARM指令一对一映射,有意义的是你只需要一个ARM内核,解码器从较小的指令转换为ARM指令并将其提供给内核。除了分支外,所有指令都是16位,如果您查看该模式,您可以很容易地将其解码为两个独立的16位指令。那么他们决定让他们的微控制器提供更小,而不是每个人只使用ARM7TDMI并消耗芯片尺寸和功率,支持thumb2的处理器只是拇指,他们不支持32位ARM指令,没有ARM内核那拇指指令被翻译成新核心等。 ARMv6-M又名Cortex-m0和Cortex-m1采用拇指指令集并添加一些32位指令来缩小与ARM的性能差距(拇指更小是,但如果您编译相同的代码,则比ARM慢一点两者,我的实验使用拇指的指令多花了10-20%)。理论上,thumb-2(ARMv7-M)在您可以比较它们的时间和地点优于ARM。无论出于何种原因,Cortex-m3首先出现在ARMv7-M上,并且在拇指指令集中添加了一堆32位thumb2指令。我最近计算过和ARMv6-M一样添加了20,ARMv7-M有140-150条指令添加到基本拇指指令集。 thumb2基本上是可变字长。而且只能在cortex-m系列上运行。看看它几乎就像他们在名称拇指下重新构建ARM指令集一样。不完全,但你得到了很多手臂像指令,三个寄存器而不是两个,能够达到更高的寄存器和使用immediates等。这导致了编写为ARM和thumb / thumb2编译的asm的愿望。所以他们提出了统一的语法。你可以写一个像
这样的指令add r0,r1
如果用拇指组装,这是指令,如果组装手臂,他们会将其转换为
add r0,r0,r1
为您而不是任何语法错误。您必须指定使用统一语法,至少使用gnu binutils汇编程序(gas)。
同样重要的文件集是技术参考手册,也可以在infocenter.arm.com上找到。每个核心都有一个trm,实际上每个核心的每个转速都有一个TRM。此外,L2高速缓存等额外成本项目每个转速都有自己的TRM。重要的是找出芯片供应商购买/使用的核心,如果可能的话,修改版本(rev 2.0 r2p0,rev 1.0 r1p0等),因为它们之间存在编程差异以及勘误差异(不要相信Linux作为参考! ,这是一个巨大的混乱,每当我看到另一家公司完全误解和误用核心/勘误差异,这一点有点像灾难)。有时TRM包含指令信息,或描绘核心支持和不支持的更清晰的图像。 ARM ARM是通用的,它们涵盖整个系列或许多内核系列,其中TRM非常特定于一个内核。 ARM ARM和TRM之间混淆的一个例子是,看看ARM ARM,你可能会觉得你可以使用BE-32或BE-8大端模式,现实情况是你有一个或另一个ARMv6和更新的是BE-8,期间,习惯它。 ARMv5和ARMv4是BE-32或ARMv6之前刚刚称为big endian。我强烈建议不要在手臂上使用大端,尽管你认为你可以从中获得它。采用原生模式,你将节省大量的工作和失败。我从个人经验中提到它,试图弄清楚为什么ARM ARM中描述的位在我正在使用的核心中不起作用。
64位核心处于开发阶段的某个地方,如果它完成并且只是寻找某人触发并使用它,我不会感到惊讶。实际上ARMv8文档可用,现在下载。
简短回答infocenter.arm.com在ARM体系结构下,您可以找到描述不同指令集的所有文档,以及随着时间的推移对这些指令集的改进/添加。
答案 1 :(得分:2)
指令集有一些常见的变体,UAL,Thumb和Thumb2是最常见的。一些包含专用硬件(如DSP)的ARM内核也扩展了语言。
答案 2 :(得分:2)
NOP。制造商之间没有差异(关于指令集)。 他们都尊重ARM规范。
某些扩展名是可选的。 这是NEON的情况。
但据我所知,只有Tegra 2不包含此扩展名。 这就是为什么tegra 2是一个非常糟糕的视频解码处理器(例如)。
答案 3 :(得分:1)
过去并非如此。 ARM需要遵守其规范。 ARM提供的IP当然符合其规范,但它们也需要体系结构被许可方遵守。但是,在ARM began to allow custom instructions with their embedded CPUs时,这种情况在2019年有所改变。