⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lpc2000_dbg_printf.lst

📁 Philips LPC2138 Demo Application with Keil C
💻 LST
📖 第 1 页 / 共 3 页
字号:
  238   3      #endif
  239   3      
  240   3            while(*ptr) { myputchar(*ptr); ptr++; }
  241   3          }
  242   2        }
  243   1      }
ARM COMPILER V2.42,  lpc2000_dbg_printf                                                    27/03/06  10:45:50  PAGE 5   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN CODE16 (?C?ICALL1?T)
 EXTERN CODE16 (?C?UDIV?T)



*** PUBLICS:
 PUBLIC         lpc2000_debug_devopen?T
 PUBLIC         lpc2000_debug_printf?T



*** DATA SEGMENT '?DT0?lpc2000_dbg_printf':
 00000000          putcharfunc:
 00000000            DS          4



*** CODE SEGMENT '?PR?lpc2000_debug_devopen?T?lpc2000_dbg_printf':
   50: void lpc2000_debug_devopen( int(*put)(int) )
 00000000  1C02      MOV         R2,R0 ; put
 00000002  ---- Variable 'put' assigned to Register 'R2' ----
   52:    putcharfunc = put;
 00000002  1C11      MOV         R1,R2 ; put
 00000004  4800      LDR         R0,=putcharfunc ; putcharfunc
 00000006  6001      STR         R1,[R0,#0x0] ; putcharfunc
   53: }
 00000008  4770      BX          R14
 0000000A          ENDP ; 'lpc2000_debug_devopen?T'


