有人可以在这里解释一下,TC17 **汇编程序如何解决“movh.a和lea”寻址(十六进制),以及如果我有一个如图所示的配置值,我可以自己计算它们,它被定义为“常数”或“全局”。
我想要做的是,为自己创建/组装这个32位指令,但我不会在最后几天做任何过程。当然,我知道如何使用Eclipse Toolchain进行组装,但我无法在我的程序中使用此工具链。我正在用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
答案 0 :(得分:1)
导致你出现问题的原因是什么?一切都显示在你的照片中,它只是一个简单的提取位的问题。
如果从小端形式重新组合单词,这会更容易。因此:
movh.a = F8017091
。你可以看到常量实际上是8017
(毫不奇怪)。
lea = 67E4FFD9
由于愚蠢的编码,这有点棘手,所以让我们将前16位转换为二进制:0110 0111 1110 0100
。现在重新排列它们以获得011111 0110 100100
,然后返回到十六进制:7DA4
因此完整地址为80177DA4
。