sba*_*bbi 5 assembly 68000 addressing-mode
在 M68040 asm 中,给出:
mov.l #0x1000, %a0
mov.l -(%a0), -(%a0)
Run Code Online (Sandbox Code Playgroud)
%a0第二个之后的值是多少mov?寄存器是递减两次还是一次?
mov.l我们可以使用少数几个支持源和目标上的预递减/后递增的指令之一来代替吗?
MC68040 UM 声明move16 (%an)+, (%an)+仅执行单个增量,但我找不到有关一般情况的任何信息。
我正在开发模拟器,但没有实际的 CPU。此外,网上的普遍共识似乎是Easy68k在处理这种极端情况时并不值得信赖。
在你的具体例子中,
move.w -(an),-(an)
Run Code Online (Sandbox Code Playgroud)
在真正的 68000 CPU 上,寄存器an确实减少了两次(因此,在指令之后,它减少了 4,或者在您的.l示例中减少了 8)。该指令有效地将内存内容向下移动一个字长(在真实硬件上验证)。
move16是一个完全不同的野兽,仅适用于 68040 以上。我认为该move16指令的具体行为是由 68040 缓存机制引起的。