1

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

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

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

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

4

3 回答 3

2

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

  ADDI.L #2,A0

或者

  LEA (A0)+,A0
于 2010-11-19T18:18:24.177 回答
0

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

MOVE.W  (A0)+,(A0) 

如果我没看错,它正在复制 A0 指向 A0 指向的地址的内容,然后将 A0 增加 2,对吗?这只是一个增量 A0 指令吗?

或者,它是否取 A0 处的值,将 A0 增加 2,然后将该值写入新地址?如果是这样,它似乎可以通过在每次循环迭代中将“2”处理到连续的内存位置,这可以解释为什么 D3 不断获得 2。

于 2010-11-19T17:58:26.130 回答
0

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

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

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

所以我需要做的就是:

move (A0)+,D3;

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

于 2010-11-19T18:08:48.530 回答