📄 lib_mem.txt
字号:
000144 0a00000a BEQ |L1.372|
000148 e1a0700e MOV r7,lr
00014c ea000004 B |L1.356|
|L1.336|
000150 e4d6a001 LDRB r10,[r6],#1
000154 e4c5a001 STRB r10,[r5],#1
000158 e2433001 SUB r3,r3,#1
00015c e287a001 ADD r10,r7,#1
000160 e20a70ff AND r7,r10,#0xff
|L1.356|
000164 e3530000 CMP r3,#0
000168 0a000001 BEQ |L1.372|
00016c e3570004 CMP r7,#4
000170 3afffff6 BCC |L1.336|
|L1.372|
000174 e1a0c005 MOV r12,r5
000178 e1a04006 MOV r4,r6
00017c ea000002 B |L1.396|
|L1.384|
000180 e494a004 LDR r10,[r4],#4
000184 e48ca004 STR r10,[r12],#4
000188 e2433004 SUB r3,r3,#4
|L1.396|
00018c e3530004 CMP r3,#4
000190 2afffffa BCS |L1.384|
000194 e1a0500c MOV r5,r12
000198 e1a06004 MOV r6,r4
|L1.412|
00019c ea000002 B |L1.428|
|L1.416|
0001a0 e4d6a001 LDRB r10,[r6],#1
0001a4 e4c5a001 STRB r10,[r5],#1
0001a8 e2433001 SUB r3,r3,#1
|L1.428|
0001ac e3530000 CMP r3,#0
0001b0 1afffffa BNE |L1.416|
0001b4 eaffffca B |L1.228|
ENDP
Mem_Cmp PROC
;;;377 CPU_SIZE_T size)
;;;378 {
0001b8 e92d4ff7 PUSH {r0-r2,r4-r11,lr}
;;;379 CPU_SIZE_T size_rem;
;;;380 CPU_ALIGN *p1_mem_align;
;;;381 CPU_ALIGN *p2_mem_align;
;;;382 CPU_INT08U *p1_mem_08;
;;;383 CPU_INT08U *p2_mem_08;
;;;384 CPU_INT08U i;
;;;385 CPU_INT08U mem_align_modulo_1;
;;;386 CPU_INT08U mem_align_modulo_2;
;;;387 CPU_BOOLEAN mem_aligned;
;;;388 CPU_BOOLEAN mem_cmp;
;;;389
;;;390
;;;391 if (size < 1) { /* See Note #1. */
0001bc e3520000 CMP r2,#0
0001c0 1a000002 BNE |L1.464|
;;;392 return (DEF_YES);
0001c4 e3a00001 MOV r0,#1
|L1.456|
0001c8 e8bd4ffe POP {r1-r11,lr}
;;;393 }
;;;394 if (p1_mem == (void *)0) {
;;;395 return (DEF_NO);
;;;396 }
;;;397 if (p2_mem == (void *)0) {
;;;398 return (DEF_NO);
;;;399 }
;;;400
;;;401
;;;402 mem_cmp = DEF_YES;
;;;403 size_rem = size;
;;;404 /* Start @ end of mem bufs (see Note #2). */
;;;405 p1_mem_08 = (CPU_INT08U *)p1_mem + size;
;;;406 p2_mem_08 = (CPU_INT08U *)p2_mem + size;
;;;407 /* See Note #4. */
;;;408 mem_align_modulo_1 = (CPU_INT08U )((CPU_ADDR)p1_mem_08 % sizeof(CPU_ALIGN));
;;;409 mem_align_modulo_2 = (CPU_INT08U )((CPU_ADDR)p2_mem_08 % sizeof(CPU_ALIGN));
;;;410
;;;411 mem_aligned = (mem_align_modulo_1 == mem_align_modulo_2) ? DEF_YES : DEF_NO;
;;;412
;;;413 if (mem_aligned == DEF_YES) { /* If mem bufs' alignment offset equal, ... */
;;;414 /* ... optimize cmp for mem buf alignment. */
;;;415 if (mem_align_modulo_1 != 0) { /* If trailing octets avail, ... */
;;;416 i = mem_align_modulo_1;
;;;417 while ((mem_cmp == DEF_YES) && /* ... cmp mem bufs while identical & ... */
;;;418 (size_rem > 0) && /* ... start mem buf cmp with trailing octets ... */
;;;419 (i > 0)) { /* ... until next CPU_ALIGN word boundary. */
;;;420 p1_mem_08--;
;;;421 p2_mem_08--;
;;;422 if (*p1_mem_08 != *p2_mem_08) { /* If ANY data octet(s) NOT identical, cmp fails. */
;;;423 mem_cmp = DEF_NO;
;;;424 }
;;;425 size_rem -= sizeof(CPU_INT08U);
;;;426 i--;
;;;427 }
;;;428 }
;;;429
;;;430 if (mem_cmp == DEF_YES) { /* If cmp still identical, cmp aligned mem bufs. */
;;;431 p1_mem_align = (CPU_ALIGN *)p1_mem_08; /* See Note #3a. */
;;;432 p2_mem_align = (CPU_ALIGN *)p2_mem_08;
;;;433
;;;434 while ((mem_cmp == DEF_YES) && /* Cmp mem bufs while identical & ... */
;;;435 (size_rem >= sizeof(CPU_ALIGN))) { /* ... mem bufs aligned on CPU_ALIGN word boundaries. */
;;;436 p1_mem_align--;
;;;437 p2_mem_align--;
;;;438 if (*p1_mem_align != *p2_mem_align) { /* If ANY data octet(s) NOT identical, cmp fails. */
;;;439 mem_cmp = DEF_NO;
;;;440 }
;;;441 size_rem -= sizeof(CPU_ALIGN);
;;;442 }
;;;443
;;;444 p1_mem_08 = (CPU_INT08U *)p1_mem_align;
;;;445 p2_mem_08 = (CPU_INT08U *)p2_mem_align;
;;;446 }
;;;447 }
;;;448
;;;449 while ((mem_cmp == DEF_YES) && /* Cmp mem bufs while identical ... */
;;;450 (size_rem > 0)) { /* ... for unaligned mem bufs or trailing octets. */
;;;451 p1_mem_08--;
;;;452 p2_mem_08--;
;;;453 if (*p1_mem_08 != *p2_mem_08) { /* If ANY data octet(s) NOT identical, cmp fails. */
;;;454 mem_cmp = DEF_NO;
;;;455 }
;;;456 size_rem -= sizeof(CPU_INT08U);
;;;457 }
;;;458
;;;459 return (mem_cmp);
;;;460 }
0001cc e12fff1e BX lr
|L1.464|
0001d0 e59d0000 LDR r0,[sp,#0]
0001d4 e3500000 CMP r0,#0
0001d8 1a000001 BNE |L1.484|
0001dc e3a00000 MOV r0,#0
0001e0 eafffff8 B |L1.456|
|L1.484|
0001e4 e3510000 CMP r1,#0
0001e8 1a000001 BNE |L1.500|
0001ec e3a00000 MOV r0,#0
0001f0 eafffff4 B |L1.456|
|L1.500|
0001f4 e3a0a001 MOV r10,#1
0001f8 e1a03002 MOV r3,r2
0001fc e59d0000 LDR r0,[sp,#0]
000200 e0805002 ADD r5,r0,r2
000204 e0816002 ADD r6,r1,r2
000208 e2054003 AND r4,r5,#3
00020c e2068003 AND r8,r6,#3
000210 e1540008 CMP r4,r8
000214 1a000001 BNE |L1.544|
000218 e3a00001 MOV r0,#1
00021c ea000000 B |L1.548|
|L1.544|
000220 e3a00000 MOV r0,#0
|L1.548|
000224 e20090ff AND r9,r0,#0xff
000228 e3590001 CMP r9,#1
00022c 1a000026 BNE |L1.716|
000230 e3540000 CMP r4,#0
000234 0a000011 BEQ |L1.640|
000238 e1a07004 MOV r7,r4
00023c ea000009 B |L1.616|
|L1.576|
000240 e2455001 SUB r5,r5,#1
000244 e2466001 SUB r6,r6,#1
000248 e5d50000 LDRB r0,[r5,#0]
00024c e5d6b000 LDRB r11,[r6,#0]
000250 e150000b CMP r0,r11
000254 0a000000 BEQ |L1.604|
000258 e3a0a000 MOV r10,#0
|L1.604|
00025c e2433001 SUB r3,r3,#1
000260 e2470001 SUB r0,r7,#1
000264 e20070ff AND r7,r0,#0xff
|L1.616|
000268 e35a0001 CMP r10,#1
00026c 1a000003 BNE |L1.640|
000270 e3530000 CMP r3,#0
000274 0a000001 BEQ |L1.640|
000278 e3570000 CMP r7,#0
00027c caffffef BGT |L1.576|
|L1.640|
000280 e35a0001 CMP r10,#1
000284 1a000010 BNE |L1.716|
000288 e1a0c005 MOV r12,r5
00028c e1a0e006 MOV lr,r6
000290 ea000007 B |L1.692|
|L1.660|
000294 e24cc004 SUB r12,r12,#4
000298 e24ee004 SUB lr,lr,#4
00029c e59c0000 LDR r0,[r12,#0]
0002a0 e59eb000 LDR r11,[lr,#0]
0002a4 e150000b CMP r0,r11
0002a8 0a000000 BEQ |L1.688|
0002ac e3a0a000 MOV r10,#0
|L1.688|
0002b0 e2433004 SUB r3,r3,#4
|L1.692|
0002b4 e35a0001 CMP r10,#1
0002b8 1a000001 BNE |L1.708|
0002bc e3530004 CMP r3,#4
0002c0 2afffff3 BCS |L1.660|
|L1.708|
0002c4 e1a0500c MOV r5,r12
0002c8 e1a0600e MOV r6,lr
|L1.716|
0002cc ea000007 B |L1.752|
|L1.720|
0002d0 e2455001 SUB r5,r5,#1
0002d4 e2466001 SUB r6,r6,#1
0002d8 e5d50000 LDRB r0,[r5,#0]
0002dc e5d6b000 LDRB r11,[r6,#0]
0002e0 e150000b CMP r0,r11
0002e4 0a000000 BEQ |L1.748|
0002e8 e3a0a000 MOV r10,#0
|L1.748|
0002ec e2433001 SUB r3,r3,#1
|L1.752|
0002f0 e35a0001 CMP r10,#1
0002f4 1a000001 BNE |L1.768|
0002f8 e3530000 CMP r3,#0
0002fc 1afffff3 BNE |L1.720|
|L1.768|
000300 e1a0000a MOV r0,r10
000304 eaffffaf B |L1.456|
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -