fork download
  1. #include P18F4520.INC
  2.  
  3. ORG 0x00
  4.  
  5. RES_L EQU 0x30
  6. RES_H EQU 0x31
  7. NUM1_L EQU 0x10
  8. NUM1_H EQU 0x11
  9. NUM2_L EQU 0x20
  10. NUM2_H EQU 0x21
  11.  
  12. ; Load first 16-bit number into registers (NUM1)
  13. MOVLW 0x25 ; Lower byte of NUM1
  14. MOVWF NUM1_L
  15. MOVLW 0x03 ; Higher byte of NUM1
  16. MOVWF NUM1_H
  17.  
  18. ; Load second 16-bit number into registers (NUM2)
  19. MOVLW 0x10 ; Lower byte of NUM2
  20. MOVWF NUM2_L
  21. MOVLW 0x02 ; Higher byte of NUM2
  22. MOVWF NUM2_H
  23.  
  24. ; Perform subtraction (LOW BYTE)
  25. MOVF NUM1_L, W ; Move NUM1_L into W register
  26. SUBWF NUM2_L, W ; W = NUM1_L - NUM2_L
  27. MOVWF RES_L ; Store result in RES_L
  28.  
  29. BTFSS STATUS, C ; Check if borrow occurred
  30. DECF NUM1_H, F ; If borrow, decrement high byte
  31.  
  32. ; Perform subtraction (HIGH BYTE)
  33. MOVF NUM1_H, W
  34. SUBWF NUM2_H, W
  35. MOVWF RES_H
  36.  
  37.  
Success #stdin #stdout 0.04s 25896KB
stdin
Standard input is empty
stdout
#include P18F4520.INC

ORG 0x00

RES_L EQU 0x30
RES_H EQU 0x31
NUM1_L EQU 0x10
NUM1_H EQU 0x11
NUM2_L EQU 0x20
NUM2_H EQU 0x21

; Load first 16-bit number into registers (NUM1)
MOVLW 0x25    ; Lower byte of NUM1
MOVWF NUM1_L
MOVLW 0x03    ; Higher byte of NUM1
MOVWF NUM1_H

; Load second 16-bit number into registers (NUM2)
MOVLW 0x10    ; Lower byte of NUM2
MOVWF NUM2_L
MOVLW 0x02    ; Higher byte of NUM2
MOVWF NUM2_H

; Perform subtraction (LOW BYTE)
MOVF NUM1_L, W  ; Move NUM1_L into W register
SUBWF NUM2_L, W  ; W = NUM1_L - NUM2_L
MOVWF RES_L      ; Store result in RES_L

BTFSS STATUS, C  ; Check if borrow occurred
DECF NUM1_H, F   ; If borrow, decrement high byte

; Perform subtraction (HIGH BYTE)
MOVF NUM1_H, W
SUBWF NUM2_H, W
MOVWF RES_H

END