rulimine/stage2/lib/builtins.asm
2020-09-14 19:32:11 +02:00

76 lines
1.1 KiB
NASM

section .text
global memcpy
memcpy:
push esi
push edi
mov eax, dword [esp+12]
mov edi, eax
mov esi, dword [esp+16]
mov ecx, dword [esp+20]
rep movsb
pop edi
pop esi
ret
global memset
memset:
push edi
mov edx, dword [esp+8]
mov edi, edx
mov eax, dword [esp+12]
mov ecx, dword [esp+16]
rep stosb
mov eax, edx
pop edi
ret
global memmove
memmove:
push esi
push edi
mov eax, dword [esp+12]
mov edi, eax
mov esi, dword [esp+16]
mov ecx, dword [esp+20]
cmp edi, esi
ja .copy_backwards
rep movsb
jmp .done
.copy_backwards:
lea edi, [edi+ecx-1]
lea esi, [esi+ecx-1]
std
rep movsb
cld
.done:
pop edi
pop esi
ret
global memcmp
memcmp:
push esi
push edi
mov edi, dword [esp+12]
mov esi, dword [esp+16]
mov ecx, dword [esp+20]
repe cmpsb
jecxz .equal
mov al, byte [edi-1]
sub al, byte [esi-1]
movsx eax, al
jmp .done
.equal:
mov eax, ecx
.done:
pop edi
pop esi
ret