如何更新地址寄存器?

时间:2010-11-19 17:50:02

标签: assembly 68000

我正在使用Easy68k制作一个包含while循环的简单程序。

假设寄存器A0指向我的数据,即数据。 为什么这不起作用?

 MOVE.W (A0) ,  D3  
 MOVE.W (A0)+, (A0) 
 MOVE.W (A0) ,  D3

如果A0最初指向数字2,然后指向数字4,我想要的结果是在第一次移动之后存储2,在增量和第三次移动之后存储4。 但是,最后一步没有效果。

3 个答案:

答案 0 :(得分:2)

我不确定我是否理解你想要的东西,但如果我说得对,你的第二条指令应该是

  ADDI.L #2,A0

  LEA (A0)+,A0

答案 1 :(得分:0)

我绝不是一个68k的运动员,但我确实查找了寻址模式,我对这一行感到困惑:

MOVE.W  (A0)+,(A0) 

如果我正确读取它,它正在复制地址的内容,其中A0指向A0指向的位置,然后将A0递增2,对吗?这只是一个增量A0指令吗?

或者,它是否取A0处的值,将A0递增2,并将该值写入新地址?如果是这样的话,似乎可以通过在每次循环迭代中将'2'复制到连续的内存位置,这可以解释为什么D3一直得到2。

答案 2 :(得分:0)

我找到了答案,我的指示不正确。

基本上,(A0)+将在完成地址寄存器完成任何指令后递增。

我认为它会先增加,然后再分配(这也是一个逻辑错误)。

所以我需要做的就是:

move (A0)+,D3;

这会将A0中的值添加到D3,然后再次增加A0。