aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/avr8/words/compare.asm
blob: 0a33f47c92376e8528ed9a6f38216470addd679b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
; ( r-addr r-len f-addr f-len --  f) 
; String
; compares two strings in RAM
VE_COMPARE:
    .dw $ff07
    .db "compare",0
    .dw VE_HEAD
    .set VE_HEAD = VE_COMPARE
XT_COMPARE:
    .dw PFA_COMPARE
PFA_COMPARE:
    push xh
    push xl
    movw temp0, tosl
    loadtos
    movw xl, tosl
    loadtos
    movw temp2, tosl
    loadtos
    movw zl, tosl
PFA_COMPARE_LOOP:
    ld temp4, X+
    ld temp5, Z+
    cp temp4, temp5
    brne PFA_COMPARE_NOTEQUAL
    dec temp0
    breq PFA_COMPARE_ENDREACHED2
    dec temp2
    brne PFA_COMPARE_LOOP
    rjmp PFA_COMPARE_ENDREACHED
PFA_COMPARE_ENDREACHED2:
    dec temp2
PFA_COMPARE_ENDREACHED:
    or temp0, temp2
    brne PFA_COMPARE_CHECKLASTCHAR
    clr tosl
    rjmp PFA_COMPARE_DONE
PFA_COMPARE_CHECKLASTCHAR:
PFA_COMPARE_NOTEQUAL:
    ser tosl
    rjmp PFA_COMPARE_DONE

PFA_COMPARE_DONE:
    mov tosh, tosl
    pop xl
    pop xh
    jmp_ DO_NEXT