【问题标题】:Hex file and disassembly discrepancy十六进制文件和反汇编差异
【发布时间】:2017-04-10 17:45:17
【问题描述】:

我之前已经解析了十六进制文件以进行引导加载。这是我第一次使用 Microchip 的 XC32 工具链生成 hex 文件。我立刻注意到 hex 文件和反汇编文件之间似乎存在差异。

hex文件的前3行:

:020000040000fa
:020000041d00dd
:10000000030000100000000040f3060000000000a4

来自列表文件:

9d000000 <_reset>:
9d000000: 10000003 b 9d000010 <__reset_switch_isa>
9d000004: 00000000 nop

9d000008 <__reset_micromips_isa>:
9d000008: f340 0006 jalx 9d000018 <_startup>
9d00000c: 0000 0000 nop

请注意,地址 9d000008 看起来应该在列表文件中包含 0x06。但是,十六进制文件似乎在此位置指示 0x40。以下 3 个字节也不符合预期。

:10 0000 00 03 00 00 10 00 00 00 00 40 f3 06 00 00 00 00 00 a4

当我查看文件时,其他记录与预期的一样,但与此 jalx 指令字有关的字节似乎是乱序的。谁能直截了当?

谢谢!

更新: 另一个令人费解的数据点。如果我使用调试器(不使用我的引导加载程序)将十六进制文件闪存到部件中。然后如果我查看执行内存和反汇编列表,我会看到以下内容:

Address     Instruction     Disassembly
1D00_0000   10000003        BEQ ZERO, ZERO, 0x1D000010
1D00_0004   00000000        NOP
1D00_0008   0006F340        SLL S8, A2, 13
1D00_000C   00000000        NOP

当 IDE 重新解释其编程的代码时,它现在显示的是 SLL 指令而不是 JALX。这是编译器生成的启动代码,所以我不能确定它应该是什么。字节顺序匹配 hex 文件而不是列表文件,因此 Microchip 工具会像我一样解释 hex 文件,但这与列表文件不匹配。

【问题讨论】:

    标签: pic microchip hex-file


    【解决方案1】:

    我在 microchip.com 论坛上发布了这个问题,那里的几个用户提供了答案。

    基本上,列表文件摘录中的JALX 指令格式为 microMIPS 而不是 MIPS32。所以列表文件和十六进制文件之间实际上没有差异。正如我试图做的那样,将每个字节写入升序地址位置来解释十六进制文件。但是,像我在更新中那样查看反汇编并不会将指令解释为 microMIPS,因此通过 IDE 查看该指令的反汇编是不正确的。当 JALX 被执行时,CPU 中的一个标志会通知处理器将此指令视为 mircoMIPS。

    有关更多信息,请参阅我收到的出色回复:

    http://www.microchip.com/forums/FindPost/986740

    【讨论】:

      【解决方案2】:

      看起来清单对这些 16 位值使用了 Little Endian。如果这是一个 32 位值,那么 0x06 将首先出现。

      只要是这样,就没有问题。

      【讨论】:

      • 十六进制文件为 Intel 格式。如果 : 之后的第 8 个字节只有 0 或 1,那么它是 I8=16 位。如果是0到3,那么就是I16=20位。如果只有 0、1、4、5 则为 I32=32 位。 Microchip 通常使用 I8。
      • @cup。感谢您的输入。我见过的所有Microchip生成的十六进制文件都是I32。在我上面发布的前 2 条记录的 sn-p 中,类型 4 允许 32 位寻址。
      • @donjuedo,感谢您的回复。我绝对不是专家,但我只见过数据记录中按地址升序排列的字节。如果这可以改变口译员怎么知道?根据我发布的更新信息,我认为这种情况不会发生。
      • 也许它只是对列表的一些阅读帮助,并且是 32 位指令主要分为 16 位操作码 + 16 位立即值。 (或寄存器标识符的组合)。这样的符号然后使它更容易阅读
      猜你喜欢
      • 1970-01-01
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 2012-06-02
      • 2020-07-21
      • 1970-01-01
      • 2018-07-26
      相关资源
      最近更新 更多