📄 lib_str.txt
字号:
;;;488 pstr_next++;
;;;489 pstr_cat++;
;;;490 len_cat++;
;;;491 }
;;;492
;;;493 *pstr = (CPU_CHAR)0; /* Append NULL char (see Note #2c2). */
;;;494
;;;495
;;;496 return (pdest);
;;;497 }
000178 e12fff1e BX lr
|L1.380|
00017c e28ee001 ADD lr,lr,#1 ;488
000180 e2811001 ADD r1,r1,#1 ;489
000184 e28cc001 ADD r12,r12,#1 ;490
000188 e4c34001 STRB r4,[r3],#1 ;486
|L1.396|
00018c e35e0000 CMP lr,#0 ;482
000190 13510000 CMPNE r1,#0 ;483
000194 15d14000 LDRBNE r4,[r1,#0] ;484
000198 13540000 CMPNE r4,#0 ;484
00019c 115c0002 CMPNE r12,r2 ;485
0001a0 3afffff5 BCC |L1.380|
0001a4 e3a01000 MOV r1,#0 ;493
0001a8 e5c31000 STRB r1,[r3,#0] ;493
0001ac eafffff0 B |L1.372|
;;;498
ENDP
Str_Cmp PROC
;;;567
;;;568 if (p1_str == (CPU_CHAR *)0) {
0001b0 e3500000 CMP r0,#0
0001b4 e52de004 PUSH {lr}
0001b8 1a000003 BNE |L1.460|
;;;569 if (p2_str == (CPU_CHAR *)0) {
0001bc e3510000 CMP r1,#0
;;;570 return ((CPU_INT16S)0); /* If BOTH str ptrs NULL, rtn 0 (see Note #2a). */
;;;571 }
;;;572 cmp_val = (CPU_INT16S)0 - (CPU_INT16S)(*p2_str);
0001c0 15d10000 LDRBNE r0,[r1,#0]
;;;573 return (cmp_val); /* If p1_str NULL, rtn neg p2_str val (see Note #2b). */
0001c4 1a000022 BNE |L1.596|
0001c8 ea000018 B |L1.560|
|L1.460|
;;;574 }
;;;575 if (p2_str == (CPU_CHAR *)0) {
0001cc e3510000 CMP r1,#0
;;;576 cmp_val = (CPU_INT16S)(*p1_str);
0001d0 05d00000 LDRBEQ r0,[r0,#0]
;;;577 return (cmp_val); /* If p2_str NULL, rtn pos p1_str val (see Note #2c). */
0001d4 0a000016 BEQ |L1.564|
;;;578 }
;;;579
;;;580
;;;581 p1_str_next = p1_str;
;;;582 p2_str_next = p2_str;
;;;583 p1_str_next++;
0001d8 e2802001 ADD r2,r0,#1
;;;584 p2_str_next++;
0001dc e2813001 ADD r3,r1,#1
;;;585 while ((*p1_str == *p2_str) && /* Cmp strs until non-matching char (see Note #2d) .. */
0001e0 ea000003 B |L1.500|
|L1.484|
;;;586 (*p1_str != (CPU_CHAR )0) && /* .. or NULL char(s) (see Note #2e) .. */
;;;587 ( p1_str_next != (CPU_CHAR *)0) && /* .. or NULL ptr(s) found (see Notes #2f, #2g, & #2h). */
;;;588 ( p2_str_next != (CPU_CHAR *)0)) {
;;;589 p1_str_next++;
0001e4 e2822001 ADD r2,r2,#1
;;;590 p2_str_next++;
0001e8 e2833001 ADD r3,r3,#1
;;;591 p1_str++;
0001ec e2800001 ADD r0,r0,#1
;;;592 p2_str++;
0001f0 e2811001 ADD r1,r1,#1
|L1.500|
0001f4 e5d0c000 LDRB r12,[r0,#0] ;585
0001f8 e5d1e000 LDRB lr,[r1,#0] ;585
0001fc e15c000e CMP r12,lr ;585
000200 1a000003 BNE |L1.532|
000204 e35c0000 CMP r12,#0 ;586
000208 13520000 CMPNE r2,#0 ;587
00020c 13530000 CMPNE r3,#0 ;588
000210 1afffff3 BNE |L1.484|
|L1.532|
;;;593 }
;;;594
;;;595
;;;596 if (*p1_str != *p2_str) { /* If strs NOT identical, ... */
000214 e5d0e000 LDRB lr,[r0,#0]
000218 e5d10000 LDRB r0,[r1,#0]
00021c e15e0000 CMP lr,r0
;;;597 cmp_val = (CPU_INT16S)(*p1_str) - (CPU_INT16S)(*p2_str); /* ... calc & rtn char diff (see Note #2d1). */
000220 104c0000 SUBNE r0,r12,r0
000224 1a000002 BNE |L1.564|
;;;598
;;;599 } else if (*p1_str == (CPU_CHAR)0) { /* If NULL char(s) found, ... */
000228 e35c0000 CMP r12,#0
00022c 1a000002 BNE |L1.572|
|L1.560|
;;;600 cmp_val = 0; /* ... strs identical; rtn 0 (see Note #2e). */
000230 e3a00000 MOV r0,#0
|L1.564|
000234 e49de004 POP {lr}
;;;601
;;;602 } else {
;;;603 if (p1_str_next == (CPU_CHAR *)0) {
;;;604 if (p2_str_next == (CPU_CHAR *)0) { /* If BOTH next str ptrs NULL, ... */
;;;605 cmp_val = (CPU_INT16S)0; /* ... rtn 0 (see Note #2f). */
;;;606 } else { /* If p1_str_next NULL, ... */
;;;607 cmp_val = (CPU_INT16S)0 - (CPU_INT16S)(*p2_str_next); /* ... rtn neg p2_str_next val (see Note #2g). */
;;;608 }
;;;609 } else { /* If p2_str_next NULL, ... */
;;;610 cmp_val = (CPU_INT16S)(*p1_str_next); /* ... rtn pos p1_str_next val (see Note #2h). */
;;;611 }
;;;612 }
;;;613
;;;614
;;;615 return (cmp_val);
;;;616 }
000238 e12fff1e BX lr
|L1.572|
00023c e3520000 CMP r2,#0 ;603
000240 15d20000 LDRBNE r0,[r2,#0] ;610
000244 1afffffa BNE |L1.564|
000248 e3530000 CMP r3,#0 ;604
00024c 0afffff7 BEQ |L1.560|
000250 e5d30000 LDRB r0,[r3,#0] ;607
|L1.596|
000254 e2600000 RSB r0,r0,#0 ;607
000258 eafffff5 B |L1.564|
;;;617
ENDP
Str_Cmp_N PROC
;;;689 CPU_SIZE_T len_max)
;;;690 {
00025c e92d4030 PUSH {r4,r5,lr}
;;;691 CPU_CHAR *p1_str_next;
;;;692 CPU_CHAR *p2_str_next;
;;;693 CPU_INT16S cmp_val;
;;;694 CPU_SIZE_T cmp_len;
;;;695
;;;696
;;;697 if (len_max == 0) { /* If cmp len equals zero, rtn 0 (see Note #2i). */
000260 e3520000 CMP r2,#0
000264 0a000023 BEQ |L1.760|
;;;698 return ((CPU_INT16S)0);
;;;699 }
;;;700
;;;701 if (p1_str == (CPU_CHAR *)0) {
000268 e3500000 CMP r0,#0
00026c 1a000003 BNE |L1.640|
;;;702 if (p2_str == (CPU_CHAR *)0) {
000270 e3510000 CMP r1,#0
;;;703 return ((CPU_INT16S)0); /* If BOTH str ptrs NULL, rtn 0 (see Note #2a). */
;;;704 }
;;;705 cmp_val = (CPU_INT16S)0 - (CPU_INT16S)(*p2_str);
000274 15d10000 LDRBNE r0,[r1,#0]
;;;706 return (cmp_val); /* If p1_str NULL, rtn neg p2_str val (see Note #2b). */
000278 1a000027 BNE |L1.796|
00027c ea00001d B |L1.760|
|L1.640|
;;;707 }
;;;708 if (p2_str == (CPU_CHAR *)0) {
000280 e3510000 CMP r1,#0
;;;709 cmp_val = (CPU_INT16S)(*p1_str);
000284 05d00000 LDRBEQ r0,[r0,#0]
;;;710 return (cmp_val); /* If p2_str NULL, rtn pos p1_str val (see Note #2c). */
000288 0a00001b BEQ |L1.764|
;;;711 }
;;;712
;;;713
;;;714 p1_str_next = p1_str;
;;;715 p2_str_next = p2_str;
;;;716 p1_str_next++;
00028c e2803001 ADD r3,r0,#1
;;;717 p2_str_next++;
000290 e281c001 ADD r12,r1,#1
;;;718 cmp_len = 0;
000294 e3a0e000 MOV lr,#0
;;;719 while ((*p1_str == *p2_str) && /* Cmp strs until non-matching char (see Note #2d) .. */
000298 ea000004 B |L1.688|
|L1.668|
;;;720 (*p1_str != (CPU_CHAR )0) && /* .. or NULL char(s) (see Note #2e) .. */
;;;721 ( p1_str_next != (CPU_CHAR *)0) && /* .. or NULL ptr(s) found (see Notes #2f, #2g, & #2h); */
;;;722 ( p2_str_next != (CPU_CHAR *)0) &&
;;;723 ( cmp_len < (CPU_SIZE_T)len_max)) { /* .. or len nbr chars cmp'd (see Note #2j). */
;;;724 p1_str_next++;
00029c e2833001 ADD r3,r3,#1
;;;725 p2_str_next++;
0002a0 e28cc001 ADD r12,r12,#1
;;;726 p1_str++;
0002a4 e2800001 ADD r0,r0,#1
;;;727 p2_str++;
0002a8 e2811001 ADD r1,r1,#1
;;;728 cmp_len++;
0002ac e28ee001 ADD lr,lr,#1
|L1.688|
0002b0 e5d04000 LDRB r4,[r0,#0] ;719
0002b4 e5d15000 LDRB r5,[r1,#0] ;719
0002b8 e1540005 CMP r4,r5 ;719
0002bc 1a000004 BNE |L1.724|
0002c0 e3540000 CMP r4,#0 ;720
0002c4 13530000 CMPNE r3,#0 ;721
0002c8 135c0000 CMPNE r12,#0 ;722
0002cc 115e0002 CMPNE lr,r2 ;723
0002d0 3afffff1 BCC |L1.668|
|L1.724|
;;;729 }
;;;730
;;;731
;;;732 if (cmp_len == len_max) { /* If strs identical for len nbr of chars, */
0002d4 e15e0002 CMP lr,r2
0002d8 0a000006 BEQ |L1.760|
;;;733 return ((CPU_INT16S)0); /* ... rtn 0 (see Note #2j). */
;;;734 }
;;;735
;;;736 if (*p1_str != *p2_str) { /* If strs NOT identical, ... */
0002dc e5d02000 LDRB r2,[r0,#0]
0002e0 e5d10000 LDRB r0,[r1,#0]
0002e4 e1520000 CMP r2,r0
;;;737 cmp_val = (CPU_INT16S)(*p1_str) - (CPU_INT16S)(*p2_str); /* ... calc & rtn char diff (see Note #2d1). */
0002e8 10440000 SUBNE r0,r4,r0
0002ec 1a000002 BNE |L1.764|
;;;738
;;;739 } else if (*p1_str == (CPU_CHAR)0) { /* If NULL char(s) found, ... */
0002f0 e3540000 CMP r4,#0
0002f4 1a000002 BNE |L1.772|
|L1.760|
;;;740 cmp_val = 0; /* ... strs identical; rtn 0 (see Note #2e). */
0002f8 e3a00000 MOV r0,#0
|L1.764|
0002fc e8bd4030 POP {r4,r5,lr}
;;;741
;;;742 } else {
;;;743 if (p1_str_next == (CPU_CHAR *)0) {
;;;744 if (p2_str_next == (CPU_CHAR *)0) { /* If BOTH next str ptrs NULL, ... */
;;;745 cmp_val = (CPU_INT16S)0; /* ... rtn 0 (see Note #2f). */
;;;746 } else { /* If p1_str_next NULL, ... */
;;;747 cmp_val = (CPU_INT16S)0 - (CPU_INT16S)(*p2_str_next); /* ... rtn neg p2_str_next val (see Note #2g). */
;;;748 }
;;;749 } else { /* If p2_str_next NULL, ... */
;;;750 cmp_val = (CPU_INT16S)(*p1_str_next); /* ... rtn pos p1_str_next val (see Note #2h). */
;;;751 }
;;;752 }
;;;753
;;;754
;;;755 return (cmp_val);
;;;756 }
000300 e12fff1e BX lr
|L1.772|
000304 e3530000 CMP r3,#0 ;743
000308 15d30000 LDRBNE r0,[r3,#0] ;750
00030c 1afffffa BNE |L1.764|
000310 e35c0000 CMP r12,#0 ;744
000314 0afffff7 BEQ |L1.760|
000318 e5dc0000 LDRB r0,[r12,#0] ;747
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -