📄 printf_p.lst
字号:
418 0328 0030A0E3 orrne r3, r1, #1
419 032c 3F30CDE5 andne r6, r3, #255
420 0330 FC0000EA .loc 1 279 0
421 tst r6, #1
276:printf_P.c **** } else if (ch=='D'||ch=='d'||ch=='i') {
422 .L87
423 0334 440054E3 .loc 1 280 0
424 0338 0020A013 ldr r2, [sp, #64]
425 033c 0120A003 add r3, r2, #4
426 0340 440054E3 str r3, [sp, #64]
427 0344 64005413 ldr r8, [r2, #0]
428 0348 0100000A b .L89
429 034c 690054E3 .L87:
430 0350 1A00001A .LBB3:
431 .loc 1 283 0
277:printf_P.c **** if(ch=='D')
432 sp, #64]
433 0354 000052E3 add r3, r2, #4
278:printf_P.c **** flags |= LONGINT;
434 tr r3, [sp, #64]
435 0358 01308113 ldr r0, [r2, #0]
436 035c FF600312 .LVL51:
279:printf_P.c **** if (flags&LONGINT) {
437 L52:
438 0360 010016E3 .loc 1 284 0
439 0364 0400000A tst r6, #4
280:printf_P.c **** _ulong=va_arg(ap, long);
440 vne r3, r0, asl #16
441 0368 40209DE5 movne r8, r3, asr #16
442 036c 043082E2 moveq r8, r0
443 0370 40308DE5 .LVL53:
444 0374 008092E5 .L89:
445 0378 070000EA .LBE3:
446 .loc 1 287 0
447 cmp r8, #0
281:printf_P.c **** } else {
282:printf_P.c **** register int _d;
283:printf_P.c **** _d=va_arg(ap, int);
448 2, #10
449 037c 40209DE5 strge r2, [sp, #12]
450 0380 043082E2 .loc 1 288 0
451 0384 40308DE5 rsblt r8, r8, #0
452 0388 000092E5 .loc 1 289 0
453 movlt r3, #45
454 strltb r3, [sp, #63]
284:printf_P.c **** _ulong = flags&SHORTINT ? (long)(short)_d : (long)_d;
455 r3, r3, #35
456 038c 040016E3 strlt r3, [sp, #12]
457 0390 0038A011 b .L94
458 0394 4388A011 .LVL54:
459 0398 0080A001 .L84:
460 .loc 1 306 0
461 cmp r4, #79
462 movne r2, #0
285:printf_P.c **** }
286:printf_P.c ****
287:printf_P.c **** if ((long)_ulong < 0) {
463 2, #1
464 039c 000058E3 cmp r4, #79
465 03a0 0A20A0A3 cmpne r4, #111
466 03a4 0C208DA5 bne .L95
288:printf_P.c **** _ulong = -_ulong;
467 c 1 307 0
468 03a8 008068B2 cmp r2, #0
289:printf_P.c **** sign = '-';
469 ddeq r2, r2, #8
470 03ac 2D30A0B3 streq r2, [sp, #12]
471 03b0 3F30CDB5 .LVL55:
472 03b4 233043B2 .loc 1 308 0
473 03b8 0C308DB5 orrne r3, r6, #1
474 03bc 630000EA andne r6, r3, #255
475 .LVL56:
476 movne r3, #8
290:printf_P.c **** }
291:printf_P.c **** base = DEC;
292:printf_P.c **** goto number;
293:printf_P.c **** } else
294:printf_P.c **** /*
295:printf_P.c **** if (ch=='n') {
296:printf_P.c **** if (flags & LONGINT)
297:printf_P.c **** *va_arg(ap, long *) = ret;
298:printf_P.c **** else if (flags & SHORTINT)
299:printf_P.c **** *va_arg(ap, short *) = ret;
300:printf_P.c **** else
301:printf_P.c **** *va_arg(ap, int *) = ret;
302:printf_P.c **** continue; // no output
303:printf_P.c **** } else
304:printf_P.c **** */
305:printf_P.c **** #ifndef LIGHTPRINTF
306:printf_P.c **** if (ch=='O'||ch=='o') {
477 3, [sp, #12]
478 03c0 4F0054E3 b .L99
479 03c4 0020A013 .L95:
480 03c8 0120A003 .loc 1 311 0
481 03cc 4F0054E3 cmp r4, #112
482 03d0 6F005413 bne .L100
483 03d4 0700001A .loc 1 320 0
307:printf_P.c **** if (ch=='O')
484 , [sp, #64]
485 03d8 000052E3 add r2, r3, #4
486 03dc 08208202 str r2, [sp, #64]
487 03e0 0C208D05 ldr r8, [r3, #0]
488 .LVL57:
308:printf_P.c **** flags |= LONGINT;
489 1 322 0
490 03e4 01308613 orr r3, r6, #64
491 03e8 FF600312 and r6, r3, #255
492 .LVL58:
493 03ec 0830A013 mov r4, #120
494 03f0 0C308D15 .LVL59:
495 03f4 530000EA mov r2, #16
496 str r2, [sp, #12]
309:printf_P.c **** base = OCT;
310:printf_P.c **** goto nosign;
311:printf_P.c **** } else if (ch=='p') {
497 .LVL60:
498 03f8 700054E3 .L100:
499 03fc 0900001A .loc 1 325 0
312:printf_P.c **** /*
313:printf_P.c **** * ``The argument shall be a pointer to void. The
314:printf_P.c **** * value of the pointer is converted to a sequence
315:printf_P.c **** * of printable characters, in an implementation-
316:printf_P.c **** * defined manner.''
317:printf_P.c **** * -- ANSI X3J11
318:printf_P.c **** */
319:printf_P.c **** /* NOSTRICT */
320:printf_P.c **** _ulong = (unsigned int)va_arg(ap, void *);
500 p r4, #115
501 0400 40309DE5 bne .L102
502 0404 042083E2 .loc 1 326 0
503 0408 40208DE5 ldr r2, [sp, #64]
504 040c 008093E5 add r3, r2, #4
505 str r3, [sp, #64]
321:printf_P.c **** base = HEX;
322:printf_P.c **** flags |= HEXPREFIX;
506 p, [r2, #0]
507 0410 403086E3 cmp fp, #0
508 0414 FF6003E2 bne .L104
509 .loc 1 328 0
510 0418 7840A0E3 mov r3, #40
511 strb r3, [sp, #23]
512 041c 1020A0E3 .loc 1 329 0
513 0420 0C208DE5 add r3, r3, #70
514 0424 470000EA strb r3, [sp, #24]
515 .loc 1 330 0
516 add r3, r3, #7
323:printf_P.c **** ch = 'x';
324:printf_P.c **** goto nosign;
325:printf_P.c **** } else if (ch=='s') { // print a string from RAM
517 sp, #25]
518 0428 730054E3 .loc 1 331 0
519 042c 2B00001A sub r3, r3, #9
326:printf_P.c **** if ((cp = va_arg(ap, char *)) == NULL) {
520 rb r3, [sp, #26]
521 0430 40209DE5 strb r3, [sp, #27]
522 0434 043082E2 .loc 1 332 0
523 0438 40308DE5 sub r3, r3, #67
524 043c 00B092E5 strb r3, [sp, #28]
525 0440 00005BE3 .loc 1 333 0
526 0444 0C00001A strb fp, [sp, #29]
327:printf_P.c **** cp=buf;
328:printf_P.c **** cp[0] = '(';
527 , sp, #23
528 0448 2830A0E3 .L104:
529 044c 1730CDE5 .loc 1 335 0
329:printf_P.c **** cp[1] = 'n';
530 v r3, ip, asl #24
531 0450 463083E2 movs r4, r3, asr #24
532 0454 1830CDE5 .LVL61:
330:printf_P.c **** cp[2] = 'u';
533 i .L106
534 0458 073083E2 .LBB4:
535 045c 1930CDE5 .loc 1 341 0
331:printf_P.c **** cp[4] = cp[3] = 'l';
536 v r0, fp
537 0460 093043E2 .LVL62:
538 0464 1A30CDE5 mov r1, #0
539 0468 1B30CDE5 .LVL63:
332:printf_P.c **** cp[5] = ')';
540 r2, r4
541 046c 433043E2 bl memchr
542 0470 1C30CDE5 .LVL64:
333:printf_P.c **** cp[6] = '\0';
543 oc 1 343 0
544 0474 1DB0CDE5 cmp r0, #0
545 0478 17B08DE2 beq .L108
546 .loc 1 344 0
334:printf_P.c **** }
335:printf_P.c **** if (prec >= 0) {
547 r3, fp, r0
548 047c 0C3CA0E1 and sl, r3, #255
549 0480 434CB0E1 .loc 1 345 0
550 mov r3, sl, asl #24
551 0484 0B00004A cmp r4, r3, asr #24
552 blt .L108
336:printf_P.c **** /*
337:printf_P.c **** * can't use strlen; can only look for the
338:printf_P.c **** * NUL in the first `prec' characters, and
339:printf_P.c **** * strlen() will go further.
340:printf_P.c **** */
341:printf_P.c **** char *p = (char*)memchr(cp, 0, prec);
553 10
554 0488 0B00A0E1 .LVL65:
555 .L106:
556 048c 0010A0E3 .LBE4:
557 .loc 1 350 0
558 0490 0420A0E1 mov r0, fp
559 0494 FEFFFFEB .LVL66:
560 bl strlen
342:printf_P.c ****
343:printf_P.c **** if (p != NULL) {
561 and sl, r0, #255
562 0498 000050E3 b .L110
563 049c 0900000A .L108:
344:printf_P.c **** size = p - cp;
564 r r3, [sp, #8]
565 04a0 00306BE0 and sl, r3, #255
566 04a4 FFA003E2 .L110:
345:printf_P.c **** if (size > prec)
567 oc 1 351 0
568 04a8 0A3CA0E1 mov r2, #0
569 04ac 430C54E1 strb r2, [sp, #63]
570 04b0 040000BA mov r3, #0
571 04b4 050000EA .LVL68:
572 b .L111
573 .LVL69:
574 .L102:
346:printf_P.c **** size = prec;
347:printf_P.c **** } else
348:printf_P.c **** size = prec;
349:printf_P.c **** } else
350:printf_P.c **** size = strlen(cp);
575 354 0
576 04b8 0B00A0E1 cmp r4, #85
577 movne r2, #0
578 04bc FEFFFFEB moveq r2, #1
579 cmp r4, #85
580 04c0 FFA000E2 cmpne r4, #117
581 04c4 010000EA bne .L112
582 .loc 1 355 0
583 04c8 08309DE5 cmp r2, #0
584 04cc FFA003E2 moveq r3, #10
585 streq r3, [sp, #12]
351:printf_P.c **** sign = '\0';
586 oc 1 356 0
587 04d0 0020A0E3 orrne r3, r6, #1
588 04d4 3F20CDE5 andne r6, r3, #255
589 04d8 0030A0E3 .LVL71:
590 movne r2, #10
591 04dc 530000EA strne r2, [sp, #12]
592 b .L99
593 .L112:
352:printf_P.c **** } else
353:printf_P.c **** #endif /* LIGHTPRINTF */
354:printf_P.c **** if(ch=='U'||ch=='u') {
594 359 0
595 04e0 550054E3 cmp r4, #120
596 04e4 0020A013 cmpne r4, #88
597 04e8 0120A003 bne .L116
598 04ec 550054E3 .LVL72:
599 04f0 75005413 .loc 1 362 0
600 04f4 0700001A subs r3, r8, #0
355:printf_P.c **** if (ch=='U')
601 r3, #1
602 04f8 000052E3 .LVL73:
603 04fc 0A30A003 ands r3, r3, r6, lsr #3
604 0500 0C308D05 moveq r3, #16
605 streq r3, [sp, #12]
356:printf_P.c **** flags |= LONGINT;
606 1 363 0
607 0504 01308613 orrne r3, r6, #64
608 0508 FF600312 andne r6, r3, #255
609 .LVL74:
610 050c 0A20A013 movne r2, #16
611 0510 0C208D15 strne r2, [sp, #12]
612 0514 0B0000EA .LVL75:
613 .L99:
357:printf_P.c **** base = DEC;
358:printf_P.c **** goto nosign;
359:printf_P.c **** } else if (ch=='X'||ch=='x') {
614 366 0
615 0518 780054E3 mov r3, #0
616 051c 58005413 strb r3, [sp, #63]
617 0520 3B00001A .LVL76:
618 .L94:
360:printf_P.c **** base = HEX;
361:printf_P.c **** /* leading 0x/X only if non-zero */
362:printf_P.c **** if (flags & ALT && _ulong != 0)
619 1 372 0
620 0524 003058E2 mov r3, ip, asl #24
621 0528 0130A013 movs r3, r3, asr #24
622 bmi .L120
623 052c A63113E0 .loc 1 373 0
624 0530 1030A003 and r6, r6, #223
625 0534 0C308D05 .LVL77:
363:printf_P.c **** flags |= HEXPREFIX;
626 381 0
627 0538 40308613 cmp r3, #0
628 053c FF600312 cmpeq r8, #0
629 addeq fp, sp, #63
630 0540 1020A013 beq .L123
631 0544 0C208D15 .LVL78:
632 .L120:
633 .LVL79:
364:printf_P.c ****
365:printf_P.c **** /* unsigned conversions */
366:printf_P.c **** nosign: sign = '\0';
634 r8
635 0548 0030A0E3 .LVL80:
636 054c 3F30CDE5 add fp, sp, #63
637 .LVL81:
638 ldr r2, [sp, #12]
367:printf_P.c **** /*
368:printf_P.c **** * ``... diouXx conversions ... if a precision is
369:printf_P.c **** * specified, the 0 flag will be ignored.''
370:printf_P.c **** * -- ANSI X3J11
371:printf_P.c **** */
372:printf_P.c **** number: if ((dprec = prec) >= 0)
639 r2, [sp, #0]
640 0550 0C3CA0E1 .LVL82:
641 0554 433CB0E1 .L124:
642 0558 0400004A .LBB5:
373:printf_P.c **** flags &= ~ZEROPAD;
643 c 1 385 0
644 055c DF6006E2 mov r0, sl
645 .LVL83:
374:printf_P.c ****
375:printf_P.c **** /*
376:printf_P.c **** * ``The result of converting a zero value with an
377:printf_P.c **** * explicit precision of zero is no characters.''
378:printf_P.c **** * -- ANSI X3J11
379:printf_P.c **** */
380:printf_P.c **** cp = buf + BUF;
381:printf_P.c **** if (_ulong != 0 || prec != 0) {
646 r r1, [sp, #12]
647 0560 000053E3 .LVL84:
648 0564 00005803 bl __umodsi3
649 0568 3FB08D02 .LVL85:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -