我正在使用Easy68k制作一个包含while循环的简单程序。
假设寄存器A0指向我的数据,即数据。 为什么这不起作用?
MOVE.W (A0) , D3
MOVE.W (A0)+, (A0)
MOVE.W (A0) , D3
如果A0最初指向数字2,然后指向数字4,我想要的结果是在第一次移动之后存储2,在增量和第三次移动之后存储4。 但是,最后一步没有效果。
答案 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。