*** CODE SEGMENT '?PR?myputchar?T?lpc2000_dbg_printf':
   55: static void myputchar(unsigned char c)
 00000000  B510      PUSH        {R4,LR}
 00000002  1C04      MOV         R4,R0 ; c
 00000004  ---- Variable 'c' assigned to Register 'R4' ----
   57:     if(c == '\n') putcharfunc('\r');
 00000004  1C20      MOV         R0,R4 ; c
 00000006  0600      LSL         R0,R0,#0x18 ; c
 00000008  0E00      LSR         R0,R0,#0x18
 0000000A  280A      CMP         R0,#0xA
 0000000C  D104      BNE         L_1  ; T=0x00000018
 0000000E  200D      MOV         R0,#0xD
 00000010  4800      LDR         R1,=putcharfunc ; putcharfunc
 00000012  6809      LDR         R1,[R1,#0x0] ; putcharfunc
 00000014  F7FF      BL          ?C?ICALL1?T  ; T=0x0001  (1) ; ?C?ICALL1?T
 00000016  FFF4      BL          ?C?ICALL1?T  ; T=0x0001  (2) ; ?C?ICALL1?T
 00000018          L_1:
   58:     putcharfunc(c);
 00000018  1C20      MOV         R0,R4 ; c
 0000001A  0600      LSL         R0,R0,#0x18 ; c
 0000001C  0E00      LSR         R0,R0,#0x18
 0000001E  4800      LDR         R1,=putcharfunc ; putcharfunc
 00000020  6809      LDR         R1,[R1,#0x0] ; putcharfunc
 00000022  F7FF      BL          ?C?ICALL1?T  ; T=0x0001  (1) ; ?C?ICALL1?T
 00000024  FFED      BL          ?C?ICALL1?T  ; T=0x0001  (2) ; ?C?ICALL1?T
   59: }
 00000026  BC10      POP         {R4}
 00000028  BC08      POP         {R3}
 0000002A  4718      BX          R3
 0000002C          ENDP ; 'myputchar?T'


*** CODE SEGMENT '?PR?lpc2000_debug_printf?T?lpc2000_dbg_printf':
   61: void lpc2000_debug_printf(char const *format, ...)
 00000000  B40E      PUSH        {R1-R3}
 00000002  B5F0      PUSH        {R4-R7,LR}
 00000004  1C07      MOV         R7,R0 ; format
 00000006  ---- Variable 'format' assigned to Register 'R7' ----
 00000006  B08B      SUB         R13,#0x2C
 00000008  ---- Variable 'format_flag' assigned to Register 'R5' ----
 00000008  ---- Variable 'ptr' assigned to Register 'R4' ----
   62: {
ARM COMPILER V2.42,  lpc2000_dbg_printf                                                    27/03/06  10:45:50  PAGE 6   

 00000008            ; SCOPE-START
   67:   unsigned char issigned=0;
 00000008  2100      MOV         R1,#0x0
 0000000A  A804      ADD         R0,R13,#0x10
 0000000C  7001      STRB        R1,[R0,#0x0] ; issigned
   71:   unsigned char islong=0;
 0000000E  A805      ADD         R0,R13,#0x14
 00000010  7001      STRB        R1,[R0,#0x0] ; islong
   72:   unsigned long u_val=0;
 00000012  2000      MOV         R0,#0x0
 00000014  9006      STR         R0,[R13,#0x18] ; u_val
   73:   long s_val=0;
 00000016  2000      MOV         R0,#0x0
 00000018  9007      STR         R0,[R13,#0x1C] ; s_val
   82:   va_start (ap, format);
 0000001A  AE0B      ADD         R6,R13,#0x2C
 0000001C  ---- Variable 'ap' assigned to Register 'R6' ----
   84:     while ((format_flag = *(format++)) != '%'){      // Until '%' or '\0' 
 0000001C          L_10:
 0000001C  E00B      B           L_7  ; T=0x00000036
 0000001E          L_9:
   85:       if (!format_flag){va_end (ap); return;}
 0000001E  1C28      MOV         R0,R5 ; format_flag
 00000020  0600      LSL         R0,R0,#0x18 ; format_flag
 00000022  0E00      LSR         R0,R0,#0x18
 00000024  2800      CMP         R0,#0x0
 00000026  D101      BNE         L_11  ; T=0x0000002C
 00000028  2600      MOV         R6,#0x0
 0000002A  E107      B           L_12  ; T=0x0000023C
 0000002C          L_11:
   86:       myputchar(format_flag);
 0000002C  1C28      MOV         R0,R5 ; format_flag
 0000002E  0600      LSL         R0,R0,#0x18 ; format_flag
 00000030  0E00      LSR         R0,R0,#0x18
 00000032  F7FF      BL          myputchar?T  ; T=0x0001  (1)
 00000034  FFE5      BL          myputchar?T  ; T=0x0001  (2)
   87:     }
 00000036          L_7:
 00000036  1C38      MOV         R0,R7 ; format
 00000038  3701      ADD         R7,#0x1
 0000003A  7800      LDRB        R0,[R0,#0x0] ; format
 0000003C  1C05      MOV         R5,R0 ; format_flag
 0000003E  2825      CMP         R0,#0x25
 00000040  D1ED      BNE         L_9  ; T=0x0000001E
   89:     issigned=0; //default unsigned
 00000042  2100      MOV         R1,#0x0
 00000044  A804      ADD         R0,R13,#0x10
 00000046  7001      STRB        R1,[R0,#0x0] ; issigned
   90:     base = 10;
 00000048  220A      MOV         R2,#0xA
 0000004A  A803      ADD         R0,R13,#0xC
 0000004C  8002      STRH        R2,[R0,#0x0] ; base
   92:     format_flag = *format++; //get char after '%'
 0000004E  1C38      MOV         R0,R7 ; format
 00000050  3701      ADD         R7,#0x1
 00000052  7805      LDRB        R5,[R0,#0x0] ; format
   95:     width=0; //no formatting
 00000054  A809      ADD         R0,R13,#0x24
 00000056  7001      STRB        R1,[R0,#0x0] ; width
   96:     fill=0;  //no formatting
 00000058  A808      ADD         R0,R13,#0x20
 0000005A  7001      STRB        R1,[R0,#0x0] ; fill
   97:     if(format_flag=='0' || format_flag==' ') //SPACE or ZERO padding  ?
 0000005C  1C29      MOV         R1,R5 ; format_flag
 0000005E  0609      LSL         R1,R1,#0x18 ; format_flag
 00000060  0E09      LSR         R1,R1,#0x18
ARM COMPILER V2.42,  lpc2000_dbg_printf                                                    27/03/06  10:45:50  PAGE 7   

 00000062  2930      CMP         R1,#0x30
 00000064  D004      BEQ         L_14  ; T=0x00000070
 00000066  1C29      MOV         R1,R5 ; format_flag
 00000068  0609      LSL         R1,R1,#0x18 ; format_flag
 0000006A  0E09      LSR         R1,R1,#0x18
 0000006C  2920      CMP         R1,#0x20
 0000006E  D119      BNE         L_13  ; T=0x000000A4
 00000070          L_14:
   99:       fill=format_flag;
 00000070  1C29      MOV         R1,R5 ; format_flag
 00000072  7001      STRB        R1,[R0,#0x0] ; fill
  100:       format_flag = *format++; //get char after padding char
 00000074  1C38      MOV         R0,R7 ; format
 00000076  3701      ADD         R7,#0x1
 00000078  7805      LDRB        R5,[R0,#0x0] ; format
  101:       if(format_flag>='0' && format_flag<='9')
 0000007A  1C28      MOV         R0,R5 ; format_flag
 0000007C  0600      LSL         R0,R0,#0x18 ; format_flag
 0000007E  0E00      LSR         R0,R0,#0x18
 00000080  2830      CMP         R0,#0x30
 00000082  DB0F      BLT         L_13  ; T=0x000000A4
 00000084  1C28      MOV         R0,R5 ; format_flag
 00000086  0600      LSL         R0,R0,#0x18 ; format_flag
 00000088  0E00      LSR         R0,R0,#0x18
 0000008A  2839      CMP         R0,#0x39
 0000008C  DC0A      BGT         L_13  ; T=0x000000A4
  103:         width=format_flag-'0';
 0000008E  1C28      MOV         R0,R5 ; format_flag
 00000090  0601      LSL         R1,R0,#0x18 ; format_flag
 00000092  0E09      LSR         R1,R1,#0x18
 00000094  3930      SUB         R1,#0x30
 00000096  0609      LSL         R1,R1,#0x18
 00000098  0E09      LSR         R1,R1,#0x18
 0000009A  A809      ADD         R0,R13,#0x24
 0000009C  7001      STRB        R1,[R0,#0x0] ; width
  104:         format_flag = *format++; //get char after width char
 0000009E  1C38      MOV         R0,R7 ; format
 000000A0  3701      ADD         R7,#0x1
 000000A2  7805      LDRB        R5,[R0,#0x0] ; format
  106:      }
 000000A4          L_13:
  110:     islong=0; //default int value
 000000A4  2100      MOV         R1,#0x0
 000000A6  A805      ADD         R0,R13,#0x14
 000000A8  7001      STRB        R1,[R0,#0x0] ; islong
  112:     if(format_flag=='l' || format_flag=='L') //Long value 
 000000AA  1C29      MOV         R1,R5 ; format_flag
 000000AC  0609      LSL         R1,R1,#0x18 ; format_flag
 000000AE  0E09      LSR         R1,R1,#0x18
 000000B0  296C      CMP         R1,#0x6C
 000000B2  D004      BEQ         L_17  ; T=0x000000BE
 000000B4  1C29      MOV         R1,R5 ; format_flag
 000000B6  0609      LSL         R1,R1,#0x18 ; format_flag
 000000B8  0E09      LSR         R1,R1,#0x18
 000000BA  294C      CMP         R1,#0x4C
 000000BC  D104      BNE         L_16  ; T=0x000000C8
 000000BE          L_17:
  117:       islong=1;
 000000BE  2101      MOV         R1,#0x1
 000000C0  7001      STRB        R1,[R0,#0x0] ; islong
  118:       format_flag = *format++; //get char after 'l' or 'L'
 000000C2  1C38      MOV         R0,R7 ; format
 000000C4  3701      ADD         R7,#0x1
 000000C6  7805      LDRB        R5,[R0,#0x0] ; format
  119:      }
 000000C8          L_16:
ARM COMPILER V2.42,  lpc2000_dbg_printf                                                    27/03/06  10:45:50  PAGE 8   

  122:     switch (format_flag)
 000000C8  1C28      MOV         R0,R5 ; format_flag
 000000CA  2844      CMP         R0,#0x44 ; format_flag
 000000CC  D034      BEQ         L_21  ; T=0x00000138
 000000CE  2849      CMP         R0,#0x49 ; format_flag
 000000D0  D032      BEQ         L_21  ; T=0x00000138
 000000D2  2853      CMP         R0,#0x53 ; format_flag
 000000D4  D021      BEQ         L_29  ; T=0x0000011A
 000000D6  2855      CMP         R0,#0x55 ; format_flag
 000000D8  D101      BNE         $ + 0x6  ; T=0x000000DE
 000000DA  F7FF      BL          CONVERSION_LOOP  ; T=0x7FFFFFFF  (1)
 000000DC  FF90      BL          CONVERSION_LOOP  ; T=0x7FFFFFFF  (2)
 000000E2  2858      CMP         R0,#0x58 ; format_flag
 000000E4  D02C      BEQ         L_25  ; T=0x00000140
 000000E6  2863      CMP         R0,#0x63 ; format_flag
 000000E8  D00B      BEQ         L_19  ; T=0x00000102
 000000EA  2864      CMP         R0,#0x64 ; format_flag
 000000EC  D024      BEQ         L_21  ; T=0x00000138
 000000EE  2869      CMP         R0,#0x69 ; format_flag
 000000F0  D022      BEQ         L_21  ; T=0x00000138
 000000F2  2873      CMP         R0,#0x73 ; format_flag
 000000F4  D011      BEQ         L_29  ; T=0x0000011A
 000000F6  2875      CMP         R0,#0x75 ; format_flag
 000000F8  D101      BNE         $ + 0x6  ; T=0x000000FE
 000000FA  F7FF      BL          CONVERSION_LOOP  ; T=0x7FFFFFFF  (1)
 000000FC  FF80      BL          CONVERSION_LOOP  ; T=0x7FFFFFFF  (2)
 00000102  2878      CMP         R0,#0x78 ; format_flag
 00000104  D01C      BEQ         L_25  ; T=0x00000140
 00000106  2843      CMP         R0,#0x43 ; format_flag
 00000108  D101      BNE         L_20  ; T=0x0000010E

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -