assembly M68K:同一寄存器上的预递减

b0zn9rqh  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(139)

在M68040 asm中,给定:

mov.l #0x1000, %a0
mov.l -(%a0), -(%a0)

第二个mov之后的%a0值是多少?寄存器是递减两次还是一次?
除了mov.l之外,我们还使用了其他几条指令中的哪一条,它们都支持源和目标上的预递减/后递增?
MC 68040 UM声明move16 (%an)+, (%an)+只执行一次增量,但我找不到任何有关一般情况的信息。
我正在一个模拟器上工作,没有实际的CPU。而且,网上的普遍共识似乎是,在处理这种角落情况时,Easy68k是不值得信任的。

fxnxkyjh

fxnxkyjh1#

在您的特定示例中,

move.w -(an),-(an)

在真实的的68000 CPU上,寄存器an实际上被递减了两次(因此,在指令之后,它被递减了4 -或者,在.l示例中,递减了8)。该指令有效地将内存内容向下移动了一个字长(在真实硬件上验证)。
move16是一个完全不同的beast,仅在68040以上版本中可用。我认为move16指令的特定行为是由68040缓存机制引起的。

相关问题