【问题标题】:[gas][cortex-m23] why does this beq.w results in hard fault?[gas][cortex-m23] 为什么这个 beq.w 会导致硬故障?
【发布时间】:2021-03-08 15:44:03
【问题描述】:

编写一些代码来测试 CM-23 ARM 汇编指令集,我遇到了关于以下条件跳转的这种奇怪的(对我来说)行为。

00001240: 0x01f0ef80 beq.w 0x2422 <cmp_r0__r1_failed>

包含函数具有以下指令:

  • .arch armv8-m.base
  • .语法统一
  • .code 16
  • .thumb_func

Generic User Guide rev. r1p0 中得知,B{cond} 的使用限制如下 [-256 字节到 +254 字节]。 在这种情况下,有效跳转大约是 0x200,但 .w 后缀应将此范围扩展到至少 16 位领域。

在构建过程中,汇编器没有给出错误/警告,整个过程完成。然后发生硬故障(指向罪魁祸首这样的指令)。

如果我写了一个非法指令,至少我希望汇编器抱怨。

我在这里缺少什么?感谢您提供任何线索。

【问题讨论】:

    标签: assembly arm gnu-assembler cortex-m


    【解决方案1】:

    您可以在 cortex-m23 技术参考手册中看到

    此处理器是 ARMv8-M 基线架构的实现。

    然后在armv8-m架构参考手册中。

    Armv7-M 兼容性需要主扩展。

    您可以在 armv7-m 文档中看到,宽条件分支仅适用于 armv7-m。以及在 armv6-m 架构参考手册中看不到它们。

    注意,两种主要的 arm 文档类型是每个内核的技术参考手册和每个架构的架构参考手册。而且那些文档还不错,其他的 ARM 文档和网页就没有那么好,而且如果没有错的话,也会产生误导。

    如果您说这些工具正在生成代码,那么它不应该向 binutils 人员提交票证。

    【讨论】:

      猜你喜欢
      • 2021-07-23
      • 1970-01-01
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      相关资源
      最近更新 更多