我有一个问题是在rjmp的操作码中解决K的值。操作码是1100 kkkk kkkk kkkk。其中Pc< - PC + k + 1.当我解决这个问题时,我得到k = -1然后我知道操作码中K的12位是0xFFF。然后我假设我的答案是CFFF,但这是不正确的。答案是CFFD。我做错了什么?下面是我给出的代码。
foo: NOP
NOP
RJMP foo
答案 0 :(得分:1)
你想跳回1个单词,公式给出k + 1 = -1
k = -2
,{12}为0xFFE
。插入操作码会产生0xCFFE
。您可以使用汇编程序进行检查:
00000000 <foo>:
0: 00 00 nop
2: fe cf rjmp .-4 ; 0x0 <foo>
查看它的其他方法是从下一条指令测量偏移量,因为当添加偏移量时,cpu已经增加了PC。 +1来自哪里。