我正在使用 Easy68k 制作一个包含 while 循环的简单程序。
假设寄存器 A0 指向我的数据,即单词。为什么这不起作用?
MOVE.W (A0) , D3
MOVE.W (A0)+, (A0)
MOVE.W (A0) , D3
如果 A0 最初指向数字 2,然后是数字 4,我想要的结果是在第一次移动之后,存储 2,在增量和第三次移动之后,存储 4。但是,最后一步没有效果。
我不确定我是否理解你想要的,但如果我是对的,你的第二条指令应该是
ADDI.L #2,A0
或者
LEA (A0)+,A0
我绝不是一个 68k 的运动员,但我确实查找了寻址模式,但我对这一行感到困惑:
MOVE.W (A0)+,(A0)
如果我没看错,它正在复制 A0 指向 A0 指向的地址的内容,然后将 A0 增加 2,对吗?这只是一个增量 A0 指令吗?
或者,它是否取 A0 处的值,将 A0 增加 2,然后将该值写入新地址?如果是这样,它似乎可以通过在每次循环迭代中将“2”处理到连续的内存位置,这可以解释为什么 D3 不断获得 2。
我找到了答案,但我的指示不正确。
基本上, (A0)+ 将在完成它所属的任何指令后递增地址寄存器。
我认为它会先增加,然后分配(这也是一个逻辑错误)。
所以我需要做的就是:
move (A0)+,D3;
这会将 A0 中的值添加到 D3,然后在下一次增加 A0。