gpt4 book ai didi

arm - 不同的ARM厂商提供的指令集不同吗?

转载 作者:行者123 更新时间:2023-12-01 18:35:23 24 4
gpt4 key购买 nike

我第一次接触 ARM 指令集是在 80 年代,此后一直没有使用它。出于好奇,我查看了平板电脑和其他 ARM 设备,并注意到 CPU 是由不同制造商生产的。

我进行了快速搜索,但找不到关于不同 ARM 芯片是否具有不同指令集的明确声明。

我会假设它们主要是相同的。

最佳答案

转到 http://infocenter.arm.com沿着左侧的内容查找 ARM 架构。并根据该引用手册。曾经有一个单一的 ARM ARM(ARM 架构引用手册),但该系列已经发展到他们不得不将其分解为多个系列的地步。

ARM ARM 将向您展示指令集。我认为他们所说的 ARMv5 手册是旧的 ARM ARM。您将找到 ARM 指令(32 位)和拇指指令(16 位)。对于每条指令,他们都列出了支持它的架构,因此您可能会看到 ARMv4 不支持的 ARMv5 指令(ARMv4 又名 ARM7,如流行的 ARM7TDMI 内核)。 ARMv4T 及更新版本等支持 Thumb 指令。

因此,您可能已经习惯了核心 32 位 arm 指令集,并且不时添加新指令并修复错误/限制(例如 ldr r0,[r0])等。

浮点单元有过一两次大修,大多数内核没有 fpu,有 fpu 的内核并不意味着芯片供应商将其包含在芯片中。 fpa 较旧,vfp 较新,现在是 NEON 。如果您注意这些都属于通用协处理器指令类别。但是您不必知道/使用协处理器版本,它们对所有内容都有别名。

有/曾经有这个 java/jazelle 的东西,同样的故事一些内核可能将它作为一个选项,并不意味着供应商包含它。

对拇指指令集的至少两套拇指2扩展。在thumb2 扩展之前,thumb 指令都是16 位的,并且与ARM 指令一对一映射,这是有道理的,您只需要一个ARM 内核,解码器从较小的指令转换为ARM 指令并将其提供给内核。除分支外,所有指令都是 16 位,如果您查看该模式,您可以很容易地将其解码为两个单独的 16 位指令。于是他们决定让他们的微 Controller 产品更小,而不是每个人都只使用 ARM7TDMI 并消耗芯片尺寸和功耗,支持拇指 2 的处理器只是拇指,它们不支持 32 位 ARM 指令,没有 ARM 内核可以使用拇指指令被翻译成等新内核。 ARMv6-M 又名 Cortex-m0 和 Cortex-m1 采用拇指指令集并添加一些 32 位指令以缩小与 ARM 的性能差距(拇指较小是的,但如果您编译相同的代码,则比 ARM 慢一点两者都需要从我的实验中多出 10-20% 的指令来使用拇指)。理论上,thumb-2 (ARMv7-M) 在您可以比较它们的时间和地点都优于 ARM。无论出于何种原因,Cortex-m3 首先出现,它是 ARMv7-M,并且在拇指指令集中添加了一堆 32 位拇指 2 指令。我最近统计了一下,ARMv6-M 增加了 20 条,ARMv7-M 的基本拇指指令集增加了 140-150 条指令。 thumb2 基本上是可变字长。再次仅在 cortex-m 系列上运行。看着它,几乎就像他们以拇指的名义重新构建了 ARM 指令集。不完全,但你得到了很多像指令一样的 arm,三个寄存器而不是两个,能够访问更高的寄存器并使用立即数等等。这导致了编写为 ARM 和拇指/拇指2 编译的 asm 的愿望。所以他们想出了一个统一的语法。你可以写一个指令像

add r0,r1

如果组装拇指,那是指令,如果组装 ARM ,他们会将其转换为
add r0,r0,r1

为您,而不是任何语法错误。您必须指定您使用的是统一语法,至少使用 gnu binutils 汇编程序 (gas)。

同样重要的一组文档是技术引用手册,也位于 infocenter.arm.com。每个核心都有一个trm,实际上每个核心的每个rev都有一个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 只是称为大端。我强烈建议不要在 ARM 上使用 big endian,尽管你认为你可能会从中受益。使用 native 模式,您将节省大量的工作和失败。我从个人经验中提到它,试图弄清楚为什么 ARM ARM 中描述的位在我使用的核心中不起作用。

一个 64 位内核正处于开发阶段的某个地方,如果它已经完成并且只是寻找某人来扣动扳机并使用它,我不会感到惊讶。实际上 ARMv8 文档可用,现在下载。

简短回答 infocenter.arm.com 在 ARM 架构下,您可以找到描述不同指令集的所有文档以及对这些指令集的改进/添加。

关于arm - 不同的ARM厂商提供的指令集不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8829790/

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