我有一个变量 temp2,它被分配为 00001101(13),并且我已将 00001010(10) 移至 wreg。 (顺便说一句,所有这些寄存器都会在 MPLAB x 调试器会话中逐步检查。)然后,我执行
subwfb temp2
指示。 temp2 应该是 00000011(3),但它是 00000010(2)。 这里有什么问题,为什么 temp2 不符合预期?请帮忙!
subwfb
指令从寄存器1
中减去W寄存器和借位(如果设置了C
,则为0
,否则为f
)。当您进行链式减法时,会使用借位,例如对包含多个字节的数字执行减法时。当发生溢出时,它由 subXX
和 subXXb
形式的指令产生。
示例:
; let num1, num2 be labels of bytes in a 16-bit number
movlw K
subwf num1
movlw L
subwfb num2
; num2:num1 now contains: the num2:num1 - L:K where num2 and L are upper bytes of a 16-bit number
要在不需要时避免出现此行为,您可以使用
bsf STATUS, 0
或 subwf
(请注意缺少 b
后缀)。请注意,在不需要时使用不带 b
(或在添加指令的情况下为 c
)的指令可能会导致某些模型的性能稍微好一些。