.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
;addition
mov #0x39,W0
mov #0x28,W1
rcall bcd_add8 ;BCD (39 + 28 = 67)
;subtraction
mov #0x42,W0
mov #0x24,W1
rcall bcd_sub8 ;BCD (42 - 24 = 18)
done: ;do not return
bra done
;;do bcd 8-bit addition, W0+W1=W0
bcd_add8:
add.b W0,W1,W0 ;W0 = W0 + W1
daw.b W0 ;decimal adjust
return
;;do bcd 8-bit subtractin, W0-W1=W0
bcd_sub8:
mov #0x99,W2
sub.b W2,W1,W1 ;do 0x99-W1
inc.b W1,W1 ;add 1 for 10's complement
add.b W0,W1,W0 ;W0 = W0 + (-W1)
daw.b W0
return
.end