在课堂上给出了以下代码,我应该在右边的评论中描述每行的含义。这是对的吗?
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
答案 0 :(得分: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)。