📄 lib_str.txt
字号:
00020c 4770 BX lr
|L1.526|
00020e b953 CBNZ r3,|L1.550|
000210 f1bcf1bc CMP r12,#0
000214 d102 BNE |L1.540|
000216 bc70 POP {r4-r6}
000218 2000 MOVS r0,#0
00021a 4770 BX lr
|L1.540|
00021c f89cf89c LDRB r0,[r12,#0]
000220 bc70 POP {r4-r6}
000222 4240 RSBS r0,r0,#0
000224 4770 BX lr
|L1.550|
000226 7818 LDRB r0,[r3,#0]
000228 bc70 POP {r4-r6}
00022a 4770 BX lr
;;;757
ENDP
Str_Char PROC
;;;801
;;;802 if (pstr == (CPU_CHAR *)0) { /* Rtn NULL if srch str ptr NULL (see Note #2a). */
00022c b908 CBNZ r0,|L1.562|
;;;803 return ((CPU_CHAR *)0);
00022e 2000 MOVS r0,#0
|L1.560|
;;;804 }
;;;805
;;;806
;;;807 pstr_next = pstr;
;;;808 pstr_next++;
;;;809 while (( pstr_next != (CPU_CHAR *)0) && /* Srch str until NULL ptr(s) (see Note #2b) ... */
;;;810 (*pstr != (CPU_CHAR )0) && /* ... or NULL char (see Note #2c) ... */
;;;811 (*pstr != (CPU_CHAR )srch_char)) { /* ... or srch char found (see Note #2d). */
;;;812 pstr++;
;;;813 pstr_next++;
;;;814 }
;;;815
;;;816
;;;817 if (*pstr != srch_char) { /* If srch char NOT found, str points to NULL; ... */
;;;818 return ((CPU_CHAR *)0); /* ... rtn NULL (see Notes #2b & #2c). */
;;;819 }
;;;820
;;;821 return (pstr); /* Else rtn ptr to found srch char (see Note #2d). */
;;;822 }
000230 4770 BX lr
|L1.562|
000232 1c42 ADDS r2,r0,#1
000234 e001 B |L1.570|
|L1.566|
000236 1c40 ADDS r0,r0,#1
000238 1c52 ADDS r2,r2,#1
|L1.570|
00023a b11a CBZ r2,|L1.580|
00023c 7803 LDRB r3,[r0,#0]
00023e b10b CBZ r3,|L1.580|
000240 428b CMP r3,r1
000242 d1f8 BNE |L1.566|
|L1.580|
000244 7802 LDRB r2,[r0,#0]
000246 428a CMP r2,r1
000248 d0f2 BEQ |L1.560|
00024a 2000 MOVS r0,#0
00024c 4770 BX lr
;;;823
ENDP
Str_Char_N PROC
;;;874 CPU_CHAR srch_char)
;;;875 {
00024e b410 PUSH {r4}
;;;876 CPU_CHAR *pstr_next;
;;;877 CPU_SIZE_T len_srch;
;;;878
;;;879
;;;880 if (pstr == (CPU_CHAR *)0) { /* Rtn NULL if srch str ptr NULL (see Note #2a). */
000250 b910 CBNZ r0,|L1.600|
;;;881 return ((CPU_CHAR *)0);
;;;882 }
;;;883
;;;884 if (len_max == (CPU_SIZE_T)0) { /* Rtn NULL if srch len equals zero (see Note #2e). */
;;;885 return ((CPU_CHAR *)0);
;;;886 }
;;;887
;;;888
;;;889 pstr_next = pstr;
;;;890 pstr_next++;
;;;891 len_srch = 0;
;;;892 while (( pstr_next != (CPU_CHAR *)0) && /* Srch str until NULL ptr(s) (see Note #2b) ... */
;;;893 (*pstr != (CPU_CHAR )0) && /* ... or NULL char (see Note #2c) ... */
;;;894 (*pstr != (CPU_CHAR )srch_char) && /* ... or srch char found (see Note #2d); ... */
;;;895 ( len_srch < (CPU_SIZE_T)len_max)) { /* ... or max nbr chars srch'd (see Note #2e). */
;;;896 pstr++;
;;;897 pstr_next++;
;;;898 len_srch++;
;;;899 }
;;;900
;;;901
;;;902 if (*pstr != srch_char) { /* If srch char NOT found, str points to NULL; ... */
;;;903 return ((CPU_CHAR *)0); /* ... rtn NULL (see Notes #2b & #2c). */
;;;904 }
;;;905
;;;906 return (pstr); /* Else rtn ptr to found srch char (see Note #2d). */
;;;907 }
000252 bc10 POP {r4}
000254 2000 MOVS r0,#0
000256 4770 BX lr
|L1.600|
000258 b911 CBNZ r1,|L1.608|
00025a 2000 MOVS r0,#0
|L1.604|
00025c bc10 POP {r4}
00025e 4770 BX lr
|L1.608|
000260 f100f100 ADD r12,r0,#1
000264 2300 MOVS r3,#0
000266 e003 B |L1.624|
|L1.616|
000268 1c40 ADDS r0,r0,#1
00026a f10cf10c ADD r12,r12,#1
00026e 1c5b ADDS r3,r3,#1
|L1.624|
000270 f1bcf1bc CMP r12,#0
000274 d005 BEQ |L1.642|
000276 7804 LDRB r4,[r0,#0]
000278 b11c CBZ r4,|L1.642|
00027a 4294 CMP r4,r2
00027c d001 BEQ |L1.642|
00027e 428b CMP r3,r1
000280 d3f2 BCC |L1.616|
|L1.642|
000282 7801 LDRB r1,[r0,#0]
000284 4291 CMP r1,r2
000286 d0e9 BEQ |L1.604|
000288 bc10 POP {r4}
00028a 2000 MOVS r0,#0
00028c 4770 BX lr
;;;908
ENDP
Str_Char_Last PROC
;;;949 CPU_CHAR srch_char)
;;;950 {
00028e b510 PUSH {r4,lr}
000290 4603 MOV r3,r0
000292 460c MOV r4,r1
;;;951 CPU_CHAR *pstr_next;
;;;952 CPU_SIZE_T str_len;
;;;953
;;;954
;;;955 if (pstr == (CPU_CHAR *)0) { /* Rtn NULL if srch str ptr NULL (see Note #2a). */
000294 b90b CBNZ r3,|L1.666|
;;;956 return ((CPU_CHAR *)0);
000296 2000 MOVS r0,#0
|L1.664|
;;;957 }
;;;958
;;;959
;;;960 pstr_next = pstr;
;;;961 str_len = Str_Len(pstr);
;;;962 pstr_next += str_len;
;;;963 while (( pstr_next != pstr) && /* Srch str from end until beg (see Note #2c) ... */
;;;964 (*pstr_next != srch_char)) { /* ... until srch char found (see Note #2d). */
;;;965 pstr_next--;
;;;966 }
;;;967
;;;968
;;;969 if (*pstr_next != srch_char) { /* If srch char NOT found, str points to NULL; ... */
;;;970 return ((CPU_CHAR *)0); /* ... rtn NULL (see Notes #2b & #2c). */
;;;971 }
;;;972
;;;973 return (pstr_next); /* Else rtn ptr to found srch char (see Note #2d). */
;;;974 }
000298 bd10 POP {r4,pc}
|L1.666|
00029a 4618 MOV r0,r3
00029c f7fff7ff BL Str_Len
0002a0 4418 ADD r0,r0,r3
0002a2 e000 B |L1.678|
|L1.676|
0002a4 1e40 SUBS r0,r0,#1
|L1.678|
0002a6 4298 CMP r0,r3
0002a8 d002 BEQ |L1.688|
0002aa 7801 LDRB r1,[r0,#0]
0002ac 42a1 CMP r1,r4
0002ae d1f9 BNE |L1.676|
|L1.688|
0002b0 7801 LDRB r1,[r0,#0]
0002b2 42a1 CMP r1,r4
0002b4 d0f0 BEQ |L1.664|
0002b6 2000 MOVS r0,#0
0002b8 bd10 POP {r4,pc}
;;;975
ENDP
Str_Str PROC
;;;1019 CPU_CHAR *psrch_str)
;;;1020 {
0002ba e92de92d PUSH {r4-r9,lr}
0002be 4605 MOV r5,r0
0002c0 4689 MOV r9,r1
;;;1021 CPU_SIZE_T str_len;
;;;1022 CPU_SIZE_T srch_str_len;
;;;1023 CPU_SIZE_T srch_len;
;;;1024 CPU_SIZE_T srch_ix;
;;;1025 CPU_BOOLEAN srch_done;
;;;1026 CPU_INT16S srch_cmp;
;;;1027 CPU_CHAR *pstr_srch_ix;
;;;1028
;;;1029 /* Rtn NULL if str ptr(s) NULL (see Note #2a). */
;;;1030 if (pstr == (CPU_CHAR *)0) {
0002c2 b915 CBNZ r5,|L1.714|
;;;1031 return ((CPU_CHAR *)0);
0002c4 2000 MOVS r0,#0
0002c6 e8bde8bd POP {r4-r9,pc}
|L1.714|
;;;1032 }
;;;1033 if (psrch_str == (CPU_CHAR *)0) {
0002ca f1b9f1b9 CMP r9,#0
0002ce d102 BNE |L1.726|
;;;1034 return ((CPU_CHAR *)0);
0002d0 2000 MOVS r0,#0
0002d2 e8bde8bd POP {r4-r9,pc}
|L1.726|
;;;1035 }
;;;1036
;;;1037
;;;1038 str_len = Str_Len(pstr);
0002d6 4628 MOV r0,r5
0002d8 f7fff7ff BL Str_Len
0002dc 4604 MOV r4,r0
;;;1039 srch_str_len = Str_Len(psrch_str);
0002de 4648 MOV r0,r9
0002e0 f7fff7ff BL Str_Len
0002e4 4606 MOV r6,r0
;;;1040 if (srch_str_len > str_len) { /* If srch str len > str len, rtn NULL (see Note #2b). */
0002e6 42a6 CMP r6,r4
0002e8 d902 BLS |L1.752|
;;;1041 return ((CPU_CHAR *)0);
0002ea 2000 MOVS r0,#0
0002ec e8bde8bd POP {r4-r9,pc}
|L1.752|
;;;1042 }
;;;1043 if (srch_str_len == 0) { /* If srch str len = 0, srch str equal NULL str; ... */
0002f0 b916 CBNZ r6,|L1.760|
;;;1044 pstr_srch_ix = (CPU_CHAR *)(pstr + str_len); /* ... rtn ptr to NULL str found in str (see Note #2c). */
0002f2 1928 ADDS r0,r5,r4
0002f4 e8bde8bd POP {r4-r9,pc}
|L1.760|
;;;1045 return (pstr_srch_ix);
;;;1046 }
;;;1047
;;;1048 srch_len = str_len - srch_str_len; /* Determine srch len (see Note #2d1). */
0002f8 1ba7 SUBS r7,r4,r6
;;;1049 srch_ix = 0;
0002fa 2400 MOVS r4,#0
;;;1050 srch_done = DEF_NO;
0002fc 2100 MOVS r1,#0
;;;1051 while ((srch_done == DEF_NO) && (srch_ix <= srch_len)) {
0002fe e00c B |L1.794|
|L1.768|
;;;1052 pstr_srch_ix = (CPU_CHAR *)(pstr + srch_ix);
000300 eb05eb05 ADD r8,r5,r4
;;;1053 srch_cmp = Str_Cmp_N(pstr_srch_ix, psrch_str, srch_str_len);
000304 4632 MOV r2,r6
000306 4649 MOV r1,r9
000308 4640 MOV r0,r8
00030a f7fff7ff BL Str_Cmp_N
00030e 4603 MOV r3,r0
;;;1054 srch_done = (srch_cmp == 0) ? DEF_YES : DEF_NO;
000310 b90b CBNZ r3,|L1.790|
000312 2101 MOVS r1,#1
000314 e000 B |L1.792|
|L1.790|
000316 2100 MOVS r1,#0
|L1.792|
;;;1055 srch_ix++;
000318 1c64 ADDS r4,r4,#1
|L1.794|
00031a b909 CBNZ r1,|L1.800|
00031c 42bc CMP r4,r7
00031e d9ef BLS |L1.768|
|L1.800|
;;;1056 }
;;;1057
;;;1058
;;;1059 if (srch_cmp != 0) { /* If srch str NOT found, rtn NULL (see Note #2d). */
000320 b113 CBZ r3,|L1.808|
;;;1060 return ((CPU_CHAR *)0);
000322 2000 MOVS r0,#0
000324 e8bde8bd POP {r4-r9,pc}
|L1.808|
;;;1061 }
;;;1062
;;;1063 return (pstr_srch_ix); /* Rtn ptr to srch str found in str (see Note #2e). */
000328 4640 MOV r0,r8
;;;1064 }
00032a e8bde8bd POP {r4-r9,pc}
;;;1065
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -