2015-04-12 49 views
1

我有一个可变TEMP2被分配00001101(13)和I搬到00001010(10)WREG。 (顺便一提,所有这些寄存器都在MPLAB x Debugger会话中进行检查。)然后,我执行SUBWFB在PIC 18F8722大会

subwfb temp2 

指令。 TEMP2应该是00000011(3),但它是00000010(2)。 有什么问题就在这里,为什么没有如预期TEMP2?请帮帮忙!

+1

'B'手段借用。正在执行'subwfb'当您好像'CF'。 – user35443

+1

好吧,我纠正了在subwfb指令前添加一条指令“bsf STATUS,0”。这种方法是否有效? – mualloc

+1

我会说使用'subwf'更好,因为它不需要额外的指令。 – user35443

回答

1

subwfb指令中减去来自寄存器f W寄存器和所述借位(1如果C被置位,当0C未设置)。当你进行链式减法时,使用借贷。即减少包含在多个字节中的数字。它是由subxx发生溢出时产生的。

实施例:

; 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)的指令总是更好,因为它不消耗时钟或程序存储器。