0

在课堂上给出了以下代码,并且应该在右侧的注释中描述每一行的含义。它是否正确?

       MOVE.B  #20,D0     //Move 20 into D0
       MOVEA.L #$1000,A0  //Move the contents of address 1000 into A0 
       CLR.B   D1         //Set D1 to 0
Again  CMP.B   (A0)+,D2   //Compare A0 to D2, then increment A0 by 1
       BNE     NEXT       //If A0 and D2 are not equal, go to NEXT, otherwise continue
       ADD.B   #1,D1      //Add 1 to D1
NEXT   SUB.B   #1,D0      //Subtract 1 from D0
       BNE     Again      //Branch to AGAIN if contents of A0 is not equal to D2
4

1 回答 1

1

不,这是不正确的。至少,这是:

Again  CMP.B   (A0)+,D2   //Compare A0 to D2, then increment A0 by 1

...没有将A0的内容与任何内容进行比较。它将 A0 中包含的地址处的一个字节与 D2 中的一个字节进行比较(然后将 A0 递增以指向下一个地址)。

如果我没记错的话,在这些行中:

NEXT   SUB.B   #1,D0      //Subtract 1 from D0
       BNE     Again      //Branch to AGAIN if contents of A0 is not equal to D2

零标志应该根据前面的结果设置/清除sub.b,因此它会持续 0x20 次迭代(因为 D0 在第一行中加载了 0x20)。

于 2013-10-22T22:21:52.023 回答