foobar
[eightysix] / kern / src / libc / string.asm
1         cpu 8086
2         bits 16
3         section .text
4
5 global memset
6 memset:
7         push bp
8         mov bp, sp
9         push di
10         mov di, [bp + 4]
11         mov ax, [bp + 6]
12         mov ah, al
13         mov cx, [bp + 8]
14         test di, 1
15         jz .skip_odd_addr
16         stosb
17         dec cx
18 .skip_odd_addr:
19         test cx, 1
20         jz .skip_odd_cx
21         push bx
22         mov bx, cx
23         mov [bx + di], al
24         inc di
25         pop bx
26 .skip_odd_cx:
27         shr cx, 1       ; count words
28         rep stosw
29         pop di
30         pop bp
31         ret
32
33 global fmemset
34 fmemset:
35         push bp
36         mov bp, sp
37         push di
38         push es
39         mov di, [bp + 4]
40         mov ax, [bp + 6]
41         mov es, ax
42         mov ax, [bp + 8]
43         mov ah, al
44         mov cx, [bp + 10]
45         test di, 1
46         jz .skip_odd_addr
47         stosb
48         dec cx
49 .skip_odd_addr:
50         test cx, 1
51         jz .skip_odd_cx
52         push bx
53         mov bx, cx
54         mov [es:bx + di], al
55         inc di
56         pop bx
57 .skip_odd_cx:
58         shr cx, 1       ; count words
59         rep stosw
60         pop es
61         pop di
62         pop bp
63         ret
64
65 ; vi:ts=8 sts=8 sw=8 ft=nasm: