📄 lpc2000_dbg_printf.lst
字号:
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 + -