isa_cmp: updated 8051 asm
[calu.git] / 1_isacmp / 8051.s
1 ;clears (sum)
2 mov r4, #0x00
3 mov r5, #0x00
4
5 ;i (sum)
6 mov r0, #0x00
7 mov r1, #0x00
8
9 ;save away len
10 mov _sum_len_1_1, dpl
11 mov (_sum_len_1_1 +1), dph
12
13 ;load datapointer with adress of array
14 mov dpl, _sum_PARM_2
15 mov dph, (_sum_PARM_2+1)
16
17 0001$:
18         ; check the for condition
19         clr C ; clear carry
20         mov A, r0
21         subb A, _sum_len_1_1
22         mov A ,r1
23         xrl A ,#0x80
24         mov B, (_sum_len_1_1+1)
25         xrl B, #0x80
26         subb A,B
27         ;jump to exit
28         jnc 0002$
29
30         ;fetch the array element and add
31         movx A, @DPTR
32         inc DPTR
33         add A, r4
34         mov r4, A
35         movx A, @DPTR
36         addc A, r5
37         mov r5, A
38         inc DPTR
39
40         ;increment loop counter and jump
41         inc r0
42         cjne r0, #0x00, 0001$
43         inc r1
44         sjmp 0001$
45
46 0002$:
47 ; prepare return values
48 mov dpl, r4
49 mov dph, r5
50
51 ret