PIC 18F8722 组件中的 subwfb

subwfb in PIC 18F8722 Assembly

我有一个分配给 00001101(13) 的变量 temp2,我已将 00001010(10) 移动到 wreg。 (顺便说一句,所有这些寄存器都在 MPLAB x Debugger 会话中逐步检查。)然后,我执行

subwfb temp2

说明。 temp2 应该是 00000011(3) 但它是 00000010(2)。 这里有什么问题,为什么 temp2 不符合预期?请帮忙!

subwfb 指令从寄存器 f 中减去 W 寄存器和借位(1 如果 C 被设置,0 否则)。进行链式减法时使用借用,例如对包含在一个以上字节中的数字执行减法时。它由 subXXsubXXb 形式的指令在发生溢出时产生。

示例:

; 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, 0subwf(注意缺少 b 后缀)。请注意,在不需要时使用不带 b 的指令(或 c 在加法指令的情况下)可能会导致某些模型的性能稍微好一些。