了解摩托罗拉 Co​​ldFire 说明。

逆向工程 艾达 摩托罗拉
2021-06-30 00:54:18

我有一个来自 IDAPro 的冷火序列,如下所示:

sub_29be8:

var_8 = -8
var_2 = -2
arg_0 = 8
arg_6 = $E

link a6, #-4;  
move.l a2, -(sp)
movea.l arg_0(a6),a2
tst.w arg_6(a6)
bne.s loc_29c00
bset #5, $1e(a2)
bra.s loc_29c14

....

此处的文档中,我在理解文档的确切内容时遇到了一些问题。

LINK Ay,#<displacement> W SP – 4→SP; //subtract SP by 4 and set into SP Ay → (SP); //set address pointed to in Ay and set into value of SP SP→Ay, SP + dn → SP //set SP into Ay, add the offset specified by <displacement> and set into SP

是否所有这些步骤LINK都是针对指令执行的,还是基于我尚未发现的某些处理器状态的可能性?(这似乎是为函数调用设置堆栈。)

我对序列的下一个问题是第二条指令, move.l a2, -(sp)

这似乎是将 alongword从 a2移动到堆栈指针中,但是否定对我来说看起来很奇怪。它似乎是“将 a2 中的地址移动到 SP,然后将其值乘以 -1”,但我也可以看到括号被用作指定要应用于地址的操作顺序。

1个回答

此处LINK第 119 页提供了该问题的答案

前/后递减操作在第 44 页中描述。