?? simpleio.lis
字號:
0328 L96:
0328 6936 cpi R22,105
032A E0E0 ldi R30,0
032C 7E07 cpc R23,R30
032E 09F4 brne X23
0330 78C0 rjmp L90
0332 X23:
0332 89E6 ldi R24,105
0334 90E0 ldi R25,0
0336 8617 cp R24,R22
0338 9707 cpc R25,R23
033A 5CF0 brlt L100
033C L99:
033C 6336 cpi R22,99
033E E0E0 ldi R30,0
0340 7E07 cpc R23,R30
0342 09F4 brne X24
0344 2FC0 rjmp L76
0346 X24:
0346 6436 cpi R22,100
0348 E0E0 ldi R30,0
034A 7E07 cpc R23,R30
034C 09F4 brne X25
034E 69C0 rjmp L90
0350 X25:
0350 7CC0 rjmp L70
0352 L100:
0352 6F36 cpi R22,111
0354 E0E0 ldi R30,0
0356 7E07 cpc R23,R30
0358 09F4 brne X26
035A 73C0 rjmp L94
035C X26:
035C 6F36 cpi R22,111
035E E0E0 ldi R30,0
0360 7E07 cpc R23,R30
0362 0CF4 brge X27
0364 72C0 rjmp L70
0366 X27:
0366 L101:
0366 6337 cpi R22,115
0368 E0E0 ldi R30,0
036A 7E07 cpc R23,R30
036C 09F4 brne X28
036E 39C0 rjmp L83
0370 X28:
0370 6537 cpi R22,117
0372 E0E0 ldi R30,0
0374 7E07 cpc R23,R30
0376 09F4 brne X29
0378 58C0 rjmp L91
037A X29:
037A 6837 cpi R22,120
037C E0E0 ldi R30,0
037E 7E07 cpc R23,R30
0380 09F4 brne X30
0382 57C0 rjmp L92
0384 X30:
0384 62C0 rjmp L70
0386 X11:
0386 .dbline 166
0386 ; {
0386 L73:
0386 .dbline 168
0386 ; case '\000':
0386 ; return(--f);
0386 8F85 ldd R24,y+15
0388 9889 ldd R25,y+16
038A 0197 sbiw R24,1
038C 988B std y+16,R25
038E 8F87 std y+15,R24
0390 8C01 movw R16,R24
0392 82C0 rjmp L62
0394 L74:
0394 .dbline 170
0394 ; case '%':
0394 ; putchar('%');
0394 05E2 ldi R16,37
0396 34DE rcall _putchar
0398 .dbline 171
0398 ; return(f);
0398 0F85 ldd R16,y+15
039A 1889 ldd R17,y+16
039C 7DC0 rjmp L62
039E L75:
039E .dbline 172
039E ; case '-': leftjust = TRUE;
039E 41E0 ldi R20,1
03A0 50E0 ldi R21,0
03A2 .dbline 173
03A2 ; break;
03A2 56C0 rjmp L71
03A4 L76:
03A4 .dbline 175
03A4 ; case 'c':
03A4 ; {
03A4 .dbline 176
03A4 ; if (leftjust) putchar(a & 0x7f);
03A4 4030 cpi R20,0
03A6 4507 cpc R20,R21
03A8 29F0 breq L77
03AA X12:
03AA .dbline 176
03AA 0989 ldd R16,y+17
03AC 1A89 ldd R17,y+18
03AE 0F77 andi R16,127
03B0 1070 andi R17,0
03B2 26DE rcall _putchar
03B4 L77:
03B4 .dbline 177
03B4 ; if (fieldwidth > 0) PutRepChar(fill, fieldwidth - 1);
03B4 2224 clr R2
03B6 3324 clr R3
03B8 0B80 ldd R0,y+3
03BA 1C80 ldd R1,y+4
03BC 2014 cp R2,R0
03BE 3104 cpc R3,R1
03C0 2CF4 brge L79
03C2 .dbline 177
03C2 9001 movw R18,R0
03C4 2150 subi R18,1
03C6 3040 sbci R19,0
03C8 0E2D mov R16,R14
03CA 46DE rcall _PutRepChar
03CC L79:
03CC .dbline 178
03CC ; if (!leftjust) putchar(a & 0x7f);
03CC 4030 cpi R20,0
03CE 4507 cpc R20,R21
03D0 29F4 brne L81
03D2 X13:
03D2 .dbline 178
03D2 0989 ldd R16,y+17
03D4 1A89 ldd R17,y+18
03D6 0F77 andi R16,127
03D8 1070 andi R17,0
03DA 12DE rcall _putchar
03DC L81:
03DC .dbline 179
03DC ; return(f);
03DC 0F85 ldd R16,y+15
03DE 1889 ldd R17,y+16
03E0 5BC0 rjmp L62
03E2 L83:
03E2 .dbline 182
03E2 ; }
03E2 ; case 's':
03E2 ; {
03E2 .dbline 183
03E2 ; if (leftjust) putstr((char *) a);
03E2 4030 cpi R20,0
03E4 4507 cpc R20,R21
03E6 19F0 breq L84
03E8 X14:
03E8 .dbline 183
03E8 0989 ldd R16,y+17
03EA 1A89 ldd R17,y+18
03EC 19DE rcall _putstr
03EE L84:
03EE .dbline 184
03EE ; if (fieldwidth > strlen((char *) a))
03EE 0989 ldd R16,y+17
03F0 1A89 ldd R17,y+18
03F2 23DE rcall _strlen
03F4 0B80 ldd R0,y+3
03F6 1C80 ldd R1,y+4
03F8 0015 cp R16,R0
03FA 1105 cpc R17,R1
03FC 4CF4 brge L86
03FE .dbline 185
03FE ; PutRepChar(fill, fieldwidth - strlen((char *)a));
03FE 0989 ldd R16,y+17
0400 1A89 ldd R17,y+18
0402 1BDE rcall _strlen
0404 2B81 ldd R18,y+3
0406 3C81 ldd R19,y+4
0408 201B sub R18,R16
040A 310B sbc R19,R17
040C 0E2D mov R16,R14
040E 24DE rcall _PutRepChar
0410 L86:
0410 .dbline 186
0410 ; if (!leftjust) putstr((char *) a);
0410 4030 cpi R20,0
0412 4507 cpc R20,R21
0414 19F4 brne L88
0416 X15:
0416 .dbline 186
0416 0989 ldd R16,y+17
0418 1A89 ldd R17,y+18
041A 02DE rcall _putstr
041C L88:
041C .dbline 187
041C ; return(f);
041C 0F85 ldd R16,y+15
041E 1889 ldd R17,y+16
0420 3BC0 rjmp L62
0422 L90:
0422 .dbline 191
0422 ; }
0422 ; case 'd':
0422 ; case 'i':
0422 ; radix = -10;break;
0422 86EF ldi R24,-10
0424 9FEF ldi R25,-1
0426 5C01 movw R10,R24
0428 .dbline 191
0428 13C0 rjmp L71
042A L91:
042A .dbline 193
042A ; case 'u':
042A ; radix = 10;break;
042A 8AE0 ldi R24,10
042C 90E0 ldi R25,0
042E 5C01 movw R10,R24
0430 .dbline 193
0430 0FC0 rjmp L71
0432 L92:
0432 .dbline 195
0432 ; case 'x':
0432 ; radix = 16;break;
0432 80E1 ldi R24,16
0434 90E0 ldi R25,0
0436 5C01 movw R10,R24
0438 .dbline 195
0438 0BC0 rjmp L71
043A L93:
043A .dbline 197
043A ; case 'X':
043A ; radix = 16;break;
043A 80E1 ldi R24,16
043C 90E0 ldi R25,0
043E 5C01 movw R10,R24
0440 .dbline 197
0440 07C0 rjmp L71
0442 L94:
0442 .dbline 199
0442 ; case 'o':
0442 ; radix = 8;break;
0442 88E0 ldi R24,8
0444 90E0 ldi R25,0
0446 5C01 movw R10,R24
0448 .dbline 199
0448 03C0 rjmp L71
044A L70:
044A .dbline 201
044A ; default :
044A ; radix = 3;break;/* unknown switch! */
044A 83E0 ldi R24,3
044C 90E0 ldi R25,0
044E 5C01 movw R10,R24
0450 .dbline 201
0450 L71:
0450 .dbline 203
0450 ; }
0450 ; }
0450 L69:
0450 .dbline 204
0450 ; if (radix) break;
0450 AA20 tst R10
0452 11F4 brne X16
0454 BB20 tst R11
0456 09F0 breq L102
0458 X16:
0458 .dbline 204
0458 09C0 rjmp L67
045A L102:
045A .dbline 205
045A L66:
045A .dbline 157
045A EF85 ldd R30,y+15
045C F889 ldd R31,y+16
045E 2190 ld R2,Z+
0460 F88B std y+16,R31
0462 EF87 std y+15,R30
0464 C22C mov R12,R2
0466 CC20 tst R12
0468 09F0 breq X31
046A 29CF rjmp L65
046C X31:
046C L67:
046C .dbline 206
046C ; }
046C ; if (leftjust) fieldwidth = -fieldwidth;
046C 4030 cpi R20,0
046E 4507 cpc R20,R21
0470 41F0 breq L104
0472 X17:
0472 .dbline 206
0472 8B81 ldd R24,y+3
0474 9C81 ldd R25,y+4
0476 8095 com R24
0478 9095 com R25
047A 8F5F subi R24,0xFF
047C 9F4F sbci R25,0xFF
047E 9C83 std y+4,R25
0480 8B83 std y+3,R24
0482 L104:
0482 .dbline 207
0482 ; PutNumber(a, radix, fieldwidth, fill);
0482 EA82 std y+2,R14
0484 0B80 ldd R0,y+3
0486 1C80 ldd R1,y+4
0488 1982 std y+1,R1
048A 0882 std y+0,R0
048C 9501 movw R18,R10
048E 0989 ldd R16,y+17
0490 1A89 ldd R17,y+18
0492 04DE rcall _PutNumber
0494 .dbline 208
0494 ; return(f);
0494 0F85 ldd R16,y+15
0496 1889 ldd R17,y+16
0498 .dbline -2
0498 L62:
0498 2596 adiw R28,5
049A 00D0 rcall pop_gset5
049C 2496 adiw R28,4
049E .dbline 0 ; func end
049E 0895 ret
04A0 .dbsym r fill 14 c
04A0 .dbsym r leftjust 20 I
04A0 .dbsym l fieldwidth 3 I
04A0 .dbsym r radix 10 I
04A0 .dbsym r c 12 c
04A0 .dbsym l a 17 I
04A0 .dbsym l f 15 pc
04A0 .dbend
04A0 .dbfunc e printf _printf fV
04A0 ; argP -> R20,R21
04A0 ; f -> y+2
.even
04A0 _printf::
04A0 00D0 rcall push_arg4
04A2 00D0 rcall push_gset1
04A4 .dbline -1
04A4 .dbline 216
04A4 ; }
04A4 ;
04A4 ; #define vaStart(list, param) list = (char*)((int)¶m + sizeof(param))
04A4 ; #define vaArg(list, type) ((type *)(list += sizeof(type)))[-1]
04A4 ; #define vaEnd(list)
04A4 ;
04A4 ; void printf(char *f, ...) /* variable arguments */
04A4 ; {
04A4 .dbline 219
04A4 ; char *argP;
04A4 ;
04A4 ; vaStart(argP,f); /* point at the end of the format string */
04A4 AE01 movw R20,R28
04A6 4E5F subi R20,254 ; offset = 2
04A8 5F4F sbci R21,255
04AA 4E5F subi R20,254 ; offset = 2
04AC 5F4F sbci R21,255
04AE 1AC0 rjmp L108
04B0 L107:
04B0 .dbline 221
04B0 ; while (*f)
04B0 ; { /* this works because args are all ints */
04B0 .dbline 222
04B0 ; if (*f == '%')
04B0 EA81 ldd R30,y+2
04B2 FB81 ldd R31,y+3
04B4 8081 ldd R24,z+0
04B6 8532 cpi R24,37
04B8 79F4 brne L110
04BA .dbline 223
04BA ; f = FormatItem(f + 1, vaArg(argP, int));
04BA CA01 movw R24,R20
04BC 0296 adiw R24,2
04BE AC01 movw R20,R24
04C0 FC01 movw R30,R24
04C2 3297 sbiw R30,2
04C4 2081 ldd R18,z+0
04C6 3181 ldd R19,z+1
04C8 0A81 ldd R16,y+2
04CA 1B81 ldd R17,y+3
04CC 0F5F subi R16,255 ; offset = 1
04CE 1F4F sbci R17,255
04D0 E0DE rcall _FormatItem
04D2 1B83 std y+3,R17
04D4 0A83 std y+2,R16
04D6 06C0 rjmp L111
04D8 L110:
04D8 .dbline 225
04D8 ; else
04D8 ; putchar(*f++);
04D8 EA81 ldd R30,y+2
04DA FB81 ldd R31,y+3
04DC 0191 ld R16,Z+
04DE FB83 std y+3,R31
04E0 EA83 std y+2,R30
04E2 8EDD rcall _putchar
04E4 L111:
04E4 .dbline 226
04E4 L108:
04E4 .dbline 220
04E4 EA81 ldd R30,y+2
04E6 FB81 ldd R31,y+3
04E8 2080 ldd R2,z+0
04EA 2220 tst R2
04EC 09F7 brne L107
04EE .dbline 227
04EE ; }
04EE ; vaEnd(argP);
04EE .dbline -2
04EE L106:
04EE 00D0 rcall pop_gset1
04F0 2496 adiw R28,4
04F2 .dbline 0 ; func end
04F2 0895 ret
04F4 .dbsym r argP 20 pc
04F4 .dbsym l f 2 pc
04F4 .dbend
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -