PIC 18F8722 组件中的 subwfb

问题描述 投票:0回答:1

我有一个变量 temp2,它被分配为 00001101(13),并且我已将 00001010(10) 移至 wreg。 (顺便说一句,所有这些寄存器都会在 MPLAB x 调试器会话中逐步检查。)然后,我执行

subwfb temp2

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

assembly pic mplab
1个回答
2
投票

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
)的指令可能会导致某些模型的性能稍微好一些。

© www.soinside.com 2019 - 2024. All rights reserved.