📄 main.lst
字号:
1 .file "main.c"
2 .arch atmega8
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
75 .global usart_putchar
77 usart_putchar:
1:main.c **** /*
2:main.c **** avr-libc 标准 i/o 流测试程序
3:main.c **** main.c
4:main.c **** MCU:atmega8
5:main.c ****
6:main.c **** 芯艺 2004-09-09
7:main.c **** */
8:main.c ****
9:main.c **** #include <avr/io.h>
10:main.c **** #include <avr/pgmspace.h>
11:main.c **** #include <stdio.h>
12:main.c ****
13:main.c **** char g_aString[81];
14:main.c ****
15:main.c **** //
16:main.c **** int usart_putchar(char c)
17:main.c **** {
79 .LM1:
80 /* prologue: frame size=0 */
81 0000 CF93 push r28
82 /* prologue end (size=1) */
83 0002 C82F mov r28,r24
18:main.c **** if(c=='\n')
85 .LM2:
86 0004 8A30 cpi r24,lo8(10)
87 0006 11F4 brne .L4
19:main.c **** usart_putchar('\r');
89 .LM3:
90 0008 8DE0 ldi r24,lo8(13)
91 000a FADF rcall usart_putchar
92 .L4:
20:main.c **** loop_until_bit_is_set(UCSRA,UDRE);
94 .LM4:
95 000c 5D9B sbis 43-0x20,5
96 000e FECF rjmp .L4
21:main.c **** UDR=c;
98 .LM5:
99 0010 CCB9 out 44-0x20,r28
22:main.c **** return 0;
23:main.c **** }
101 .LM6:
102 0012 80E0 ldi r24,lo8(0)
103 0014 90E0 ldi r25,hi8(0)
104 /* epilogue: frame size=0 */
105 0016 CF91 pop r28
106 0018 0895 ret
107 /* epilogue end (size=2) */
108 /* function usart_putchar size 13 (10) */
111 .global usart_getchar
113 usart_getchar:
24:main.c **** //
25:main.c **** int usart_getchar(void)
26:main.c **** {
115 .LM7:
116 /* prologue: frame size=0 */
117 /* prologue end (size=0) */
118 .L8:
27:main.c **** loop_until_bit_is_set(UCSRA,RXC);
120 .LM8:
121 001a 5F9B sbis 43-0x20,7
122 001c FECF rjmp .L8
28:main.c **** return UDR;
124 .LM9:
125 001e 8CB1 in r24,44-0x20
29:main.c **** }
127 .LM10:
128 0020 9927 clr r25
129 /* epilogue: frame size=0 */
130 0022 0895 ret
131 /* epilogue end (size=1) */
132 /* function usart_getchar size 5 (4) */
135 .global IoInit
137 IoInit:
30:main.c ****
31:main.c **** void IoInit(void)
32:main.c **** {
139 .LM11:
140 /* prologue: frame size=0 */
141 /* prologue end (size=0) */
33:main.c **** //UART初始化
34:main.c **** UCSRB=_BV(RXEN)|_BV(TXEN);/*(1<<RXCIE)|(1<<TXCIE)|*/
143 .LM12:
144 0024 88E1 ldi r24,lo8(24)
145 0026 8AB9 out 42-0x20,r24
35:main.c **** UBRRL=25; //9600 baud 6MHz:38 4MHz:25
147 .LM13:
148 0028 89E1 ldi r24,lo8(25)
149 002a 89B9 out 41-0x20,r24
36:main.c ****
37:main.c **** //i/o流UART连接
38:main.c **** fdevopen(usart_putchar,usart_getchar,0);
151 .LM14:
152 002c 40E0 ldi r20,lo8(0)
153 002e 50E0 ldi r21,hi8(0)
154 0030 60E0 ldi r22,lo8(pm(usart_getchar))
155 0032 70E0 ldi r23,hi8(pm(usart_getchar))
156 0034 80E0 ldi r24,lo8(pm(usart_putchar))
157 0036 90E0 ldi r25,hi8(pm(usart_putchar))
158 0038 00D0 rcall fdevopen
159 /* epilogue: frame size=0 */
160 003a 0895 ret
161 /* epilogue end (size=1) */
162 /* function IoInit size 12 (11) */
164 .section .progmem.data,"a",@progbits
167 __c.0:
168 0000 B2E2 CAD4 .string "\262\342\312\3243[\312\344\310\353\312\375\327\326]:\n"
168 335B CAE4
168 C8EB CAFD
168 D7D6 5D3A
168 0A00
171 __c.1:
172 0012 2564 00 .string "%d"
175 __c.2:
176 0015 C4FA B5C4 .string "\304\372\265\304\312\344\310\353\316\252:%d\n"
176 CAE4 C8EB
176 CEAA 3A25
176 640A 00
177 .data
178 .LC0:
179 0000 B2E2 CAD4 .string "\262\342\312\3241[\312\344\310\353\312\375\327\326]:\n"
179 315B CAE4
179 C8EB CAFD
179 D7D6 5D3A
179 0A00
180 .LC1:
181 0012 2564 00 .string "%d"
182 .LC2:
183 0015 C4FA B5C4 .string "\304\372\265\304\312\344\310\353\316\252:%d\n"
183 CAE4 C8EB
183 CEAA 3A25
183 640A 00
184 .LC3:
185 0024 B2E2 CAD4 .string "\262\342\312\3242[\312\344\310\353\322\273\327\326\267\373\264\256]:"
185 325B CAE4
185 C8EB D2BB
185 D7D6 B7FB
185 B4AE 5D3A
186 .LC4:
187 0039 2573 00 .string "%s"
188 .LC5:
189 003c C4FA B5C4 .string "\304\372\265\304\312\344\310\353\316\252:%s\n"
189 CAE4 C8EB
189 CEAA 3A25
189 730A 00
190 .text
192 .global main
194 main:
39:main.c **** }
40:main.c ****
41:main.c **** int main(void)
42:main.c **** {
196 .LM15:
197 /* prologue: frame size=2 */
198 003c C0E0 ldi r28,lo8(__stack - 2)
199 003e D0E0 ldi r29,hi8(__stack - 2)
200 0040 DEBF out __SP_H__,r29
201 0042 CDBF out __SP_L__,r28
202 /* prologue end (size=4) */
43:main.c **** int tmp;
44:main.c ****
45:main.c **** IoInit();
204 .LM16:
205 0044 EFDF rcall IoInit
206 .L13:
46:main.c ****
47:main.c **** while(1)
48:main.c **** {
49:main.c **** tmp=0xffff;//如果没有这条语句,vfprintf/vfscanf工作不正常,可能是vfprintf/vfscanf的bug.
208 .LM17:
209 0046 8FEF ldi r24,lo8(-1)
210 0048 9FEF ldi r25,hi8(-1)
211 004a 8983 std Y+1,r24
212 004c 9A83 std Y+2,r25
50:main.c ****
51:main.c **** //测试1
52:main.c **** vfprintf(stdout,"测试1[输入数字]:\n",0);
214 .LM18:
215 004e 40E0 ldi r20,lo8(0)
216 0050 50E0 ldi r21,hi8(0)
217 0052 60E0 ldi r22,lo8(.LC0)
218 0054 70E0 ldi r23,hi8(.LC0)
219 0056 8091 0000 lds r24,__iob+2
220 005a 9091 0000 lds r25,(__iob+2)+1
221 005e 00D0 rcall vfprintf
53:main.c **** vfscanf(stdin,"%d",&tmp);
223 .LM19:
224 0060 AE01 movw r20,r28
225 0062 4F5F subi r20,lo8(-(1))
226 0064 5F4F sbci r21,hi8(-(1))
227 0066 60E0 ldi r22,lo8(.LC1)
228 0068 70E0 ldi r23,hi8(.LC1)
229 006a 8091 0000 lds r24,__iob
230 006e 9091 0000 lds r25,(__iob)+1
231 0072 00D0 rcall vfscanf
54:main.c **** vfprintf(stdout,"您的输入为:%d\n",tmp);
233 .LM20:
234 0074 4981 ldd r20,Y+1
235 0076 5A81 ldd r21,Y+2
236 0078 60E0 ldi r22,lo8(.LC2)
237 007a 70E0 ldi r23,hi8(.LC2)
238 007c 8091 0000 lds r24,__iob+2
239 0080 9091 0000 lds r25,(__iob+2)+1
240 0084 00D0 rcall vfprintf
55:main.c ****
56:main.c **** //测试2
57:main.c **** printf("测试2[输入一字符串]:\n");
242 .LM21:
243 0086 80E0 ldi r24,lo8(.LC3)
244 0088 90E0 ldi r25,hi8(.LC3)
245 008a 00D0 rcall puts
58:main.c **** scanf("%s",g_aString);
247 .LM22:
248 008c 00E0 ldi r16,lo8(g_aString)
249 008e 10E0 ldi r17,hi8(g_aString)
250 0090 1F93 push r17
251 0092 0F93 push r16
252 0094 80E0 ldi r24,lo8(.LC4)
253 0096 90E0 ldi r25,hi8(.LC4)
254 0098 9F93 push r25
255 009a 8F93 push r24
256 009c 00D0 rcall scanf
59:main.c **** printf("您的输入为:%s\n",g_aString);
258 .LM23:
259 009e 1F93 push r17
260 00a0 0F93 push r16
261 00a2 80E0 ldi r24,lo8(.LC5)
262 00a4 90E0 ldi r25,hi8(.LC5)
263 00a6 9F93 push r25
264 00a8 8F93 push r24
265 00aa 00D0 rcall printf
60:main.c ****
61:main.c **** //测试3
62:main.c **** printf_P(PSTR("测试3[输入数字]:\n"));
267 .LM24:
268 00ac 8DB7 in r24,__SP_L__
269 00ae 9EB7 in r25,__SP_H__
270 00b0 0896 adiw r24,8
271 00b2 0FB6 in __tmp_reg__,__SREG__
272 00b4 F894 cli
273 00b6 9EBF out __SP_H__,r25
274 00b8 0FBE out __SREG__,__tmp_reg__
275 00ba 8DBF out __SP_L__,r24
276 00bc 80E0 ldi r24,lo8(__c.0)
277 00be 90E0 ldi r25,hi8(__c.0)
278 00c0 9F93 push r25
279 00c2 8F93 push r24
280 00c4 00D0 rcall printf_P
63:main.c **** scanf_P(PSTR("%d"),&tmp);
282 .LM25:
283 00c6 0F90 pop __tmp_reg__
284 00c8 0F90 pop __tmp_reg__
285 00ca CE01 movw r24,r28
286 00cc 0196 adiw r24,1
287 00ce 9F93 push r25
288 00d0 8F93 push r24
289 00d2 80E0 ldi r24,lo8(__c.1)
290 00d4 90E0 ldi r25,hi8(__c.1)
291 00d6 9F93 push r25
292 00d8 8F93 push r24
293 00da 00D0 rcall scanf_P
64:main.c **** printf_P(PSTR("您的输入为:%d\n"),tmp);
295 .LM26:
296 00dc 0F90 pop __tmp_reg__
297 00de 0F90 pop __tmp_reg__
298 00e0 0F90 pop __tmp_reg__
299 00e2 0F90 pop __tmp_reg__
300 00e4 8981 ldd r24,Y+1
301 00e6 9A81 ldd r25,Y+2
302 00e8 9F93 push r25
303 00ea 8F93 push r24
304 00ec 80E0 ldi r24,lo8(__c.2)
305 00ee 90E0 ldi r25,hi8(__c.2)
306 00f0 9F93 push r25
307 00f2 8F93 push r24
308 00f4 00D0 rcall printf_P
309 00f6 0F90 pop __tmp_reg__
310 00f8 0F90 pop __tmp_reg__
311 00fa 0F90 pop __tmp_reg__
312 00fc 0F90 pop __tmp_reg__
313 00fe A3CF rjmp .L13
314 /* epilogue: frame size=2 */
315 /* epilogue: noreturn */
316 /* epilogue end (size=0) */
317 /* function main size 98 (94) */
320 .comm g_aString,81,1
322 .text
324 Letext:
325 /* File "main.c": code 128 = 0x0080 ( 119), prologues 5, epilogues 4 */
DEFINED SYMBOLS
*ABS*:00000000 main.c
*ABS*:0000003f __SREG__
*ABS*:0000003e __SP_H__
*ABS*:0000003d __SP_L__
*ABS*:00000000 __tmp_reg__
*ABS*:00000001 __zero_reg__
J:\DOCUME~1\tcf\LOCALS~1\Temp/ccodaaaa.s:77 .text:00000000 usart_putchar
J:\DOCUME~1\tcf\LOCALS~1\Temp/ccodaaaa.s:113 .text:0000001a usart_getchar
J:\DOCUME~1\tcf\LOCALS~1\Temp/ccodaaaa.s:137 .text:00000024 IoInit
J:\DOCUME~1\tcf\LOCALS~1\Temp/ccodaaaa.s:167 .progmem.data:00000000 __c.0
J:\DOCUME~1\tcf\LOCALS~1\Temp/ccodaaaa.s:171 .progmem.data:00000012 __c.1
J:\DOCUME~1\tcf\LOCALS~1\Temp/ccodaaaa.s:175 .progmem.data:00000015 __c.2
J:\DOCUME~1\tcf\LOCALS~1\Temp/ccodaaaa.s:194 .text:0000003c main
*COM*:00000051 g_aString
J:\DOCUME~1\tcf\LOCALS~1\Temp/ccodaaaa.s:324 .text:00000100 Letext
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
fdevopen
__stack
__iob
vfprintf
vfscanf
puts
scanf
printf
printf_P
scanf_P
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -