Initial revision
This commit is contained in:
31
lib/i86/string/memset.s
Executable file
31
lib/i86/string/memset.s
Executable file
@@ -0,0 +1,31 @@
|
||||
! memset() Author: Kees J. Bot
|
||||
! 27 Jan 1994
|
||||
.sect .text; .sect .rom; .sect .data; .sect .bss
|
||||
|
||||
! void *memset(void *s, int c, size_t n)
|
||||
! Set a chunk of memory to the same byte value.
|
||||
!
|
||||
.sect .text
|
||||
.define _memset
|
||||
_memset:
|
||||
push bp
|
||||
mov bp, sp
|
||||
push di
|
||||
mov di, 4(bp) ! The string
|
||||
movb al, 6(bp) ! The fill byte
|
||||
mov cx, 8(bp) ! Length
|
||||
cld
|
||||
cmp cx, #16
|
||||
jb sbyte ! Don't bother being smart with short arrays
|
||||
test di, #1
|
||||
jnz sbyte ! Bit 0 set, use byte store
|
||||
sword: movb ah, al ! One byte to two bytes
|
||||
sar cx, #1
|
||||
rep stos ! Store words
|
||||
adc cx, cx ! One more byte?
|
||||
sbyte:
|
||||
rep stosb ! Store bytes
|
||||
done: mov ax, 4(bp) ! Return some value you have no need for
|
||||
pop di
|
||||
pop bp
|
||||
ret
|
||||
Reference in New Issue
Block a user