| 1 | section .text |
| 2 | |
| 3 | global memcpy |
| 4 | memcpy: |
| 5 | push esi |
| 6 | push edi |
| 7 | mov eax, dword [esp+12] |
| 8 | mov edi, eax |
| 9 | mov esi, dword [esp+16] |
| 10 | mov ecx, dword [esp+20] |
| 11 | rep movsb |
| 12 | pop edi |
| 13 | pop esi |
| 14 | ret |
| 15 | |
| 16 | global memset |
| 17 | memset: |
| 18 | push edi |
| 19 | mov edx, dword [esp+8] |
| 20 | mov edi, edx |
| 21 | mov eax, dword [esp+12] |
| 22 | mov ecx, dword [esp+16] |
| 23 | rep stosb |
| 24 | mov eax, edx |
| 25 | pop edi |
| 26 | ret |
| 27 | |
| 28 | global memmove |
| 29 | memmove: |
| 30 | push esi |
| 31 | push edi |
| 32 | mov eax, dword [esp+12] |
| 33 | mov edi, eax |
| 34 | mov esi, dword [esp+16] |
| 35 | mov ecx, dword [esp+20] |
| 36 | |
| 37 | cmp edi, esi |
| 38 | ja .copy_backwards |
| 39 | |
| 40 | rep movsb |
| 41 | jmp .done |
| 42 | |
| 43 | .copy_backwards: |
| 44 | lea edi, [edi+ecx-1] |
| 45 | lea esi, [esi+ecx-1] |
| 46 | std |
| 47 | rep movsb |
| 48 | cld |
| 49 | |
| 50 | .done: |
| 51 | pop edi |
| 52 | pop esi |
| 53 | ret |
| 54 | |
| 55 | global memcmp |
| 56 | memcmp: |
| 57 | push esi |
| 58 | push edi |
| 59 | mov edi, dword [esp+12] |
| 60 | mov esi, dword [esp+16] |
| 61 | mov ecx, dword [esp+20] |
| 62 | repe cmpsb |
| 63 | je .equal |
| 64 | mov al, byte [edi-1] |
| 65 | sub al, byte [esi-1] |
| 66 | movsx eax, al |
| 67 | jmp .done |
| 68 | |
| 69 | .equal: |
| 70 | xor eax, eax |
| 71 | |
| 72 | .done: |
| 73 | pop edi |
| 74 | pop esi |
| 75 | ret |
| 76 | |
| 77 | section .note.GNU-stack noalloc noexec nowrite progbits |
