[ASM]16 bits deler

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Gloeilamp
  • Registratie: Juli 2009
  • Laatst online: 13-10 14:59
Voor een project waar ik mee bezig ben heb ik een 16 bits deler nodig voor de PIC16F870.
De deler werkt maar niet bij alle waardes. Als de X waarde ongeveer onder de 200 (decimaal) komt krijg ik de volgende foutmelding: 'CORE-E0002: Stack under flow error occurred from instruction at 0x000044'.

Na veel googlen en fouten zoeken in mijn code zie ik niet wat ik fout doe.


GAS: filename
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
list p=16F870
#include "p16F870.inc"


    Xl      EQU     0X20    
    Xh      EQU     0X21
    Yl      EQU     0X22
    Yh      EQU     0X23
    Zl      EQU     0X24
    TempYl  EQU     0X25
    TempYh  EQU     0X26
    Teller  EQU     0X27


;X = 60.000
;Y = 5.000
;Antwoord komt in Z1, rest in Xl
;Rest getal word opgeslagen in: Xl, Xh

    MOVLW   0X75                    ;Plaats in Xh   
    MOVWF   Xh

    MOVLW   0X30                    ;Plaats in Xl
    MOVWF   Xl

    MOVLW   0X00                    ;Plaats in Yh
    MOVWF   Yh

    MOVLW   0XC8                    ;Plaats in Yl
    MOVWF   Yl
                                            
    MOVF    Yl, 0
    MOVWF   TempYl                  ;Yl kopieren naar TempYl
    MOVF    Yh, 0
    MOVWF   TempYh                  ;Yl kopieren naar TempYh

    CLRF    Zl
    MOVLW   0X01                    ;Teller = 1
    MOVWF   Teller                  ;Plaats in teller

    MOVF    Yl, 1
    BTFSS   STATUS, Z
    GOTO    Loop1                   ;Yl = 0?        

    MOVF    Yh, 1
    BTFSS   STATUS, Z
    GOTO    Loop1                   ;Yh = 0?
    
    MOVLW   0x00
    GOTO    Eind                    ;Yl & Yh = 0 > eind


    Loop1:
        MOVF    TempYl, 0
        BSF     STATUS, C
        SUBWF   Xl, 0               

        MOVF    TempYh, 0
        BTFSS   STATUS, C
        INCF    TempYh, 0 
        
        BSF     STATUS, C
        SUBWF   Xh, 0
        
        BTFSC   STATUS, C                       
        GOTO    Ydeling     
        GOTO    Ykeer2                          

    Ydeling:        
        BCF     STATUS, C
        RLF     TempYl, 1
        RLF     TempYh, 1
        BCF     STATUS, C
        RLF     Teller, 1
        GOTO    Loop1
        
    Ykeer2:     
        DECF    Teller, 1
        BTFSC   STATUS, Z
        GOTO    Eind                

        INCF    Teller, 1           
        BCF     STATUS, C           
        RRF     Teller, 1           
        BCF     STATUS, C           
        RRF     TempYh, 1           
        RRF     TempYl, 1           
        GOTO    XminY
        

    XminY:
        MOVF    TempYl, 0
        BSF     STATUS, C
        SUBWF   Xl, 1               

        BTFSS   STATUS, C
        INCF    TempYh, 1
                     
        MOVF    TempYh, 0
        BSF     STATUS, C       
        SUBWF   Xh, 1

        MOVF    Yl, 0
        MOVWF   TempYl
        MOVF    Yh, 0
        MOVWF   TempYh
        
        MOVF    Teller, 0               
        ADDWF   Zl, 1
        MOVLW   0X01                
        MOVWF   Teller


        GOTO    Loop1
            
    Eind:

        MOVF    Zl, 0

        Return  

    End                                                             

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 02:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

En dus moeten wij je code maar uit gaan zitten pluizen, compleet zonder comments? :)

Het lijkt me handiger als je gewoon in pseudocode vertelt hoe je algoritme zou moeten werken

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 14-10 00:53
Is dit om te oefenen of heeft die Microchip pruttel geen c compiler met een dergelijke built-in functie?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.