📄 lib_str.txt
字号:
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 + -