?? cc1100_test.lst
字號:
035C F451 BNE 0x0367
035D 2011 TST R1
035E F441 BNE 0x0367
035F A92E LDD R18,Y+54
0360 A93F LDD R19,Y+55
0361 AD08 LDD R16,Y+56
0362 924F PUSH R4
0363 925F PUSH R5
0364 DEF6 RCALL _PutRepChar
0365 905F POP R5
0366 904F POP R4
(0142) PutStringReverse(buffer, bi);
0367 0192 MOVW R18,R4
0368 018E MOVW R16,R28
0369 DF00 RCALL _PutStringReverse
(0143) if (left) PutRepChar(fill, width);
036A A408 LDD R0,Y+40
036B A419 LDD R1,Y+41
036C 2000 TST R0
036D F411 BNE 0x0370
036E 2011 TST R1
036F F021 BEQ 0x0374
0370 A92E LDD R18,Y+54
0371 A93F LDD R19,Y+55
0372 AD08 LDD R16,Y+56
0373 DEE7 RCALL _PutRepChar
(0144) }
0374 96AA ADIW R28,0x2A
0375 D4AF RCALL pop_gset5
0376 9622 ADIW R28,2
0377 9508 RET
_FormatItem:
fill --> R14
leftjust --> R20
fieldwidth --> Y+3
radix --> R10
c --> R12
a --> Y+17
f --> Y+15
0378 D475 RCALL push_arg4
0379 D4AD RCALL push_gset5
037A 9725 SBIW R28,5
(0145) }
(0146)
(0147)
(0148) static char *FormatItem(char *f, int a)
(0149) {
(0150) char c;
(0151) int fieldwidth = 0;
037B 2400 CLR R0
037C 2411 CLR R1
037D 821C STD Y+4,R1
037E 820B STD Y+3,R0
(0152) int leftjust = FALSE;
037F 2744 CLR R20
0380 2755 CLR R21
(0153) int radix = 0;
0381 24AA CLR R10
0382 24BB CLR R11
(0154) char fill = ' ';
0383 E280 LDI R24,0x20
0384 2EE8 MOV R14,R24
(0155)
(0156) if (*f == '0') fill = '0';
0385 85EF LDD R30,Y+15
0386 89F8 LDD R31,Y+16
0387 8180 LDD R24,Z+0
0388 3380 CPI R24,0x30
0389 F009 BEQ 0x038B
038A C0D1 RJMP 0x045C
038B E380 LDI R24,0x30
038C 2EE8 MOV R14,R24
038D C0CE RJMP 0x045C
(0157) while ((c = *f++)!=0)
(0158) {
(0159) if (c >= '0' && c <= '9')
038E 2D8C MOV R24,R12
038F 3380 CPI R24,0x30
0390 F088 BCS 0x03A2
0391 E389 LDI R24,0x39
0392 158C CP R24,R12
0393 F070 BCS 0x03A2
(0160) {
(0161) fieldwidth = (fieldwidth * 10) + (c - '0');
0394 E00A LDI R16,0xA
0395 E010 LDI R17,0
0396 812B LDD R18,Y+3
0397 813C LDD R19,Y+4
0398 D476 RCALL empy16s
0399 0118 MOVW R2,R16
039A 2D8C MOV R24,R12
039B 2799 CLR R25
039C 97C0 SBIW R24,0x30
039D 0E28 ADD R2,R24
039E 1E39 ADC R3,R25
039F 823C STD Y+4,R3
03A0 822B STD Y+3,R2
(0162) }
03A1 C0B5 RJMP 0x0457
(0163) else
(0164) {
(0165) switch (c)
03A2 2D6C MOV R22,R12
03A3 2777 CLR R23
03A4 3568 CPI R22,0x58
03A5 E0E0 LDI R30,0
03A6 077E CPC R23,R30
03A7 F409 BNE 0x03A9
03A8 C0A3 RJMP 0x044C
03A9 E588 LDI R24,0x58
03AA E090 LDI R25,0
03AB 1786 CP R24,R22
03AC 0797 CPC R25,R23
03AD F0AC BLT 0x03C3
03AE 3265 CPI R22,0x25
03AF E0E0 LDI R30,0
03B0 077E CPC R23,R30
03B1 F409 BNE 0x03B3
03B2 C046 RJMP 0x03F9
03B3 E285 LDI R24,0x25
03B4 E090 LDI R25,0
03B5 1786 CP R24,R22
03B6 0797 CPC R25,R23
03B7 F02C BLT 0x03BD
03B8 3060 CPI R22,0
03B9 0767 CPC R22,R23
03BA F409 BNE 0x03BC
03BB C036 RJMP 0x03F2
03BC C097 RJMP 0x0454
03BD 326D CPI R22,0x2D
03BE E0E0 LDI R30,0
03BF 077E CPC R23,R30
03C0 F409 BNE 0x03C2
03C1 C03C RJMP 0x03FE
03C2 C091 RJMP 0x0454
03C3 3669 CPI R22,0x69
03C4 E0E0 LDI R30,0
03C5 077E CPC R23,R30
03C6 F409 BNE 0x03C8
03C7 C078 RJMP 0x0440
03C8 E689 LDI R24,0x69
03C9 E090 LDI R25,0
03CA 1786 CP R24,R22
03CB 0797 CPC R25,R23
03CC F05C BLT 0x03D8
03CD 3663 CPI R22,0x63
03CE E0E0 LDI R30,0
03CF 077E CPC R23,R30
03D0 F409 BNE 0x03D2
03D1 C02F RJMP 0x0401
03D2 3664 CPI R22,0x64
03D3 E0E0 LDI R30,0
03D4 077E CPC R23,R30
03D5 F409 BNE 0x03D7
03D6 C069 RJMP 0x0440
03D7 C07C RJMP 0x0454
03D8 366F CPI R22,0x6F
03D9 E0E0 LDI R30,0
03DA 077E CPC R23,R30
03DB F409 BNE 0x03DD
03DC C073 RJMP 0x0450
03DD 366F CPI R22,0x6F
03DE E0E0 LDI R30,0
03DF 077E CPC R23,R30
03E0 F40C BGE 0x03E2
03E1 C072 RJMP 0x0454
03E2 3763 CPI R22,0x73
03E3 E0E0 LDI R30,0
03E4 077E CPC R23,R30
03E5 F409 BNE 0x03E7
03E6 C039 RJMP 0x0420
03E7 3765 CPI R22,0x75
03E8 E0E0 LDI R30,0
03E9 077E CPC R23,R30
03EA F409 BNE 0x03EC
03EB C058 RJMP 0x0444
03EC 3768 CPI R22,0x78
03ED E0E0 LDI R30,0
03EE 077E CPC R23,R30
03EF F409 BNE 0x03F1
03F0 C057 RJMP 0x0448
03F1 C062 RJMP 0x0454
(0166) {
(0167) case '\000':
(0168) return(--f);
03F2 858F LDD R24,Y+15
03F3 8998 LDD R25,Y+16
03F4 9701 SBIW R24,1
03F5 8B98 STD Y+16,R25
03F6 878F STD Y+15,R24
03F7 018C MOVW R16,R24
03F8 C082 RJMP 0x047B
(0169) case '%':
(0170) putchar('%');
03F9 E205 LDI R16,0x25
03FA DE34 RCALL _putchar
(0171) return(f);
03FB 850F LDD R16,Y+15
03FC 8918 LDD R17,Y+16
03FD C07D RJMP 0x047B
(0172) case '-': leftjust = TRUE;
03FE E041 LDI R20,1
03FF E050 LDI R21,0
(0173) break;
0400 C056 RJMP 0x0457
(0174) case 'c':
(0175) {
(0176) if (leftjust) putchar(a & 0x7f);
0401 3040 CPI R20,0
0402 0745 CPC R20,R21
0403 F029 BEQ 0x0409
0404 8909 LDD R16,Y+17
0405 891A LDD R17,Y+18
0406 770F ANDI R16,0x7F
0407 7010 ANDI R17,0
0408 DE26 RCALL _putchar
(0177) if (fieldwidth > 0) PutRepChar(fill, fieldwidth - 1);
0409 2422 CLR R2
040A 2433 CLR R3
040B 800B LDD R0,Y+3
040C 801C LDD R1,Y+4
040D 1420 CP R2,R0
040E 0431 CPC R3,R1
040F F42C BGE 0x0415
0410 0190 MOVW R18,R0
0411 5021 SUBI R18,1
0412 4030 SBCI R19,0
0413 2D0E MOV R16,R14
0414 DE46 RCALL _PutRepChar
(0178) if (!leftjust) putchar(a & 0x7f);
0415 3040 CPI R20,0
0416 0745 CPC R20,R21
0417 F429 BNE 0x041D
0418 8909 LDD R16,Y+17
0419 891A LDD R17,Y+18
041A 770F ANDI R16,0x7F
041B 7010 ANDI R17,0
041C DE12 RCALL _putchar
(0179) return(f);
041D 850F LDD R16,Y+15
041E 8918 LDD R17,Y+16
041F C05B RJMP 0x047B
(0180) }
(0181) case 's':
(0182) {
(0183) if (leftjust) putstr((char *) a);
0420 3040 CPI R20,0
0421 0745 CPC R20,R21
0422 F019 BEQ 0x0426
0423 8909 LDD R16,Y+17
0424 891A LDD R17,Y+18
0425 DE19 RCALL _putstr
(0184) if (fieldwidth > strlen((char *) a))
0426 8909 LDD R16,Y+17
0427 891A LDD R17,Y+18
0428 DE23 RCALL _strlen
0429 800B LDD R0,Y+3
042A 801C LDD R1,Y+4
042B 1500 CP R16,R0
042C 0511 CPC R17,R1
042D F44C BGE 0x0437
(0185) PutRepChar(fill, fieldwidth - strlen((char *)a));
042E 8909 LDD R16,Y+17
042F 891A LDD R17,Y+18
0430 DE1B RCALL _strlen
0431 812B LDD R18,Y+3
0432 813C LDD R19,Y+4
0433 1B20 SUB R18,R16
0434 0B31 SBC R19,R17
0435 2D0E MOV R16,R14
0436 DE24 RCALL _PutRepChar
(0186) if (!leftjust) putstr((char *) a);
0437 3040 CPI R20,0
0438 0745 CPC R20,R21
0439 F419 BNE 0x043D
043A 8909 LDD R16,Y+17
043B 891A LDD R17,Y+18
043C DE02 RCALL _putstr
(0187) return(f);
043D 850F LDD R16,Y+15
043E 8918 LDD R17,Y+16
043F C03B RJMP 0x047B
(0188) }
(0189) case 'd':
(0190) case 'i':
(0191) radix = -10;break;
0440 EF86 LDI R24,0xF6
0441 EF9F LDI R25,0xFF
0442 015C MOVW R10,R24
0443 C013 RJMP 0x0457
(0192) case 'u':
(0193) radix = 10;break;
0444 E08A LDI R24,0xA
0445 E090 LDI R25,0
0446 015C MOVW R10,R24
0447 C00F RJMP 0x0457
(0194) case 'x':
(0195) radix = 16;break;
0448 E180 LDI R24,0x10
0449 E090 LDI R25,0
044A 015C MOVW R10,R24
044B C00B RJMP 0x0457
(0196) case 'X':
(0197) radix = 16;break;
044C E180 LDI R24,0x10
044D E090 LDI R25,0
044E 015C MOVW R10,R24
044F C007 RJMP 0x0457
(0198) case 'o':
(0199) radix = 8;break;
0450 E088 LDI R24,0x8
0451 E090 LDI R25,0
0452 015C MOVW R10,R24
0453 C003 RJMP 0x0457
(0200) default :
(0201) radix = 3;break;/* unknown switch! */
0454 E083 LDI R24,3
0455 E090 LDI R25,0
0456 015C MOVW R10,R24
(0202) }
(0203) }
(0204) if (radix) break;
0457 20AA TST R10
0458 F411 BNE 0x045B
0459 20BB TST R11
045A F009 BEQ 0x045C
045B C009 RJMP 0x0465
045C 85EF LDD R30,Y+15
045D 89F8 LDD R31,Y+16
045E 9021 LD R2,Z+
045F 8BF8 STD Y+16,R31
0460 87EF STD Y+15,R30
0461 2CC2 MOV R12,R2
0462 20CC TST R12
0463 F009 BEQ 0x0465
0464 CF29 RJMP 0x038E
(0205) }
(0206) if (leftjust) fieldwidth = -fieldwidth;
0465 3040 CPI R20,0
0466 0745 CPC R20,R21
0467 F041 BEQ 0x0470
0468 818B LDD R24,Y+3
0469 819C LDD R25,Y+4
046A 9580 COM R24
046B 9590 COM R25
046C 5F8F SUBI R24,0xFF
046D 4F9F SBCI R25,0xFF
046E 839C STD Y+4,R25
046F 838B STD Y+3,R24
(0207) PutNumber(a, radix, fieldwidth, fill);
0470 82EA STD Y+2,R14
0471 800B LDD R0,Y+3
0472 801C LDD R1,Y+4
0473 8219 STD Y+1,R1
0474 8208 STD Y+0,R0
0475 0195 MOVW R18,R10
0476 8909 LDD R16,Y+17
0477 891A LDD R17,Y+18
0478 DE04 RCALL _PutNumber
(0208) return(f);
0479 850F LDD R16,Y+15
047A 8918 LDD R17,Y+16
047B 9625 ADIW R28,5
047C D3A8 RCALL pop_gset5
047D 9624 ADIW R28,4
047E 9508 RET
_printf:
argP --> R20
f --> Y+2
047F D36E RCALL push_arg4
0480 D3AE RCALL push_gset1
(0209) }
(0210)
(0211) #define vaStart(list, param) list = (char*)((int)¶m + sizeof(param))
(0212) #define vaArg(list, type) ((type *)(list += sizeof(type)))[-1]
(0213) #define vaEnd(list)
(0214)
(0215) void printf(char *f, ...) /* variable arguments */
(0216) {
(0217) char *argP;
(0218)
(0219) vaStart(argP,f); /* point at the end of the format string */
0481 01AE MOVW R20,R28
0482 5F4E SUBI R20,0xFE
0483 4F5F SBCI R21,0xFF
0484 5F4E SUBI R20,0xFE
0485 4F5F SBCI R21,0xFF
0486 C01A RJMP 0x04A1
(0220) while (*f)
(0221) { /* this works because args are all ints */
(0222) if (*f == '%')
0487 81EA LDD R30,Y+2
0488 81FB LDD R31,Y+3
0489 8180 LDD R24,Z+0
048A 3285 CPI R24,0x25
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -