三芯拆解"Constants"

Tricore Disassembling "Constants"

有人能给我解释一下,TC17** assembler 是如何计算出 "movh.a and lea" 寻址(十六进制)的,以及如果我的配置值类似于在我的图片中显示,它被定义为 "constant" 或 "global"。

我想做的是,creating/assemble这个32位的指令是给自己用的,不过最近几天没有做任何处理。当然,我知道如何 assemble 使用 Eclipse 工具链,但我不能在我的程序中使用这个工具链。我正在用 PHP 编程,但这并不重要,如果我知道如何解决这个问题。

例如,这是我必须组装的命令的 IDApro 视图的图片:

作为 32 位十六进制指令,它看起来像这样:

ASM: movh.a    a15, #@HIS(configuration_value_1)
HEX: 91 70 01 F8

ASM: lea   a15, [a15]@LOS(configuration_value_1)
HEX: D9 FF E4 67

我现在想做的是计算出 HEX-assembler 指令,并正确寻址我的变量。在这种情况下,它位于:“0x80177DA4”。

指令集中是这样解释的:

Screenshot: movh.a command
Screenshot: lea + long offset addressing mode

是什么导致了您的问题?一切都在你的照片中,只是提取位的简单问题。

如果你从小端形式重新组合单词会更容易。因此:

movh.a = F8017091。您可以看到常量实际上是 8017(这并不奇怪)。 lea = 67E4FFD9 由于愚蠢的编码,这有点棘手,所以让我们将前 16 位转换为二进制:0110 0111 1110 0100。现在重新排列它们得到 011111 0110 100100,然后回到十六进制:7DA4

所以完整地址是80177DA4