PROCESSOR 18F4550
#include <xc.inc>

PSECT mycode

    MOVLW   050H        ; W = 50H
    MOVWF   20H, a      ; first number  A = 50H at 20H

    MOVLW   030H        ; W = 30H
    MOVWF   21H, a      ; second number B = 30H at 21H

    ; ---- Case 1: A - B = 50H - 30H (no borrow) ----
    MOVF    21H, W, a   ; W = B = 30H
    SUBWF   20H, W, a   ; W = A - W = 50H - 30H = 20H
    MOVWF   22H, a      ; store result at 22H

    ; ---- Case 2: B - A = 30H - 50H (borrow) ----
    MOVF    20H, W, a   ; W = A = 50H
    SUBWF   21H, W, a   ; W = B - W = 30H - 50H = E0H
    MOVWF   23H, a      ; store result at 23H

HERE:
    GOTO    HERE        ; stay here to observe results
