?? lib_mem.txt
字號(hào):
0000b8 d006 BEQ |L1.200|
|L1.186|
;;;328 *pmem_08_dest++ = *pmem_08_src++; /* ... copy psrc to pdest by octets. */
0000ba f811f811 LDRB r3,[r1],#1
0000be f800f800 STRB r3,[r0],#1
;;;329 size_rem -= sizeof(CPU_INT08U);
0000c2 1e52 SUBS r2,r2,#1
0000c4 2a00 CMP r2,#0
0000c6 d1f8 BNE |L1.186|
|L1.200|
;;;330 }
;;;331 }
0000c8 4770 BX lr
;;;332 #endif
ENDP
Mem_Cmp PROC
;;;378 CPU_SIZE_T size)
;;;379 {
0000ca b430 PUSH {r4,r5}
0000cc 4603 MOV r3,r0
;;;380 CPU_SIZE_T size_rem;
;;;381 CPU_ALIGN *p1_mem_align;
;;;382 CPU_ALIGN *p2_mem_align;
;;;383 CPU_INT08U *p1_mem_08;
;;;384 CPU_INT08U *p2_mem_08;
;;;385 CPU_INT08U i;
;;;386 CPU_INT08U mem_align_modulo_1;
;;;387 CPU_INT08U mem_align_modulo_2;
;;;388 CPU_BOOLEAN mem_aligned;
;;;389 CPU_BOOLEAN mem_cmp;
;;;390
;;;391
;;;392 if (size < 1) { /* See Note #1. */
0000ce b912 CBNZ r2,|L1.214|
;;;393 return (DEF_YES);
;;;394 }
;;;395 if (p1_mem == (void *)0) {
;;;396 return (DEF_NO);
;;;397 }
;;;398 if (p2_mem == (void *)0) {
;;;399 return (DEF_NO);
;;;400 }
;;;401
;;;402
;;;403 mem_cmp = DEF_YES;
;;;404 size_rem = size;
;;;405 /* Start @ end of mem bufs (see Note #2). */
;;;406 p1_mem_08 = (CPU_INT08U *)p1_mem + size;
;;;407 p2_mem_08 = (CPU_INT08U *)p2_mem + size;
;;;408 /* See Note #4. */
;;;409 mem_align_modulo_1 = (CPU_INT08U )((CPU_ADDR)p1_mem_08 % sizeof(CPU_ALIGN));
;;;410 mem_align_modulo_2 = (CPU_INT08U )((CPU_ADDR)p2_mem_08 % sizeof(CPU_ALIGN));
;;;411
;;;412 mem_aligned = (mem_align_modulo_1 == mem_align_modulo_2) ? DEF_YES : DEF_NO;
;;;413
;;;414 if (mem_aligned == DEF_YES) { /* If mem bufs' alignment offset equal, ... */
;;;415 /* ... optimize cmp for mem buf alignment. */
;;;416 if (mem_align_modulo_1 != 0) { /* If trailing octets avail, ... */
;;;417 i = mem_align_modulo_1;
;;;418 while ((mem_cmp == DEF_YES) && /* ... cmp mem bufs while identical & ... */
;;;419 (size_rem > 0) && /* ... start mem buf cmp with trailing octets ... */
;;;420 (i > 0)) { /* ... until next CPU_ALIGN word boundary. */
;;;421 p1_mem_08--;
;;;422 p2_mem_08--;
;;;423 if (*p1_mem_08 != *p2_mem_08) { /* If ANY data octet(s) NOT identical, cmp fails. */
;;;424 mem_cmp = DEF_NO;
;;;425 }
;;;426 size_rem -= sizeof(CPU_INT08U);
;;;427 i--;
;;;428 }
;;;429 }
;;;430
;;;431 if (mem_cmp == DEF_YES) { /* If cmp still identical, cmp aligned mem bufs. */
;;;432 p1_mem_align = (CPU_ALIGN *)p1_mem_08; /* See Note #3a. */
;;;433 p2_mem_align = (CPU_ALIGN *)p2_mem_08;
;;;434
;;;435 while ((mem_cmp == DEF_YES) && /* Cmp mem bufs while identical & ... */
;;;436 (size_rem >= sizeof(CPU_ALIGN))) { /* ... mem bufs aligned on CPU_ALIGN word boundaries. */
;;;437 p1_mem_align--;
;;;438 p2_mem_align--;
;;;439 if (*p1_mem_align != *p2_mem_align) { /* If ANY data octet(s) NOT identical, cmp fails. */
;;;440 mem_cmp = DEF_NO;
;;;441 }
;;;442 size_rem -= sizeof(CPU_ALIGN);
;;;443 }
;;;444
;;;445 p1_mem_08 = (CPU_INT08U *)p1_mem_align;
;;;446 p2_mem_08 = (CPU_INT08U *)p2_mem_align;
;;;447 }
;;;448 }
;;;449
;;;450 while ((mem_cmp == DEF_YES) && /* Cmp mem bufs while identical ... */
;;;451 (size_rem > 0)) { /* ... for unaligned mem bufs or trailing octets. */
;;;452 p1_mem_08--;
;;;453 p2_mem_08--;
;;;454 if (*p1_mem_08 != *p2_mem_08) { /* If ANY data octet(s) NOT identical, cmp fails. */
;;;455 mem_cmp = DEF_NO;
;;;456 }
;;;457 size_rem -= sizeof(CPU_INT08U);
;;;458 }
;;;459
;;;460 return (mem_cmp);
;;;461 }
0000d0 bc30 POP {r4,r5}
0000d2 2001 MOVS r0,#1
0000d4 4770 BX lr
|L1.214|
0000d6 b913 CBNZ r3,|L1.222|
0000d8 bc30 POP {r4,r5}
0000da 2000 MOVS r0,#0
0000dc 4770 BX lr
|L1.222|
0000de b911 CBNZ r1,|L1.230|
0000e0 2000 MOVS r0,#0
|L1.226|
0000e2 bc30 POP {r4,r5}
0000e4 4770 BX lr
|L1.230|
0000e6 2001 MOVS r0,#1
0000e8 4413 ADD r3,r3,r2
0000ea 4411 ADD r1,r1,r2
0000ec f003f003 AND r12,r3,#3
0000f0 f001f001 AND r4,r1,#3
0000f4 45a4 CMP r12,r4
0000f6 d101 BNE |L1.252|
0000f8 2401 MOVS r4,#1
0000fa e000 B |L1.254|
|L1.252|
0000fc 2400 MOVS r4,#0
|L1.254|
0000fe 2c01 CMP r4,#1
000100 d12d BNE |L1.350|
000102 f1bcf1bc CMP r12,#0
000106 d012 BEQ |L1.302|
000108 e00b B |L1.290|
|L1.266|
00010a 1e5b SUBS r3,r3,#1
00010c 1e49 SUBS r1,r1,#1
00010e 781c LDRB r4,[r3,#0]
000110 780d LDRB r5,[r1,#0]
000112 42ac CMP r4,r5
000114 d000 BEQ |L1.280|
000116 2000 MOVS r0,#0
|L1.280|
000118 1e52 SUBS r2,r2,#1
00011a f1acf1ac SUB r12,r12,#1
00011e f00cf00c AND r12,r12,#0xff
|L1.290|
000122 2801 CMP r0,#1
000124 d103 BNE |L1.302|
000126 b112 CBZ r2,|L1.302|
000128 f1bcf1bc CMP r12,#0
00012c d1ed BNE |L1.266|
|L1.302|
00012e 2801 CMP r0,#1
000130 d115 BNE |L1.350|
000132 e007 B |L1.324|
|L1.308|
000134 1f09 SUBS r1,r1,#4
000136 f853f853 LDR r12,[r3,#-4]!
00013a 680c LDR r4,[r1,#0]
00013c 45a4 CMP r12,r4
00013e d000 BEQ |L1.322|
000140 2000 MOVS r0,#0
|L1.322|
000142 1f12 SUBS r2,r2,#4
|L1.324|
000144 2801 CMP r0,#1
000146 d10a BNE |L1.350|
000148 2a04 CMP r2,#4
00014a d2f3 BCS |L1.308|
00014c e007 B |L1.350|
|L1.334|
00014e 1e49 SUBS r1,r1,#1
000150 f813f813 LDRB r12,[r3,#-1]!
000154 780c LDRB r4,[r1,#0]
000156 45a4 CMP r12,r4
000158 d000 BEQ |L1.348|
00015a 2000 MOVS r0,#0
|L1.348|
00015c 1e52 SUBS r2,r2,#1
|L1.350|
00015e 2801 CMP r0,#1
000160 d1bf BNE |L1.226|
000162 2a00 CMP r2,#0
000164 d1f3 BNE |L1.334|
000166 bc30 POP {r4,r5}
000168 4770 BX lr
;;;462
ENDP
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -