:: limine / common / lib / mem.s2.asm_ia32 1.1 KB raw

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
tab: 248 wrap: offon