Assembly Tricore反汇编“常量”

Assembly Tricore反汇编“常量”,assembly,addressing-mode,infineon,Assembly,Addressing Mode,Infineon,这里有人能给我解释一下,TC17**汇编程序是如何计算movh.a和lea寻址十六进制的,如果我有一个如图所示的配置值,我如何计算它们,它被定义为常量或全局值 我想做的是,为自己创建/组装这条32位指令,但我在最后几天没有做任何处理。当然,我知道如何使用Eclipse工具链进行组装,但是我不能在我的程序中使用这个工具链。我正在用PHP编程,但如果我知道如何解决这个问题,这并不重要 例如,下面是一张带有IDApro视图的图片,其中显示了我必须装配的命令: 作为32位十六进制指令,它如下所示: AS

这里有人能给我解释一下,TC17**汇编程序是如何计算movh.a和lea寻址十六进制的,如果我有一个如图所示的配置值,我如何计算它们,它被定义为常量或全局值

我想做的是,为自己创建/组装这条32位指令,但我在最后几天没有做任何处理。当然,我知道如何使用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
我现在要做的是计算出十六进制汇编指令,并对我的变量进行正确的寻址。在本例中,其位于:0x80177DA4

在指令集中,其解释如下:

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

是什么导致了您的问题?一切都显示在你的图片中,这只是一个简单的问题提取位

如果你把单词从little endian的形式重新组合起来就容易多了。因此:

movh.a=F8017091。你可以看到常数实际上是8017,这并不奇怪。 lea=67E4FFD9由于愚蠢的编码,这有点棘手,所以让我们将前16位转换为二进制:0111011110100。现在重新排列它们以获得01111101101000100,然后返回到hex:7DA4


所以完整地址是80177DA4。

谢谢您的快速回答。在我发布这篇文章之后,我再次查看了十六进制值,发现了如何解决movh.a问题。也许我觉得有点太复杂了,因为我在load byte命令上工作了2天:但是,这并不重要——正如我所说的,我已经弄明白了ld.bu和movh.a。但正如你所说,lea命令对我来说有点棘手。我不知道如何重新排列位以获得所需的值,我在按位操作中非常笨-我在尝试失败原则下工作..顺便说一句,再次检查十六进制/地址。所以我上面给出的十六进制,明确地指向0x80177DA4,我再次编译它,并再次将.elf加载到IDA,它指向0x80177DA4,十六进制指令D9 FF E4 67 br是的,我犯了错误,E当然是1110而不是1100。