查閱PIC單片機芯片手冊,關於進位/借位位的說明為:
C:進位/借位位。
1 = 結果的最高位發生了進位
0 = 結果的最高位未發生進位
同時有一條標注:借位的極性是相反的。
通過以上說明,可以將C的分析分為兩種情況:
1、加法:
最高位發生了進位:C = 1;
最高位未發生進位:C = 0;
2、減法:
最高位發生了借位:C = 0;
最高位未發生借位:C = 1;
為了加深理解,在MPLAB中寫入一段代碼,通過觀測STATUS寄存器的值來測試以上分析:
1 ;測試SUBWF、ADDWF指令與狀態寄存器C標志位的關系 2 3 LIST P=16F684 4 include "P16F684.INC" 5 6 Sub_Register_Small EQU 20H 7 Sub_Register_Large EQU 21H 8 Add_Register EQU 22H 9 Small_Status EQU 23H 10 Large_Status EQU 24H 11 Add_Status EQU 25H 12 13 ;被減數 < 減數 14 MOVLW 54H 15 MOVWF Sub_Register_Small 16 MOVLW 66H 17 SUBWF Sub_Register_Small, F 18 19 SWAPF STATUS, W ;保存狀態寄存器值 20 MOVWF Small_Status 21 SWAPF Small_Status, F 22 23 ;被減數 > 減數 24 MOVLW 77H 25 MOVWF Sub_Register_Large 26 MOVLW 66H 27 SUBWF Sub_Register_Large, F 28 29 SWAPF STATUS, W ;保存狀態寄存器值 30 MOVWF Large_Status 31 SWAPF Large_Status, F 32 33 ;加法進位 34 MOVLW 77H 35 MOVWF Add_Register 36 MOVLW 0BBH 37 ADDWF Add_Register, F 38 39 SWAPF STATUS, W ;保存狀態寄存器值 40 MOVWF Add_Status 41 SWAPF Add_Status, F 42 43 END
啟用仿真后,查看內存23H、24H、25H(保存的是以上三種操作后的STATUS)的值,結果如下:

Small_Status : 00011000B,對應C=0(最高位發生了借位)
Large_Status : 00011011B,對應C=1(最高位未發生借位)
Add_Status : 00011011B,對應C=1(最高位發生了進位)
為了簡單便於記憶,可以把C的進/借位規則記為:加柴(1)做煎(減)蛋(0)!
