;clears (sum) mov r4, #0x00 mov r5, #0x00 ;i (sum) mov r0, #0x00 mov r1, #0x00 ;save away len mov _sum_len_1_1, dpl mov (_sum_len_1_1 +1), dph ;load datapointer with adress of array mov dpl, _sum_PARM_2 mov dph, (_sum_PARM_2+1) 0001$: ; check the for condition clr C ; clear carry mov A, r0 subb A, _sum_len_1_1 mov A ,r1 xrl A ,#0x80 mov B, (_sum_len_1_1+1) xrl B, #0x80 subb A,B ;jump to exit jnc 0002$ ;fetch the array element and add movx A, @DPTR inc DPTR add A, r4 mov r4, A movx A, @DPTR addc A, r5 mov r5, A inc DPTR ;increment loop counter and jump inc r0 cjne r0, #0x00, 0001$ inc r1 sjmp 0001$ 0002$: ; prepare return values mov dpl, r4 mov dph, r5 ret