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

📄 lib_str.txt

📁 IARSOURCECODE是基于LPC2478嵌入式软件IAR EWARM V4.42的应用实例代码
💻 TXT
📖 第 1 页 / 共 3 页
字号:
0004b8  1a000001          BNE      |L1.1220|
0004bc  e3a04000          MOV      r4,#0
0004c0  ea000009          B        |L1.1260|
                  |L1.1220|
0004c4  e35c0000          CMP      r12,#0
0004c8  1a000006          BNE      |L1.1256|
0004cc  e35e0000          CMP      lr,#0
0004d0  1a000001          BNE      |L1.1244|
0004d4  e3a04000          MOV      r4,#0
0004d8  ea000003          B        |L1.1260|
                  |L1.1244|
0004dc  e5de0000          LDRB     r0,[lr,#0]
0004e0  e2604000          RSB      r4,r0,#0
0004e4  ea000000          B        |L1.1260|
                  |L1.1256|
0004e8  e5dc4000          LDRB     r4,[r12,#0]
                  |L1.1260|
0004ec  e1a00004          MOV      r0,r4
0004f0  eaffffb7          B        |L1.980|
                          ENDP

                  Str_Char PROC
;;;796                         CPU_CHAR   srch_char)
;;;797    {
0004f4  e1a02000          MOV      r2,r0
;;;798        CPU_CHAR  *pstr_next;
;;;799    
;;;800    
;;;801        if (pstr == (CPU_CHAR *)0) {                                /* Rtn NULL if srch str ptr NULL (see Note #2a).        */
0004f8  e3520000          CMP      r2,#0
0004fc  1a000001          BNE      |L1.1288|
;;;802            return ((CPU_CHAR *)0);
000500  e3a00000          MOV      r0,#0
                  |L1.1284|
;;;803        }
;;;804    
;;;805    
;;;806        pstr_next = pstr;
;;;807        pstr_next++;
;;;808        while (( pstr_next != (CPU_CHAR *)0) &&                     /* Srch str until NULL ptr(s) (see Note #2b) ...        */
;;;809               (*pstr      != (CPU_CHAR  )0) &&                     /* ... or NULL char           (see Note #2c) ...        */
;;;810               (*pstr      != (CPU_CHAR  )srch_char)) {             /* ... or srch char found     (see Note #2d).           */
;;;811            pstr++;
;;;812            pstr_next++;
;;;813        }
;;;814    
;;;815    
;;;816        if (*pstr != srch_char) {                                   /* If srch char NOT found, str points to NULL; ...      */
;;;817            return ((CPU_CHAR *)0);                                 /* ... rtn NULL (see Notes #2b & #2c).                  */
;;;818        }
;;;819    
;;;820        return (pstr);                                              /* Else rtn ptr to found srch char (see Note #2d).      */
;;;821    }
000504  e12fff1e          BX       lr
                  |L1.1288|
000508  e1a03002          MOV      r3,r2
00050c  e1a02003          MOV      r2,r3
000510  e2833001          ADD      r3,r3,#1
000514  ea000001          B        |L1.1312|
                  |L1.1304|
000518  e2822001          ADD      r2,r2,#1
00051c  e2833001          ADD      r3,r3,#1
                  |L1.1312|
000520  e3530000          CMP      r3,#0
000524  0a000005          BEQ      |L1.1344|
000528  e5d20000          LDRB     r0,[r2,#0]
00052c  e3500000          CMP      r0,#0
000530  0a000002          BEQ      |L1.1344|
000534  e5d20000          LDRB     r0,[r2,#0]
000538  e1500001          CMP      r0,r1
00053c  1afffff5          BNE      |L1.1304|
                  |L1.1344|
000540  e5d20000          LDRB     r0,[r2,#0]
000544  e1500001          CMP      r0,r1
000548  0a000001          BEQ      |L1.1364|
00054c  e3a00000          MOV      r0,#0
000550  eaffffeb          B        |L1.1284|
                  |L1.1364|
000554  e1a00002          MOV      r0,r2
000558  eaffffe9          B        |L1.1284|
                          ENDP

                  Str_Char_N PROC
;;;873                           CPU_CHAR     srch_char)
;;;874    {
00055c  e52de004          PUSH     {lr}
000560  e1a03000          MOV      r3,r0
;;;875        CPU_CHAR    *pstr_next;
;;;876        CPU_SIZE_T   len_srch;
;;;877    
;;;878    
;;;879        if (pstr == (CPU_CHAR *)0) {                                /* Rtn NULL if srch str ptr NULL    (see Note #2a).     */
000564  e3530000          CMP      r3,#0
000568  1a000002          BNE      |L1.1400|
;;;880            return ((CPU_CHAR *)0);
00056c  e3a00000          MOV      r0,#0
                  |L1.1392|
000570  e49de004          POP      {lr}
;;;881        }
;;;882    
;;;883        if (len_max == (CPU_SIZE_T)0) {                             /* Rtn NULL if srch len equals zero (see Note #2e).     */
;;;884            return ((CPU_CHAR *)0);
;;;885        }
;;;886    
;;;887    
;;;888        pstr_next = pstr;
;;;889        pstr_next++;
;;;890        len_srch  = 0;
;;;891        while (( pstr_next != (CPU_CHAR *)0)         &&             /* Srch str until NULL ptr(s)  (see Note #2b)  ...      */
;;;892               (*pstr      != (CPU_CHAR  )0)         &&             /* ... or NULL char            (see Note #2c)  ...      */
;;;893               (*pstr      != (CPU_CHAR  )srch_char) &&             /* ... or srch char found      (see Note #2d); ...      */
;;;894               ( len_srch  <  (CPU_SIZE_T)len_max)) {               /* ... or max nbr chars srch'd (see Note #2e).          */
;;;895            pstr++;
;;;896            pstr_next++;
;;;897            len_srch++;
;;;898        }
;;;899    
;;;900    
;;;901        if (*pstr != srch_char) {                                   /* If srch char NOT found, str points to NULL; ...      */
;;;902            return ((CPU_CHAR *)0);                                 /* ... rtn NULL (see Notes #2b & #2c).                  */
;;;903        }
;;;904    
;;;905        return (pstr);                                              /* Else rtn ptr to found srch char (see Note #2d).      */
;;;906    }
000574  e12fff1e          BX       lr
                  |L1.1400|
000578  e3510000          CMP      r1,#0
00057c  1a000001          BNE      |L1.1416|
000580  e3a00000          MOV      r0,#0
000584  eafffff9          B        |L1.1392|
                  |L1.1416|
000588  e1a0c003          MOV      r12,r3
00058c  e1a0300c          MOV      r3,r12
000590  e28cc001          ADD      r12,r12,#1
000594  e3a0e000          MOV      lr,#0
000598  ea000002          B        |L1.1448|
                  |L1.1436|
00059c  e2833001          ADD      r3,r3,#1
0005a0  e28cc001          ADD      r12,r12,#1
0005a4  e28ee001          ADD      lr,lr,#1
                  |L1.1448|
0005a8  e35c0000          CMP      r12,#0
0005ac  0a000007          BEQ      |L1.1488|
0005b0  e5d30000          LDRB     r0,[r3,#0]
0005b4  e3500000          CMP      r0,#0
0005b8  0a000004          BEQ      |L1.1488|
0005bc  e5d30000          LDRB     r0,[r3,#0]
0005c0  e1500002          CMP      r0,r2
0005c4  0a000001          BEQ      |L1.1488|
0005c8  e15e0001          CMP      lr,r1
0005cc  3afffff2          BCC      |L1.1436|
                  |L1.1488|
0005d0  e5d30000          LDRB     r0,[r3,#0]
0005d4  e1500002          CMP      r0,r2
0005d8  0a000001          BEQ      |L1.1508|
0005dc  e3a00000          MOV      r0,#0
0005e0  eaffffe2          B        |L1.1392|
                  |L1.1508|
0005e4  e1a00003          MOV      r0,r3
0005e8  eaffffe0          B        |L1.1392|
                          ENDP

                  Str_Char_Last PROC
;;;948                              CPU_CHAR   srch_char)
;;;949    {
0005ec  e92d4070          PUSH     {r4-r6,lr}
0005f0  e1a03000          MOV      r3,r0
0005f4  e1a04001          MOV      r4,r1
;;;950        CPU_CHAR    *pstr_next;
;;;951        CPU_SIZE_T   str_len;
;;;952    
;;;953    
;;;954        if (pstr == (CPU_CHAR *)0) {                                /* Rtn NULL if srch str ptr NULL (see Note #2a).        */
0005f8  e3530000          CMP      r3,#0
0005fc  1a000002          BNE      |L1.1548|
;;;955            return ((CPU_CHAR *)0);
000600  e3a00000          MOV      r0,#0
                  |L1.1540|
000604  e8bd4070          POP      {r4-r6,lr}
;;;956        }
;;;957    
;;;958    
;;;959        pstr_next  = pstr;
;;;960        str_len    = Str_Len(pstr);
;;;961        pstr_next += str_len;
;;;962        while (( pstr_next != pstr) &&                              /* Srch str from end until beg (see Note #2c) ...       */
;;;963               (*pstr_next != srch_char)) {                         /* ... until srch char found   (see Note #2d).          */
;;;964            pstr_next--;
;;;965        }
;;;966    
;;;967    
;;;968        if (*pstr_next != srch_char) {                              /* If srch char NOT found, str points to NULL; ...      */
;;;969            return ((CPU_CHAR *)0);                                 /* ... rtn NULL (see Notes #2b & #2c).                  */
;;;970        }
;;;971    
;;;972        return (pstr_next);                                         /* Else rtn ptr to found srch char (see Note #2d).      */
;;;973    }
000608  e12fff1e          BX       lr
                  |L1.1548|
00060c  e1a06003          MOV      r6,r3
000610  e1a00003          MOV      r0,r3
000614  ebfffffe          BL       Str_Len
000618  e1a05000          MOV      r5,r0
00061c  e1a03006          MOV      r3,r6
000620  e0866005          ADD      r6,r6,r5
000624  ea000000          B        |L1.1580|
                  |L1.1576|
000628  e2466001          SUB      r6,r6,#1
                  |L1.1580|
00062c  e1560003          CMP      r6,r3
000630  0a000002          BEQ      |L1.1600|
000634  e5d60000          LDRB     r0,[r6,#0]
000638  e1500004          CMP      r0,r4
00063c  1afffff9          BNE      |L1.1576|
                  |L1.1600|
000640  e5d60000          LDRB     r0,[r6,#0]
000644  e1500004          CMP      r0,r4
000648  0a000001          BEQ      |L1.1620|
00064c  e3a00000          MOV      r0,#0
000650  eaffffeb          B        |L1.1540|
                  |L1.1620|
000654  e1a00006          MOV      r0,r6
000658  eaffffe9          B        |L1.1540|
                          ENDP

                  Str_Str PROC
;;;1018                       CPU_CHAR  *psrch_str)
;;;1019   {
00065c  e92d4ff3          PUSH     {r0,r1,r4-r11,lr}
000660  e1a04000          MOV      r4,r0
;;;1020       CPU_SIZE_T    str_len;
;;;1021       CPU_SIZE_T    srch_str_len;
;;;1022       CPU_SIZE_T    srch_len;
;;;1023       CPU_SIZE_T    srch_ix;
;;;1024       CPU_BOOLEAN   srch_done;
;;;1025       CPU_INT16S    srch_cmp;
;;;1026       CPU_CHAR     *pstr_srch_ix;
;;;1027   
;;;1028                                                                   /* Rtn NULL if str ptr(s) NULL (see Note #2a).          */
;;;1029       if (pstr == (CPU_CHAR *)0) {
000664  e3540000          CMP      r4,#0
000668  1a000002          BNE      |L1.1656|
;;;1030           return ((CPU_CHAR *)0);
00066c  e3a00000          MOV      r0,#0
                  |L1.1648|
000670  e8bd4ffc          POP      {r2-r11,lr}
;;;1031       }
;;;1032       if (psrch_str == (CPU_CHAR *)0) {
;;;1033           return ((CPU_CHAR *)0);
;;;1034       }
;;;1035   
;;;1036   
;;;1037       str_len      = Str_Len(pstr);
;;;1038       srch_str_len = Str_Len(psrch_str);
;;;1039       if (srch_str_len > str_len) {                               /* If srch str len > str len, rtn NULL  (see Note #2b). */
;;;1040           return ((CPU_CHAR *)0);
;;;1041       }
;;;1042       if (srch_str_len == 0) {                                    /* If srch str len = 0, srch str equal NULL str; ...    */
;;;1043           pstr_srch_ix = (CPU_CHAR *)(pstr + str_len);            /* ... rtn ptr to NULL str found in str (see Note #2c). */
;;;1044           return (pstr_srch_ix);
;;;1045       }
;;;1046   
;;;1047       srch_len  = str_len - srch_str_len;                         /* Determine srch len (see Note #2d1).                  */
;;;1048       srch_ix   = 0;
;;;1049       srch_done = DEF_NO;
;;;1050       while ((srch_done == DEF_NO) && (srch_ix <= srch_len)) {
;;;1051           pstr_srch_ix = (CPU_CHAR *)(pstr + srch_ix);
;;;1052           srch_cmp     =  Str_Cmp_N(pstr_srch_ix, psrch_str, srch_str_len);
;;;1053           srch_done    = (srch_cmp == 0) ? DEF_YES : DEF_NO;
;;;1054           srch_ix++;
;;;1055       }
;;;1056   
;;;1057   
;;;1058       if (srch_cmp != 0) {                                        /* If srch str NOT found, rtn NULL  (see Note #2d).     */
;;;1059           return ((CPU_CHAR *)0);
;;;1060       }
;;;1061   
;;;1062       return (pstr_srch_ix);                                      /* Rtn ptr to srch str found in str (see Note #2e).     */
;;;1063   }
000674  e12fff1e          BX       lr
                  |L1.1656|
000678  e59d0004          LDR      r0,[sp,#4]
00067c  e3500000          CMP      r0,#0
000680  1a000001          BNE      |L1.1676|
000684  e3a00000          MOV      r0,#0
000688  eafffff8          B        |L1.1648|
                  |L1.1676|
00068c  e1a00004          MOV      r0,r4
000690  ebfffffe          BL       Str_Len
000694  e1a05000          MOV      r5,r0
000698  e59d0004          LDR      r0,[sp,#4]
00069c  ebfffffe          BL       Str_Len
0006a0  e1a06000          MOV      r6,r0
0006a4  e1560005          CMP      r6,r5
0006a8  9a000001          BLS      |L1.1716|
0006ac  e3a00000          MOV      r0,#0
0006b0  eaffffee          B        |L1.1648|
                  |L1.1716|
0006b4  e3560000          CMP      r6,#0
0006b8  1a000002          BNE      |L1.1736|
0006bc  e084b005          ADD      r11,r4,r5
0006c0  e1a0000b          MOV      r0,r11
0006c4  eaffffe9          B        |L1.1648|
                  |L1.1736|
0006c8  e0457006          SUB      r7,r5,r6
0006cc  e3a08000          MOV      r8,#0
0006d0  e3a09000          MOV      r9,#0
0006d4  ea00000c          B        |L1.1804|
                  |L1.1752|
0006d8  e084b008          ADD      r11,r4,r8
0006dc  e1a02006          MOV      r2,r6
0006e0  e1a0000b          MOV      r0,r11
0006e4  e59d1004          LDR      r1,[sp,#4]
0006e8  ebfffffe          BL       Str_Cmp_N
0006ec  e1a0a000          MOV      r10,r0
0006f0  e35a0000          CMP      r10,#0
0006f4  1a000001          BNE      |L1.1792|
0006f8  e3a00001          MOV      r0,#1
0006fc  ea000000          B        |L1.1796|
                  |L1.1792|
000700  e3a00000          MOV      r0,#0
                  |L1.1796|
000704  e20090ff          AND      r9,r0,#0xff
000708  e2888001          ADD      r8,r8,#1
                  |L1.1804|
00070c  e3590000          CMP      r9,#0
000710  1a000001          BNE      |L1.1820|
000714  e1580007          CMP      r8,r7
000718  9affffee          BLS      |L1.1752|
                  |L1.1820|
00071c  e35a0000          CMP      r10,#0
000720  0a000001          BEQ      |L1.1836|
000724  e3a00000          MOV      r0,#0
000728  eaffffd0          B        |L1.1648|
                  |L1.1836|
00072c  e1a0000b          MOV      r0,r11
000730  eaffffce          B        |L1.1648|
                          ENDP

⌨️ 快捷键说明

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