【发布时间】:2020-04-10 09:50:30
【问题描述】:
我正在使用 HC12 芯片。
我们有指令SUBA 和DECA。您使用SUBA 的方式是从寄存器A 中减去一些值(在内存中或您指定的值)。DECA 但是不带参数,只是从寄存器A 中减去$01。所以我的问题是指令SUBA #01 和DECA?我的猜测是它们在负数上的表现不同,但我并不完全确定。
我正在处理的问题:
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 寄存器,则上半部分未设置。或者如果它是零,那么你有230,not-26。您只能将-26从符号扩展 8 位230到 16 位 D 中,而您的代码不会这样做。你只使用 8 位 A 和你的 load-immediate 和suba。 -
我很抱歉搞砸了 - 我应该更改标签吗?我会相应地编辑问题。
-
我已经为你把标签从 x86 改成了 68hc12