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.
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 |