⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lib_mem.txt

📁 IARSOURCECODE是基于LPC2478嵌入式软件IAR EWARM V4.42的应用实例代码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
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 + -