📄 string.lst
字号:
1 .file "string.c"
2 __SREG__ = 0x3f
3 __SP_H__ = 0x3e
4 __SP_L__ = 0x3d
5 __CCP__ = 0x34
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
96 .global string_compare_progmem2
98 string_compare_progmem2:
1:util/string.c **** /*
2:util/string.c **** ,-----------------------------------------------------------------------------------------.
3:util/string.c **** | util/string
4:util/string.c **** |-----------------------------------------------------------------------------------------
5:util/string.c **** | this file implements some string routines
6:util/string.c **** | - replacing the huge printf/scanf routines
7:util/string.c **** |
8:util/string.c **** | Author : {{removed according to contest rules}}
9:util/string.c **** | -> circuitcellar.com avr design contest 2006
10:util/string.c **** | -> Entry #AT2616
11:util/string.c **** |
12:util/string.c **** |-----------------------------------------------------------------------------------------
13:util/string.c **** | License:
14:util/string.c **** | This program is free software; you can redistribute it and/or modify it under
15:util/string.c **** | the terms of the GNU General Public License as published by the Free Software
16:util/string.c **** | Foundation; either version 2 of the License, or (at your option) any later
17:util/string.c **** | version.
18:util/string.c **** | This program is distributed in the hope that it will be useful, but
19:util/string.c **** |
20:util/string.c **** | WITHOUT ANY WARRANTY;
21:util/string.c **** |
22:util/string.c **** | without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
23:util/string.c **** | PURPOSE. See the GNU General Public License for more details.
24:util/string.c **** |
25:util/string.c **** | You should have received a copy of the GNU General Public License along with
26:util/string.c **** | this program; if not, write to the Free Software Foundation, Inc., 51
27:util/string.c **** | Franklin St, Fifth Floor, Boston, MA 02110, USA
28:util/string.c **** |
29:util/string.c **** | http://www.gnu.de/gpl-ger.html
30:util/string.c **** `-----------------------------------------------------------------------------------------*/
31:util/string.c ****
32:util/string.c ****
33:util/string.c **** #include "string.h"
34:util/string.c ****
35:util/string.c **** //find progmemstring in buffer (null-terminated!)
36:util/string.c **** //return:
37:util/string.c **** // -1 -> not found
38:util/string.c **** // <pos> -> position of progmemstring in buffer
39:util/string.c **** int string_search_progmem(PGM_P pointer, unsigned char *buffer){
40:util/string.c **** //use strcmp_P(txt, PSTR("aAuthorization: Basic ")))
41:util/string.c **** unsigned char c;
42:util/string.c **** int found;
43:util/string.c **** int pos=0;
44:util/string.c **** PGM_P pointer2;
45:util/string.c ****
46:util/string.c **** while(buffer[pos] != 0){
47:util/string.c **** c = pgm_read_byte(pointer);
48:util/string.c **** pointer2 = pointer;
49:util/string.c **** found = pos;
50:util/string.c **** //match of first char
51:util/string.c **** if (buffer[pos] == c){
52:util/string.c **** //continue:
53:util/string.c **** pointer2++;
54:util/string.c **** pos++;
55:util/string.c **** c = pgm_read_byte(pointer2);
56:util/string.c **** while((c != 0) && (buffer[pos] == c)){
57:util/string.c **** softuart_putc(c); softuart_putc('=');softuart_putc(buffer[pos]); softuart_putnewline();
58:util/string.c **** pointer2++;
59:util/string.c **** pos++;
60:util/string.c **** c = pgm_read_byte(pointer);
61:util/string.c **** }
62:util/string.c ****
63:util/string.c **** //if c == 0 -> we have a match
64:util/string.c **** if (c==0){
65:util/string.c **** //match !
66:util/string.c **** return found;
67:util/string.c **** }
68:util/string.c **** pos=found;
69:util/string.c **** }
70:util/string.c **** pos++;
71:util/string.c **** pointer++;
72:util/string.c **** }
73:util/string.c **** return -1;
74:util/string.c **** }
75:util/string.c ****
76:util/string.c **** ///WARNING: not tested!
77:util/string.c **** //return 1 if both strings match
78:util/string.c **** //return 0 otherwise
79:util/string.c **** //string_compare_progmem is defined in string.h !
80:util/string.c **** char string_compare_progmem2(PGM_P pointer, unsigned char *string, unsigned char check_eof){
99 ,0,80,.LM0-.LFBB1
100 .LM0:
101 .LFBB1:
102 /* prologue: function */
103 /* frame size = 0 */
104 0000 582F mov r21,r24
105 0002 DB01 movw r26,r22
107 .LM1:
108 0004 E82F mov r30,r24
109 0006 F92F mov r31,r25
110 0008 9F01 movw r18,r30
111 000a 00C0 rjmp .L2
112 .L5:
81:util/string.c **** ;
82:util/string.c **** //softuart_putc('=');
83:util/string.c **** //softuart_putc(pgm_read_byte(pointer));
84:util/string.c **** //softuart_putnewline();
85:util/string.c **** if (string[i] != pgm_read_byte(pointer))
86:util/string.c **** return 0;
87:util/string.c **** pointer++;
113 7,.LM2-.LFBB1
114 .LM2:
115 000c FD01 movw r30,r26
116 000e E80F add r30,r24
117 0010 F11D adc r31,__zero_reg__
118 0012 8081 ld r24,Z
119 0014 8917 cp r24,r25
120 0016 01F0 breq .L3
121 0018 90E0 ldi r25,lo8(0)
122 001a 00C0 rjmp .L4
123 .L3:
88:util/string.c **** e(pointer));
89:util/string.c **** //softuart_putnewline();
124 0,89,.LM3-.LFBB1
125 .LM3:
126 001c 2F5F subi r18,lo8(-(1))
127 001e 3F4F sbci r19,hi8(-(1))
128 .L2:
129 0020 822F mov r24,r18
130 0022 851B sub r24,r21
131 .LBB2:
133 .LM4:
134 0024 F901 movw r30,r18
135 /* #APP */
136 ; 82 "util/string.c" 1
137 0026 9491 lpm r25, Z
138
139 ; 0 "" 2
140 /* #NOAPP */
141 .LBE2:
142 0028 9923 tst r25
143 002a 01F4 brne .L5
90:util/string.c **** _putc(string[i]);
91:util/string.c **** //softuart_putc('=');
92:util/string.c **** //softuart_putc(pgm_read_byte(pointer));
93:util/string.c **** //softuart_putnewline();
144 -.LFBB1
145 .LM5:
146 002c 4423 tst r20
147 002e 01F0 breq .L9
148 .L6:
149 0030 90E0 ldi r25,lo8(0)
150 0032 A80F add r26,r24
151 0034 B11D adc r27,__zero_reg__
152 0036 8C91 ld r24,X
153 0038 8823 tst r24
154 003a 01F4 brne .L4
155 .L9:
156 003c 91E0 ldi r25,lo8(1)
157 .L4:
94:util/string.c **** _putc(string[i]);
95:util/string.c **** //softuart_putc('=');
96:util/string.c **** //softuart_putc(pgm_read_byte(pointer));
97:util/string.c **** //softuart_putnewline();
158 7,.LM6-.LFBB1
159 .LM6:
160 003e 892F mov r24,r25
161 /* epilogue start */
162 0040 0895 ret
170 .Lscope1:
174 .global string_compare_progmem_plen2
176 string_compare_progmem_plen2:
98:util/string.c **** _putc(string[i]);
99:util/string.c **** //softuart_putc('=');
177 7-.LFBB2
178 .LM7:
179 .LFBB2:
180 /* prologue: function */
181 /* frame size = 0 */
182 0042 A82F mov r26,r24
184 .LM8:
185 0044 E82F mov r30,r24
186 0046 F92F mov r31,r25
187 0048 9F01 movw r18,r30
188 004a 00C0 rjmp .L11
189 .L14:
190 .LBB3:
100:util/string.c **** k_eof){
101:util/string.c **** unsigned char i=0;
102:util/string.c **** while(pgm_read_byte(pointer)){
103:util/string.c **** //softuart_putc(string[i]);
104:util/string.c **** //softuart_putc('=');
105:util/string.c **** //softuart_putc(pgm_read_byte(pointer));
106:util/string.c **** //softuart_putnewline();
191 06,.LM9-.LFBB2
192 .LM9:
193 004c F901 movw r30,r18
194 /* #APP */
195 ; 106 "util/string.c" 1
196 004e 8491 lpm r24, Z
197
198 ; 0 "" 2
199 /* #NOAPP */
200 0050 6150 subi r22,lo8(-(-1))
201 0052 7040 sbci r23,hi8(-(-1))
202 .LBE3:
203 0054 FA01 movw r30,r20
204 0056 E90F add r30,r25
205 0058 F11D adc r31,__zero_reg__
206 005a 9081 ld r25,Z
207 005c 9817 cp r25,r24
208 005e 01F0 breq .L12
209 0060 80E0 ldi r24,lo8(0)
210 0062 0895 ret
211 .L12:
107:util/string.c **** _putc(string[i]);
108:util/string.c **** //softuart_putc('=');
109:util/string.c **** //softuart_putc(pgm_read_byte(pointer));
110:util/string.c **** //softuart_putnewline();
111:util/string.c **** if (string[i] != pgm_read_byte(pointer))
112:util/string.c **** return 0;
212 0-.LFBB2
213 .LM10:
214 0064 2F5F subi r18,lo8(-(1))
215 0066 3F4F sbci r19,hi8(-(1))
216 .L11:
217 0068 922F mov r25,r18
218 006a 9A1B sub r25,r26
220 .LM11:
221 006c 6115 cp r22,__zero_reg__
222 006e 7105 cpc r23,__zero_reg__
223 0070 01F4 brne .L14
224 0072 81E0 ldi r24,lo8(1)
113:util/string.c **** c(pgm_read_byte(pointer));
114:util/string.c **** //softuart_putnewline();
115:util/string.c **** if (string[i] != pgm_read_byte(pointer))
116:util/string.c **** return 0;
225 116,.LM12-.LFBB2
226 .LM12:
227 0074 0895 ret
235 .Lscope2:
239 .global string_uint16_to_buffer
241 string_uint16_to_buffer:
117:util/string.c **** c(pgm_read_byte(pointer));
118:util/string.c **** //softuart_putnewline();
242 .LM13-.LFBB3
243 .LM13:
244 .LFBB3:
245 0076 FF92 push r15
246 0078 0F93 push r16
247 007a 1F93 push r17
248 007c CF93 push r28
249 007e DF93 push r29
250 /* prologue: function */
251 /* frame size = 0 */
252 0080 8C01 movw r16,r24
253 0082 EB01 movw r28,r22
255 .LM14:
256 0084 40E0 ldi r20,lo8(0)
257 0086 20E1 ldi r18,lo8(10000)
258 0088 37E2 ldi r19,hi8(10000)
119:util/string.c **** _putc(string[i]);
120:util/string.c **** //softuart_putc('=');
121:util/string.c **** //softuart_putc(pgm_read_byte(pointer));
122:util/string.c **** //softuart_putnewline();
259 .LM15-.LFBB3
260 .LM15:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -