【问题标题】:Difference between decrement and subtraction in 68HC1268HC12中减法和减法的区别
【发布时间】:2020-04-10 09:50:30
【问题描述】:

我正在使用 HC12 芯片。

我们有指令SUBADECA。您使用SUBA 的方式是从寄存器A 中减去一些值(在内存中或您指定的值)。DECA 但是不带参数,只是从寄存器A 中减去$01。所以我的问题是指令SUBA #01DECA?我的猜测是它们在负数上的表现不同,但我并不完全确定。 我正在处理的问题:

      LDAA #230 ; 8 bit system, so this number is technically -26 in 2s complement. Register A is 8 bits, with LDAA loading into register A
LOOP: SUBA #01
      BGT LOOP
; rest of code

如果将SUBA #01 替换为DECA,上述代码的工作方式会有所不同吗?

【问题讨论】:

  • 这不是 x86 代码。我想你的意思是68hc12。此外,#230 适合 16 位整数。您的意思是 8 位,其中 230 == -26 在 2 的补码中?
  • 是的,这就是我的意思——hc12芯片的D寄存器是A reg + B reg,A和B各为8位,这就是我说16位的原因。
  • 好的,但是ldaa 加载了 8 位 A 寄存器。如果考虑整个 B:A = D 寄存器,则上半部分未设置。或者如果它是零,那么你有230not -26。您只能将 -26 从符号扩展 8 位 230 到 16 位 D 中,而您的代码不会这样做。你只使用 8 位 A 和你的 load-immediate 和 suba
  • 我很抱歉搞砸了 - 我应该更改标签吗?我会相应地编辑问题。
  • 我已经为你把标签从 x86 改成了 68hc12

标签: assembly binary 68hc12


【解决方案1】:

DECA 是一种非常常见的操作,因此在更小的指令中对其进行编码的能力被认为值得其冗余。

【讨论】:

  • @cyber101:与此 HC12 答案相同的推理也适用于 x86-16,除了 x86 dec 未修改 CF,使其在 adc / sbb 或其他循环中有用你希望 CF 在循环迭代中存活下来。
猜你喜欢
  • 2018-07-29
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
相关资源
最近更新 更多