29 lines
758 B
ArmAsm
29 lines
758 B
ArmAsm
|
! bcmp() Author: Kees J. Bot
|
||
|
! 2 Jan 1994
|
||
|
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||
|
|
||
|
! int bcmp(const void *s1, const void *s2, size_t n)
|
||
|
! Compare two chunks of memory.
|
||
|
! This is a BSD routine that escaped from the kernel. Don't use.
|
||
|
! (Alas it is not without some use, it reports the number of bytes
|
||
|
! after the bytes that are equal. So it can't be simply replaced.)
|
||
|
!
|
||
|
.sect .text
|
||
|
.define _bcmp
|
||
|
.align 16
|
||
|
_bcmp:
|
||
|
push ebp
|
||
|
mov ebp, esp
|
||
|
push 16(ebp)
|
||
|
push 12(ebp)
|
||
|
push 8(ebp)
|
||
|
call _memcmp ! Let memcmp do the work
|
||
|
test eax, eax
|
||
|
jz equal
|
||
|
sub edx, 8(ebp) ! Memcmp was nice enough to leave "esi" in edx
|
||
|
dec edx ! Number of bytes that are equal
|
||
|
mov eax, 16(ebp)
|
||
|
sub eax, edx ! Number of bytes that are unequal
|
||
|
equal: leave
|
||
|
ret
|