📄 lcdprintf.lst
字号:
1 .code 16 2 .file "lcdprintf.c" 10 .Ltext0: 11 .align 2 12 .code 16 13 .thumb_func 15 lcdmyputchar: 16 .LFB290: 17 .file 1 "LCD/lcdprintf.c" 1:LCD/lcdprintf.c **** #include "include/includes.h"
2:LCD/lcdprintf.c **** #include <stdarg.h>
3:LCD/lcdprintf.c **** #include <string.h>
4:LCD/lcdprintf.c ****
5:LCD/lcdprintf.c **** #define SCRATCH 12 //32Bits go up to 4GB + 1 Byte for \0
6:LCD/lcdprintf.c ****
7:LCD/lcdprintf.c **** //Spare some program space by making a comment of all not used format flag lines
8:LCD/lcdprintf.c **** #define USE_LONG // %lx, %Lu and so on, else only 16 bit integer is allowed
9:LCD/lcdprintf.c **** #define USE_STRING // %s, %S Strings as parameters
10:LCD/lcdprintf.c **** #define USE_CHAR // %c, %C Chars as parameters
11:LCD/lcdprintf.c **** #define USE_INTEGER // %i, %I Remove this format flag. %d, %D does the same
12:LCD/lcdprintf.c **** #define USE_HEX // %x, %X Hexadezimal output
13:LCD/lcdprintf.c **** #define USE_UPPERHEX // %x, %X outputs A,B,C... else a,b,c...
14:LCD/lcdprintf.c **** #ifndef USE_HEX
15:LCD/lcdprintf.c **** #undef USE_UPPERHEX // ;)
16:LCD/lcdprintf.c **** #endif
17:LCD/lcdprintf.c **** #define USE_UPPER // uncommenting this removes %C,%D,%I,%O,%S,%U,%X and %L..
18:LCD/lcdprintf.c **** // only lowercase format flags are used
19:LCD/lcdprintf.c **** #define PADDING //SPACE and ZERO padding
20:LCD/lcdprintf.c ****
21:LCD/lcdprintf.c ****
22:LCD/lcdprintf.c ****
23:LCD/lcdprintf.c **** static void lcdmyputchar(unsigned char c)
24:LCD/lcdprintf.c **** {
18 .loc 1 24 0 19 0000 80B5 push {r7, lr} 20 .LCFI0: 21 0002 6F46 mov r7, sp 22 .LCFI1: 23 0004 81B0 sub sp, sp, #4 24 .LCFI2: 25 0006 031C mov r3, r0 26 0008 3A1F sub r2, r7, #4 27 000a 1370 strb r3, [r2] 25:LCD/lcdprintf.c **** if (c==(char)'\n') {
28 .loc 1 25 0 29 000c 3B1F sub r3, r7, #4 30 000e 1B78 ldrb r3, [r3] 31 0010 0A2B cmp r3, #10 32 0012 03D1 bne .L2 26:LCD/lcdprintf.c **** LCDSendCommand(ENTER);
33 .loc 1 26 0 34 0014 C020 mov r0, #192 35 0016 FFF7FEFF bl LCDSendCommand 36 001a 04E0 b .L5 37 .L2: 27:LCD/lcdprintf.c **** } else {
28:LCD/lcdprintf.c **** LCDSendChar(c);
38 .loc 1 28 0 39 001c 3B1F sub r3, r7, #4 40 001e 1B78 ldrb r3, [r3] 41 0020 181C mov r0, r3 42 0022 FFF7FEFF bl LCDSendChar 43 .L5: 29:LCD/lcdprintf.c **** }
30:LCD/lcdprintf.c **** }
44 .loc 1 30 0 45 0026 BD46 mov sp, r7 46 @ sp needed for prologue 47 0028 80BC pop {r7} 48 002a 01BC pop {r0} 49 002c 0047 bx r0 50 .LFE290: 52 .global __umodsi3 53 .global __udivsi3 54 002e 0000 .align 2 55 .global lcdprintf 56 .code 16 57 .thumb_func 59 lcdprintf: 60 .LFB291: 31:LCD/lcdprintf.c ****
32:LCD/lcdprintf.c ****
33:LCD/lcdprintf.c **** //#if 0
34:LCD/lcdprintf.c ****
35:LCD/lcdprintf.c ****
36:LCD/lcdprintf.c **** /*static void lcdmyputchar(unsigned char c)
37:LCD/lcdprintf.c **** {
38:LCD/lcdprintf.c **** //if(c == '\n') softuart_putchar('\r');
39:LCD/lcdprintf.c **** //softuart_putchar(c); // see softuart.c
40:LCD/lcdprintf.c **** }
41:LCD/lcdprintf.c **** #endif*/
42:LCD/lcdprintf.c ****
43:LCD/lcdprintf.c **** #if 0
44:LCD/lcdprintf.c **** static void lcdmyputchar(unsigned char c)
45:LCD/lcdprintf.c **** {
46:LCD/lcdprintf.c **** //while ( uart0Space() < 2 );
47:LCD/lcdprintf.c **** //if(c == '\n') uart0Putch('\r');
48:LCD/lcdprintf.c **** //uart0Putch(c); // see uart.c
49:LCD/lcdprintf.c **** }
50:LCD/lcdprintf.c **** #endif
51:LCD/lcdprintf.c ****
52:LCD/lcdprintf.c **** void lcdprintf(char const *format, ...)
53:LCD/lcdprintf.c **** {
61 .loc 1 53 0 62 0030 0FB4 push {r0, r1, r2, r3} 63 .LCFI3: 64 0032 90B5 push {r4, r7, lr} 65 .LCFI4: 66 0034 6F46 mov r7, sp 67 .LCFI5: 68 0036 8CB0 sub sp, sp, #48 69 .LCFI6: 54:LCD/lcdprintf.c **** unsigned char scratch[SCRATCH];
55:LCD/lcdprintf.c **** unsigned char format_flag;
56:LCD/lcdprintf.c **** unsigned short base;
57:LCD/lcdprintf.c **** unsigned char *ptr;
58:LCD/lcdprintf.c **** unsigned char issigned=0;
70 .loc 1 58 0 71 0038 3A1C mov r2, r7 72 003a 0E3A sub r2, r2, #14 73 003c 0023 mov r3, #0 74 003e 1370 strb r3, [r2] 59:LCD/lcdprintf.c **** va_list ap;
60:LCD/lcdprintf.c ****
61:LCD/lcdprintf.c **** #ifdef USE_LONG
62:LCD/lcdprintf.c **** unsigned char islong=0;
75 .loc 1 62 0 76 0040 3A1C mov r2, r7 77 0042 0D3A sub r2, r2, #13 78 0044 0023 mov r3, #0 79 0046 1370 strb r3, [r2] 63:LCD/lcdprintf.c **** unsigned long u_val=0;
80 .loc 1 63 0 81 0048 3A1C mov r2, r7 82 004a 0C3A sub r2, r2, #12 83 004c 0023 mov r3, #0 84 004e 1360 str r3, [r2] 64:LCD/lcdprintf.c **** long s_val=0;
85 .loc 1 64 0 86 0050 3A1C mov r2, r7 87 0052 083A sub r2, r2, #8 88 0054 0023 mov r3, #0 89 0056 1360 str r3, [r2] 65:LCD/lcdprintf.c **** #else
66:LCD/lcdprintf.c **** unsigned int u_val=0;
67:LCD/lcdprintf.c **** int s_val=0;
68:LCD/lcdprintf.c **** #endif
69:LCD/lcdprintf.c ****
70:LCD/lcdprintf.c **** unsigned char fill;
71:LCD/lcdprintf.c **** unsigned char width;
72:LCD/lcdprintf.c ****
73:LCD/lcdprintf.c **** va_start (ap, format);
90 .loc 1 73 0 91 0058 3A1C mov r2, r7 92 005a 1032 add r2, r2, #16 93 005c 3B1C mov r3, r7 94 005e 283B sub r3, r3, #40 95 0060 1A60 str r2, [r3] 74:LCD/lcdprintf.c **** for (;;){
75:LCD/lcdprintf.c **** while ((format_flag = *(format++)) != '%'){ // Until '%' or '\0'
96 .loc 1 75 0 97 0062 0BE0 b .L56 98 .L9: 76:LCD/lcdprintf.c **** if (!format_flag){va_end (ap); return;}
99 .loc 1 76 0 100 0064 3B1C mov r3, r7 101 0066 173B sub r3, r3, #23 102 0068 1B78 ldrb r3, [r3] 103 006a 002B cmp r3, #0 104 006c 00D1 bne .L10 105 006e BBE1 b .L55 106 .L10: 77:LCD/lcdprintf.c **** lcdmyputchar(format_flag);
107 .loc 1 77 0 108 0070 3B1C mov r3, r7 109 0072 173B sub r3, r3, #23 110 0074 1B78 ldrb r3, [r3] 111 0076 181C mov r0, r3 112 0078 FFF7FEFF bl lcdmyputchar 113 .L8: 114 .L56: 115 .loc 1 75 0 116 007c 3A1C mov r2, r7 117 007e 173A sub r2, r2, #23 118 0080 FB68 ldr r3, [r7, #12] 119 0082 1B78 ldrb r3, [r3] 120 0084 1370 strb r3, [r2] 121 0086 0022 mov r2, #0 122 0088 2921 mov r1, #41 123 008a 4942 neg r1, r1 124 008c C919 add r1, r1, r7 125 008e 0A70 strb r2, [r1] 126 0090 3B1C mov r3, r7 127 0092 173B sub r3, r3, #23 128 0094 1B78 ldrb r3, [r3] 129 0096 252B cmp r3, #37 130 0098 04D0 beq .L12 131 009a 0121 mov r1, #1 132 009c 2923 mov r3, #41 133 009e 5B42 neg r3, r3 134 00a0 DB19 add r3, r3, r7 135 00a2 1970 strb r1, [r3] 136 .L12: 137 00a4 2922 mov r2, #41 138 00a6 5242 neg r2, r2 139 00a8 D219 add r2, r2, r7 140 00aa 1378 ldrb r3, [r2] 141 00ac 1B06 lsl r3, r3, #24 142 00ae 1A0E lsr r2, r3, #24 143 00b0 FB68 ldr r3, [r7, #12] 144 00b2 0133 add r3, r3, #1 145 00b4 FB60 str r3, [r7, #12] 146 00b6 002A cmp r2, #0 147 00b8 D4D1 bne .L9 78:LCD/lcdprintf.c **** }
79:LCD/lcdprintf.c ****
80:LCD/lcdprintf.c **** issigned=0; //default unsigned
148 .loc 1 80 0 149 00ba 3A1C mov r2, r7 150 00bc 0E3A sub r2, r2, #14 151 00be 0023 mov r3, #0 152 00c0 1370 strb r3, [r2] 81:LCD/lcdprintf.c **** base = 10;
153 .loc 1 81 0 154 00c2 3A1C mov r2, r7 155 00c4 163A sub r2, r2, #22 156 00c6 0A23 mov r3, #10 157 00c8 1380 strh r3, [r2] 82:LCD/lcdprintf.c ****
83:LCD/lcdprintf.c **** format_flag = *format++; //get char after '%'
158 .loc 1 83 0 159 00ca 3A1C mov r2, r7 160 00cc 173A sub r2, r2, #23 161 00ce FB68 ldr r3, [r7, #12] 162 00d0 1B78 ldrb r3, [r3] 163 00d2 1370 strb r3, [r2] 164 00d4 FB68 ldr r3, [r7, #12] 165 00d6 0133 add r3, r3, #1 166 00d8 FB60 str r3, [r7, #12] 84:LCD/lcdprintf.c ****
85:LCD/lcdprintf.c **** #ifdef PADDING
86:LCD/lcdprintf.c **** width=0; //no formatting
167 .loc 1 86 0 168 00da BA1E sub r2, r7, #2 169 00dc 0023 mov r3, #0 170 00de 1370 strb r3, [r2] 87:LCD/lcdprintf.c **** fill=0; //no formatting
171 .loc 1 87 0 172 00e0 FA1E sub r2, r7, #3 173 00e2 0023 mov r3, #0 174 00e4 1370 strb r3, [r2] 88:LCD/lcdprintf.c **** if(format_flag=='0' || format_flag==' ') //SPACE or ZERO padding ?
175 .loc 1 88 0 176 00e6 3B1C mov r3, r7 177 00e8 173B sub r3, r3, #23 178 00ea 1B78 ldrb r3, [r3] 179 00ec 302B cmp r3, #48 180 00ee 04D0 beq .L14 181 00f0 3B1C mov r3, r7 182 00f2 173B sub r3, r3, #23 183 00f4 1B78 ldrb r3, [r3] 184 00f6 202B cmp r3, #32 185 00f8 26D1 bne .L16 186 .L14: 89:LCD/lcdprintf.c **** {
90:LCD/lcdprintf.c **** fill=format_flag;
187 .loc 1 90 0 188 00fa FA1E sub r2, r7, #3 189 00fc 3B1C mov r3, r7 190 00fe 173B sub r3, r3, #23 191 0100 1B78 ldrb r3, [r3] 192 0102 1370 strb r3, [r2] 91:LCD/lcdprintf.c **** format_flag = *format++; //get char after padding char
193 .loc 1 91 0 194 0104 3A1C mov r2, r7 195 0106 173A sub r2, r2, #23 196 0108 FB68 ldr r3, [r7, #12] 197 010a 1B78 ldrb r3, [r3] 198 010c 1370 strb r3, [r2] 199 010e FB68 ldr r3, [r7, #12] 200 0110 0133 add r3, r3, #1 201 0112 FB60 str r3, [r7, #12] 92:LCD/lcdprintf.c **** if(format_flag>='0' && format_flag<='9')
202 .loc 1 92 0 203 0114 3B1C mov r3, r7 204 0116 173B sub r3, r3, #23 205 0118 1B78 ldrb r3, [r3] 206 011a 2F2B cmp r3, #47 207 011c 14D9 bls .L16 208 011e 3B1C mov r3, r7 209 0120 173B sub r3, r3, #23 210 0122 1B78 ldrb r3, [r3] 211 0124 392B cmp r3, #57 212 0126 0FD8 bhi .L16 93:LCD/lcdprintf.c **** {
94:LCD/lcdprintf.c **** width=format_flag-'0';
213 .loc 1 94 0 214 0128 3B1C mov r3, r7 215 012a 173B sub r3, r3, #23 216 012c 1B78 ldrb r3, [r3] 217 012e 303B sub r3, r3, #48 218 0130 1B06 lsl r3, r3, #24 219 0132 1B0E lsr r3, r3, #24 220 0134 BA1E sub r2, r7, #2 221 0136 1370 strb r3, [r2] 95:LCD/lcdprintf.c **** format_flag = *format++; //get char after width char
222 .loc 1 95 0 223 0138 3A1C mov r2, r7 224 013a 173A sub r2, r2, #23 225 013c FB68 ldr r3, [r7, #12] 226 013e 1B78 ldrb r3, [r3]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -