【问题标题】:RJMP OPcode Help, Avr assemblerRJMP 操作码帮助,Avr 汇编器
【发布时间】:2019-04-01 21:16:44
【问题描述】:

我有一个问题要解决 rjmp 的操作码中 K 的值。操作码是 1100 kkkk kkkk kkkk。其中 Pc

foo: NOP
  NOP
  RJMP foo

【问题讨论】:

  • “然后我假设我的答案是 CFFF”。为什么?您的问题不包含有关fooRJMP 指令地址的信息。
  • 我忽略了它从内存位置 0 开始
  • @Michael 我知道如何回复

标签: assembly avr opcode


【解决方案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 的来源。

【讨论】:

  • 你能解释一下为什么它是 1 个单词以及它如何改变 k 的公式,比如它是否是 2 个单词的距离?
  • 它是 1 个字,因为它是上一条指令,每条指令都是 1 个字。当然,公式也不会因 2 个单词而改变。然后你会有k + 1 = -2 所以k = -3。另一种看待它的方式是偏移量是从下一条指令开始测量的,因为当添加偏移量时,cpu 已经增加了 PC。这就是+1 的来源。
  • 所以如果有 3 个 nop 而不是两个它会是 k+1 = -3, k = -4?
  • 非常感谢,为我的期中保驾护航
猜你喜欢
  • 2019-03-17
  • 1970-01-01
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 2014-07-10
相关资源
最近更新 更多