📄 lib_mem.txt
字号:
|L1.192|
0000c0 e4d1c001 LDRB r12,[r1],#1 ;310
0000c4 e2833001 ADD r3,r3,#1 ;312
0000c8 e2522001 SUBS r2,r2,#1 ;311
0000cc e20330ff AND r3,r3,#0xff ;312
0000d0 e4c0c001 STRB r12,[r0],#1 ;310
0000d4 0a000005 BEQ |L1.240|
|L1.216|
0000d8 e3530004 CMP r3,#4 ;309
0000dc 3afffff7 BCC |L1.192|
0000e0 ea000002 B |L1.240|
|L1.228|
0000e4 e4913004 LDR r3,[r1],#4 ;319
0000e8 e2422004 SUB r2,r2,#4 ;320
0000ec e4803004 STR r3,[r0],#4 ;320
|L1.240|
0000f0 e3520004 CMP r2,#4 ;318
0000f4 2afffffa BCS |L1.228|
0000f8 ea000002 B |L1.264|
|L1.252|
0000fc e4d13001 LDRB r3,[r1],#1 ;328
000100 e2422001 SUB r2,r2,#1 ;329
000104 e4c03001 STRB r3,[r0],#1 ;328
|L1.264|
000108 e3520000 CMP r2,#0 ;327
00010c 1afffffa BNE |L1.252|
000110 e12fff1e BX lr
;;;332 #endif
ENDP
Mem_Cmp PROC
;;;391
;;;392 if (size < 1) { /* See Note #1. */
000114 e3520000 CMP r2,#0
000118 e1a03000 MOV r3,r0
00011c e92d4010 PUSH {r4,lr}
;;;393 return (DEF_YES);
000120 03a00001 MOVEQ r0,#1
000124 0a00002e BEQ |L1.484|
;;;394 }
;;;395 if (p1_mem == (void *)0) {
000128 e3530000 CMP r3,#0
;;;396 return (DEF_NO);
;;;397 }
;;;398 if (p2_mem == (void *)0) {
00012c 13510000 CMPNE r1,#0
;;;399 return (DEF_NO);
000130 03a00000 MOVEQ r0,#0
000134 0a00002a BEQ |L1.484|
;;;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;
000138 e0833002 ADD r3,r3,r2
;;;407 p2_mem_08 = (CPU_INT08U *)p2_mem + size;
00013c e0811002 ADD r1,r1,r2
;;;408 /* See Note #4. */
;;;409 mem_align_modulo_1 = (CPU_INT08U )((CPU_ADDR)p1_mem_08 % sizeof(CPU_ALIGN));
000140 e203c003 AND r12,r3,#3
;;;410 mem_align_modulo_2 = (CPU_INT08U )((CPU_ADDR)p2_mem_08 % sizeof(CPU_ALIGN));
000144 e201e003 AND lr,r1,#3
;;;411
;;;412 mem_aligned = (mem_align_modulo_1 == mem_align_modulo_2) ? DEF_YES : DEF_NO;
000148 e15c000e CMP r12,lr
00014c 13a0e000 MOVNE lr,#0
000150 03a0e001 MOVEQ lr,#1
;;;413
;;;414 if (mem_aligned == DEF_YES) { /* If mem bufs' alignment offset equal, ... */
000154 e35e0001 CMP lr,#1
000158 e3a00001 MOV r0,#1 ;403
00015c 1a000017 BNE |L1.448|
|L1.352|
;;;415 /* ... optimize cmp for mem buf alignment. */
;;;416 if (mem_align_modulo_1 != 0) { /* If trailing octets avail, ... */
000160 e35c0000 CMP r12,#0
000164 0a000012 BEQ |L1.436|
;;;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. */
000168 e573e001 LDRB lr,[r3,#-1]!
00016c e5714001 LDRB r4,[r1,#-1]!
;;;424 mem_cmp = DEF_NO;
;;;425 }
;;;426 size_rem -= sizeof(CPU_INT08U);
;;;427 i--;
000170 e24cc001 SUB r12,r12,#1
000174 e2422001 SUB r2,r2,#1 ;426
000178 e15e0004 CMP lr,r4 ;423
00017c 13a00000 MOVNE r0,#0 ;424
000180 e3500001 CMP r0,#1 ;418
000184 e20cc0ff AND r12,r12,#0xff
000188 1a000015 BNE |L1.484|
00018c e3520000 CMP r2,#0 ;419
000190 1afffff2 BNE |L1.352|
000194 ea000006 B |L1.436|
|L1.408|
;;;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. */
000198 e533c004 LDR r12,[r3,#-4]!
00019c e531e004 LDR lr,[r1,#-4]!
;;;440 mem_cmp = DEF_NO;
;;;441 }
;;;442 size_rem -= sizeof(CPU_ALIGN);
0001a0 e2422004 SUB r2,r2,#4
0001a4 e15c000e CMP r12,lr ;439
0001a8 13a00000 MOVNE r0,#0 ;440
0001ac e3500001 CMP r0,#1 ;435
0001b0 1a000007 BNE |L1.468|
|L1.436|
0001b4 e3520004 CMP r2,#4 ;436
0001b8 2afffff6 BCS |L1.408|
0001bc ea000004 B |L1.468|
|L1.448|
;;;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. */
0001c0 e573c001 LDRB r12,[r3,#-1]!
0001c4 e571e001 LDRB lr,[r1,#-1]!
;;;455 mem_cmp = DEF_NO;
;;;456 }
;;;457 size_rem -= sizeof(CPU_INT08U);
0001c8 e2422001 SUB r2,r2,#1
0001cc e15c000e CMP r12,lr ;454
0001d0 13a00000 MOVNE r0,#0 ;455
|L1.468|
0001d4 e3500001 CMP r0,#1 ;450
0001d8 1a000001 BNE |L1.484|
0001dc e3520000 CMP r2,#0 ;451
0001e0 1afffff6 BNE |L1.448|
|L1.484|
0001e4 e8bd4010 POP {r4,lr} ;451
;;;458 }
;;;459
;;;460 return (mem_cmp);
;;;461 }
0001e8 e12fff1e BX lr
;;;462
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -