在M68040 asm中,给定:
mov.l #0x1000, %a0
mov.l -(%a0), -(%a0)
第二个mov
之后的%a0
值是多少?寄存器是递减两次还是一次?
除了mov.l
之外,我们还使用了其他几条指令中的哪一条,它们都支持源和目标上的预递减/后递增?
MC 68040 UM声明move16 (%an)+, (%an)+
只执行一次增量,但我找不到任何有关一般情况的信息。
我正在一个模拟器上工作,没有实际的CPU。而且,网上的普遍共识似乎是,在处理这种角落情况时,Easy68k
是不值得信任的。
1条答案
按热度按时间fxnxkyjh1#
在您的特定示例中,
在真实的的68000 CPU上,寄存器
an
实际上被递减了两次(因此,在指令之后,它被递减了4 -或者,在.l
示例中,递减了8)。该指令有效地将内存内容向下移动了一个字长(在真实硬件上验证)。move16
是一个完全不同的beast,仅在68040以上版本中可用。我认为move16
指令的特定行为是由68040缓存机制引起的。