📄 printf_p.lst
字号:
417 02f0 630054E3 str r3, [sp, #52]
418 .loc 1 275 0
419 02f4 FFC003E2 mov r3, #0
420 .loc 1 273 0
421 strb r2, [sp, #12]
422 02f8 0700001A .loc 1 275 0
273:printf_P.c **** *(cp = buf) = va_arg(ap, int);
423 3, [sp, #59]
424 02fc 34309DE5 b .L72
425 0300 002093E5 .L70:
426 0304 043083E2 .loc 1 276 0
427 0308 34308DE5 cmp r4, #68
274:printf_P.c **** size = 1;
275:printf_P.c **** sign = '\0';
428 e r3, #0
429 030c 0030A0E3 moveq r3, #1
430 cmp r4, #68
431 0310 0C20CDE5 cmpne r4, #100
432 beq .L73
433 0314 3B30CDE5 cmp r4, #105
434 0318 E10000EA bne .L75
435 .L73:
276:printf_P.c **** } else if (ch=='D'||ch=='d'||ch=='i') {
436 277 0
437 031c 440054E3 cmp r3, #0
438 0320 0030A013 ldr r2, [sp, #52]
439 0324 0130A003 .loc 1 278 0
440 0328 440054E3 orrne r8, r8, #1
441 032c 64005413 .loc 1 279 0
442 0330 0100000A tst r8, #1
443 0334 690054E3 .loc 1 280 0
444 0338 1500001A addne r3, r2, #4
445 ldrne fp, [r2, #0]
277:printf_P.c **** if(ch=='D')
446 [sp, #52]
447 033c 000053E3 .loc 1 279 0
448 0340 34209DE5 bne .L80
278:printf_P.c **** flags |= LONGINT;
449 B3:
450 0344 01808813 .loc 1 283 0
279:printf_P.c **** if (flags&LONGINT) {
451 dr r0, [r2, #0]
452 0348 010018E3 .LVL47:
280:printf_P.c **** _ulong=va_arg(ap, long);
453 loc 1 284 0
454 034c 04308212 tst r8, #4
455 0350 00B09215 .loc 1 283 0
456 0354 34308D15 add r3, r2, #4
457 str r3, [sp, #52]
458 0358 0600001A .loc 1 284 0
459 movne r3, r0, asl #16
281:printf_P.c **** } else {
282:printf_P.c **** register int _d;
283:printf_P.c **** _d=va_arg(ap, int);
460 fp, r3, asr #16
461 035c 000092E5 moveq fp, r0
462 .LVL48:
284:printf_P.c **** _ulong = flags&SHORTINT ? (long)(short)_d : (long)_d;
463 0:
464 0360 040018E3 .LBE3:
465 .loc 1 287 0
466 0364 043082E2 cmp fp, #0
467 0368 34308DE5 movge r6, #10
468 .LVL49:
469 036c 0038A011 .loc 1 288 0
470 0370 43B8A011 rsblt fp, fp, #0
471 0374 00B0A001 .loc 1 289 0
472 movlt r6, #10
473 movlt r3, #45
474 .loc 1 287 0
285:printf_P.c **** }
286:printf_P.c ****
287:printf_P.c **** if ((long)_ulong < 0) {
475 b .L85
476 0378 00005BE3 .LVL50:
477 037c 0A60A0A3 .L75:
478 .loc 1 306 0
288:printf_P.c **** _ulong = -_ulong;
479 r4, #79
480 0380 00B06BB2 movne r3, #0
289:printf_P.c **** sign = '-';
481 oveq r3, #1
482 0384 0A60A0B3 cmp r4, #111
483 0388 2D30A0B3 movne r1, r3
484 orreq r1, r3, #1
485 038c 570000BA .LVL51:
486 0390 570000EA cmp r1, #0
487 beq .L86
488 .loc 1 307 0
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') {
489 #0
490 0394 4F0054E3 .loc 1 308 0
491 0398 0030A013 orrne r8, r8, #1
492 039c 0130A003 mov r6, #8
493 03a0 6F0054E3 .LVL52:
494 03a4 0310A011 b .L90
495 03a8 01108303 .LVL53:
496 .L86:
497 03ac 000051E3 .loc 1 311 0
498 03b0 0300000A cmp r4, #112
307:printf_P.c **** if (ch=='O')
499 .loc 1 320 0
500 03b4 000053E3 ldr r2, [sp, #52]
308:printf_P.c **** flags |= LONGINT;
501 dd r3, r2, #4
502 03b8 01808813 str r3, [sp, #52]
503 03bc 0860A0E3 ldr fp, [r2, #0]
504 .loc 1 322 0
505 03c0 490000EA orr r8, r8, #64
506 add r4, r4, #8
507 b .L163
309:printf_P.c **** base = OCT;
310:printf_P.c **** goto nosign;
311:printf_P.c **** } else if (ch=='p') {
508 .loc 1 325 0
509 03c4 700054E3 cmp r4, #115
510 03c8 0600001A bne .L93
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 *);
511 oc 1 326 0
512 03cc 34209DE5 ldr r3, [sp, #52]
513 03d0 043082E2 ldr r6, [r3, #0]
514 03d4 34308DE5 add r3, r3, #4
515 03d8 00B092E5 cmp r6, #0
321:printf_P.c **** base = HEX;
322:printf_P.c **** flags |= HEXPREFIX;
516 r3, [sp, #52]
517 03dc 408088E3 bne .L95
518 03e0 084084E2 .loc 1 328 0
519 03e4 3F0000EA mov r3, #40
520 strb r3, [sp, #12]
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
521 1 329 0
522 03e8 730054E3 add r3, r3, #70
523 03ec 2A00001A strb r3, [sp, #13]
326:printf_P.c **** if ((cp = va_arg(ap, char *)) == NULL) {
524 oc 1 330 0
525 03f0 34309DE5 add r3, r3, #7
526 03f4 006093E5 .loc 1 331 0
527 03f8 043083E2 mov r2, #108
528 03fc 000056E3 .loc 1 330 0
529 0400 34308DE5 strb r3, [sp, #14]
530 0404 0C00001A .loc 1 332 0
327:printf_P.c **** cp=buf;
328:printf_P.c **** cp[0] = '(';
531 , #41
532 0408 2830A0E3 .loc 1 331 0
533 040c 0C30CDE5 strb r2, [sp, #16]
329:printf_P.c **** cp[1] = 'n';
534 oc 1 332 0
535 0410 463083E2 strb r3, [sp, #17]
536 0414 0D30CDE5 .loc 1 331 0
330:printf_P.c **** cp[2] = 'u';
537 rb r2, [sp, #15]
538 0418 073083E2 .loc 1 333 0
331:printf_P.c **** cp[4] = cp[3] = 'l';
539 trb r6, [sp, #18]
540 041c 6C20A0E3 add r6, sp, #12
541 .L95:
542 0420 0E30CDE5 .loc 1 335 0
332:printf_P.c **** cp[5] = ')';
543 r3, ip, asl #24
544 0424 2930A0E3 movs r7, r3, asr #24
545 .LVL54:
546 0428 1020CDE5 bmi .L97
547 .LBB4:
548 042c 1130CDE5 .loc 1 341 0
549 mov r0, r6
550 0430 0F20CDE5 .LVL55:
333:printf_P.c **** cp[6] = '\0';
551 r7
552 0434 1260CDE5 bl memchr
553 0438 0C608DE2 .LVL56:
554 .loc 1 343 0
334:printf_P.c **** }
335:printf_P.c **** if (prec >= 0) {
555 r0, #0
556 043c 0C3CA0E1 beq .L99
557 0440 437CB0E1 .loc 1 344 0
558 rsb r3, r6, r0
559 0444 0A00004A and r5, r3, #255
560 .LVL57:
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);
561 1 345 0
562 0448 0600A0E1 mov r3, r5, asl #24
563 cmp r7, r3, asr #24
564 044c 0720A0E1 blt .L99
565 0450 FEFFFFEB b .L101
566 .LVL58:
342:printf_P.c ****
343:printf_P.c **** if (p != NULL) {
567 .LBE4:
568 0454 000050E3 .loc 1 350 0
569 0458 0900000A mov r0, r6
344:printf_P.c **** size = p - cp;
570 L59:
571 045c 003066E0 bl strlen
572 0460 FF5003E2 .LVL60:
573 and r5, r0, #255
345:printf_P.c **** if (size > prec)
574 61:
575 0464 053CA0E1 b .L101
576 0468 430C57E1 .LVL62:
577 046c 040000BA .L99:
578 0470 050000EA ldr r2, [sp, #8]
579 and r5, r2, #255
580 .LVL63:
581 .L101:
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);
582 351 0
583 0474 0600A0E1 mov r3, #0
584 mov r2, r3
585 0478 FEFFFFEB .LVL64:
586 strb r3, [sp, #59]
587 047c FF5000E2 b .L102
588 .LVL65:
589 0480 010000EA .L93:
590 .loc 1 354 0
591 cmp r4, #85
592 0484 08209DE5 movne r3, #0
593 0488 FF5002E2 moveq r3, #1
594 cmp r4, #85
595 cmpne r4, #117
351:printf_P.c **** sign = '\0';
596 oc 1 355 0
597 048c 0030A0E3 cmp r3, #0
598 0490 0320A0E1 .loc 1 356 0
599 orrne r8, r8, #1
600 0494 3B30CDE5 mov r6, #10
601 0498 470000EA .LVL66:
602 b .L90
603 .LVL67:
352:printf_P.c **** } else
353:printf_P.c **** #endif /* LIGHTPRINTF */
354:printf_P.c **** if(ch=='U'||ch=='u') {
604 .loc 1 359 0
605 049c 550054E3 cmp r4, #120
606 04a0 0030A013 cmpne r4, #88
607 04a4 0130A003 movne r3, #0
608 04a8 550054E3 moveq r3, #1
609 04ac 75005413 bne .L107
610 04b0 0300001A .loc 1 362 0
355:printf_P.c **** if (ch=='U')
611 3, fp, #0
612 04b4 000053E3 movne r3, #1
356:printf_P.c **** flags |= LONGINT;
613 nds r3, r3, r8, lsr #3
614 04b8 01808813 .loc 1 363 0
615 04bc 0A60A0E3 orrne r8, r8, #64
616 .L163:
617 04c0 090000EA mov r6, #16
618 .LVL68:
619 .L90:
357:printf_P.c **** base = DEC;
358:printf_P.c **** goto nosign;
359:printf_P.c **** } else if (ch=='X'||ch=='x') {
620 366 0
621 04c4 780054E3 mov r3, #0
622 04c8 58005413 .LVL69:
623 04cc 0030A013 .L165:
624 04d0 0130A003 strb r3, [sp, #59]
625 04d4 3300001A .L85:
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)
626 1 372 0
627 04d8 00305BE2 mov r3, ip, asl #24
628 04dc 0130A013 movs r3, r3, asr #24
629 04e0 A83113E0 bmi .L111
363:printf_P.c **** flags |= HEXPREFIX;
630 c 1 381 0
631 04e4 40808813 cmp r3, #0
632 cmpeq fp, #0
633 04e8 1060A0E3 .loc 1 373 0
634 and r8, r8, #223
635 .loc 1 381 0
364:printf_P.c ****
365:printf_P.c **** /* unsigned conversions */
366:printf_P.c **** nosign: sign = '\0';
636 r6, sp, #52
637 04ec 0030A0E3 .LVL70:
638 beq .L114
639 .LVL71:
640 04f0 3B30CDE5 .L111:
641 mov sl, fp
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)
642 :
643 04f4 0C3CA0E1 add r7, sp, #52
644 04f8 433CB0E1 .LVL73:
645 04fc 0400004A .LVL74:
373:printf_P.c **** flags &= ~ZEROPAD;
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 **** */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -