.include "p24Hxxxx.inc"
.global __reset          ;The label for the first line of code.
         .data            ;unitialized data section
         .bss
;;These start at location 0x0800 because 0-0x07FF reserved for SFRs
u16_k:   .space 2        ;Allocating space (in bytes) to variable.
u8_j:    .space 1        ;Allocating space (in bytes) to variable.
.text                          ;Start of Code section
__reset:                       ; first instruction located at __reset label
       mov #__SP_init, w15     ;Initalize the Stack Pointer
       mov #__SPLIM_init,W0
       mov W0, SPLIM           ;Initialize the stack limit register
       rcall main              ;call main()
       reset                   ;start over
 ;__SP_init set by linker to be after allocated data
main:
      mov #0xFFFF,W0  ; 65535 unsigned, -1 signed
      mov #0x1,W1     ; 1 unsigned, +1 signed
      mul.uu W0,W0,W2  ;65535 * 65535 = 4294836225 = 0xFFFE0001 = W3:W2
      mul.ss W0,W0,W4  ;-1 * -1 = +1 = 0x00000001 = W5:W4
      mul.uu W0,W1,W6  ;65535 * 1 = 65535 = 0x0000FFFF = W7:W6
      mul.ss W0,W1,W8  ;-1 * 1 = -1 = 0xFFFFFFFF = W9:W8
      mul.uu W0,#1,W10 ;65535 * 1 = 65535 = 0x0000FFFF = W11:10
      mul.su W0,#1,W12 ;-1 * 1 = -1 = 0xFFFFFFFF = W13:W12
done:                     ;do not return
       bra done
    .end