📄 lib_str.txt
字号:
|L1.796|
00031c e2600000 RSB r0,r0,#0 ;747
000320 eafffff5 B |L1.764|
;;;757
ENDP
Str_Char PROC
;;;801
;;;802 if (pstr == (CPU_CHAR *)0) { /* Rtn NULL if srch str ptr NULL (see Note #2a). */
000324 e3500000 CMP r0,#0
000328 0a00000b BEQ |L1.860|
;;;803 return ((CPU_CHAR *)0);
;;;804 }
;;;805
;;;806
;;;807 pstr_next = pstr;
;;;808 pstr_next++;
00032c e2802001 ADD r2,r0,#1
;;;809 while (( pstr_next != (CPU_CHAR *)0) && /* Srch str until NULL ptr(s) (see Note #2b) ... */
000330 ea000001 B |L1.828|
|L1.820|
;;;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++;
000334 e2800001 ADD r0,r0,#1
;;;813 pstr_next++;
000338 e2822001 ADD r2,r2,#1
|L1.828|
00033c e3520000 CMP r2,#0 ;809
000340 15d03000 LDRBNE r3,[r0,#0] ;810
000344 13530000 CMPNE r3,#0 ;810
000348 11530001 CMPNE r3,r1 ;811
00034c 1afffff8 BNE |L1.820|
;;;814 }
;;;815
;;;816
;;;817 if (*pstr != srch_char) { /* If srch char NOT found, str points to NULL; ... */
000350 e5d02000 LDRB r2,[r0,#0]
000354 e1520001 CMP r2,r1
;;;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 }
000358 012fff1e BXEQ lr
|L1.860|
00035c e3a00000 MOV r0,#0 ;818
000360 e12fff1e BX lr
;;;823
ENDP
Str_Char_N PROC
;;;879
;;;880 if (pstr == (CPU_CHAR *)0) { /* Rtn NULL if srch str ptr NULL (see Note #2a). */
000364 e3500000 CMP r0,#0
;;;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). */
000368 13510000 CMPNE r1,#0
00036c e52de004 PUSH {lr}
000370 0a00000e BEQ |L1.944|
;;;885 return ((CPU_CHAR *)0);
;;;886 }
;;;887
;;;888
;;;889 pstr_next = pstr;
;;;890 pstr_next++;
000374 e280c001 ADD r12,r0,#1
;;;891 len_srch = 0;
000378 e3a03000 MOV r3,#0
;;;892 while (( pstr_next != (CPU_CHAR *)0) && /* Srch str until NULL ptr(s) (see Note #2b) ... */
00037c ea000002 B |L1.908|
|L1.896|
;;;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++;
000380 e2800001 ADD r0,r0,#1
;;;897 pstr_next++;
000384 e28cc001 ADD r12,r12,#1
;;;898 len_srch++;
000388 e2833001 ADD r3,r3,#1
|L1.908|
00038c e35c0000 CMP r12,#0 ;892
000390 15d0e000 LDRBNE lr,[r0,#0] ;893
000394 135e0000 CMPNE lr,#0 ;893
000398 115e0002 CMPNE lr,r2 ;894
00039c 11530001 CMPNE r3,r1 ;895
0003a0 3afffff6 BCC |L1.896|
;;;899 }
;;;900
;;;901
;;;902 if (*pstr != srch_char) { /* If srch char NOT found, str points to NULL; ... */
0003a4 e5d01000 LDRB r1,[r0,#0]
0003a8 e1510002 CMP r1,r2
0003ac 0a000000 BEQ |L1.948|
|L1.944|
;;;903 return ((CPU_CHAR *)0); /* ... rtn NULL (see Notes #2b & #2c). */
0003b0 e3a00000 MOV r0,#0
|L1.948|
0003b4 e49de004 POP {lr}
;;;904 }
;;;905
;;;906 return (pstr); /* Else rtn ptr to found srch char (see Note #2d). */
;;;907 }
0003b8 e12fff1e BX lr
;;;908
ENDP
Str_Char_Last PROC
;;;949 CPU_CHAR srch_char)
;;;950 {
0003bc e1b03000 MOVS r3,r0
0003c0 e1a0c001 MOV r12,r1
0003c4 e52de004 PUSH {lr}
;;;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). */
0003c8 0a00000b BEQ |L1.1020|
;;;956 return ((CPU_CHAR *)0);
;;;957 }
;;;958
;;;959
;;;960 pstr_next = pstr;
;;;961 str_len = Str_Len(pstr);
0003cc e1a00003 MOV r0,r3
0003d0 ebfffffe BL Str_Len
;;;962 pstr_next += str_len;
0003d4 e0800003 ADD r0,r0,r3
;;;963 while (( pstr_next != pstr) && /* Srch str from end until beg (see Note #2c) ... */
0003d8 ea000000 B |L1.992|
|L1.988|
;;;964 (*pstr_next != srch_char)) { /* ... until srch char found (see Note #2d). */
;;;965 pstr_next--;
0003dc e2400001 SUB r0,r0,#1
|L1.992|
0003e0 e1500003 CMP r0,r3 ;963
0003e4 15d01000 LDRBNE r1,[r0,#0] ;964
0003e8 1151000c CMPNE r1,r12 ;964
0003ec 1afffffa BNE |L1.988|
;;;966 }
;;;967
;;;968
;;;969 if (*pstr_next != srch_char) { /* If srch char NOT found, str points to NULL; ... */
0003f0 e5d01000 LDRB r1,[r0,#0]
0003f4 e151000c CMP r1,r12
0003f8 0a000000 BEQ |L1.1024|
|L1.1020|
;;;970 return ((CPU_CHAR *)0); /* ... rtn NULL (see Notes #2b & #2c). */
0003fc e3a00000 MOV r0,#0
|L1.1024|
000400 e49de004 POP {lr}
;;;971 }
;;;972
;;;973 return (pstr_next); /* Else rtn ptr to found srch char (see Note #2d). */
;;;974 }
000404 e12fff1e BX lr
;;;975
ENDP
Str_Str PROC
;;;1019 CPU_CHAR *psrch_str)
;;;1020 {
000408 e92d43f0 PUSH {r4-r9,lr}
00040c e1b06000 MOVS r6,r0
000410 e1a09001 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) {
;;;1031 return ((CPU_CHAR *)0);
;;;1032 }
;;;1033 if (psrch_str == (CPU_CHAR *)0) {
000414 13590000 CMPNE r9,#0
000418 0a00001d BEQ |L1.1172|
;;;1034 return ((CPU_CHAR *)0);
;;;1035 }
;;;1036
;;;1037
;;;1038 str_len = Str_Len(pstr);
00041c e1a00006 MOV r0,r6
000420 ebfffffe BL Str_Len
000424 e1a0c000 MOV r12,r0
;;;1039 srch_str_len = Str_Len(psrch_str);
000428 e1a00009 MOV r0,r9
00042c ebfffffe BL Str_Len
;;;1040 if (srch_str_len > str_len) { /* If srch str len > str len, rtn NULL (see Note #2b). */
000430 e150000c CMP r0,r12
000434 e1a05000 MOV r5,r0 ;1039
000438 8a000015 BHI |L1.1172|
;;;1041 return ((CPU_CHAR *)0);
;;;1042 }
;;;1043 if (srch_str_len == 0) { /* If srch str len = 0, srch str equal NULL str; ... */
00043c e3550000 CMP r5,#0
;;;1044 pstr_srch_ix = (CPU_CHAR *)(pstr + str_len); /* ... rtn ptr to NULL str found in str (see Note #2c). */
000440 0086000c ADDEQ r0,r6,r12
;;;1045 return (pstr_srch_ix);
000444 0a000013 BEQ |L1.1176|
;;;1046 }
;;;1047
;;;1048 srch_len = str_len - srch_str_len; /* Determine srch len (see Note #2d1). */
000448 e04c7005 SUB r7,r12,r5
;;;1049 srch_ix = 0;
00044c e3a04000 MOV r4,#0
;;;1050 srch_done = DEF_NO;
;;;1051 while ((srch_done == DEF_NO) && (srch_ix <= srch_len)) {
000450 ea00000a B |L1.1152|
|L1.1108|
;;;1052 pstr_srch_ix = (CPU_CHAR *)(pstr + srch_ix);
000454 e0868004 ADD r8,r6,r4
;;;1053 srch_cmp = Str_Cmp_N(pstr_srch_ix, psrch_str, srch_str_len);
000458 e1a02005 MOV r2,r5
00045c e1a01009 MOV r1,r9
000460 e1a00008 MOV r0,r8
000464 ebfffffe BL Str_Cmp_N
000468 e1b03000 MOVS r3,r0
;;;1054 srch_done = (srch_cmp == 0) ? DEF_YES : DEF_NO;
00046c 13a01000 MOVNE r1,#0
000470 03a01001 MOVEQ r1,#1
000474 e3510000 CMP r1,#0 ;1051
;;;1055 srch_ix++;
000478 e2844001 ADD r4,r4,#1
00047c 1a000001 BNE |L1.1160|
|L1.1152|
000480 e1540007 CMP r4,r7 ;1051
000484 9afffff2 BLS |L1.1108|
|L1.1160|
;;;1056 }
;;;1057
;;;1058
;;;1059 if (srch_cmp != 0) { /* If srch str NOT found, rtn NULL (see Note #2d). */
000488 e3530000 CMP r3,#0
;;;1060 return ((CPU_CHAR *)0);
;;;1061 }
;;;1062
;;;1063 return (pstr_srch_ix); /* Rtn ptr to srch str found in str (see Note #2e). */
00048c 01a00008 MOVEQ r0,r8
000490 0a000000 BEQ |L1.1176|
|L1.1172|
000494 e3a00000 MOV r0,#0 ;1060
|L1.1176|
000498 e8bd43f0 POP {r4-r9,lr} ;1060
;;;1064 }
00049c e12fff1e BX lr
;;;1065
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -