blob: 1fc53e966deb56ab848a8fc91c9e7f9e5ed8d77c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
;
; strecpy: Copy DS:SI -> ES:DI up to and including a null byte;
; on exit SI and DI point to the byte *after* the null byte.
; BP holds a pointer to the first byte beyond the end of the
; target buffer; return with CF=1 if target buffer overflows;
; the output is still zero-terminated.
;
section .text
strecpy:
push ax
push bp
dec bp
dec bp
.loop: lodsb
stosb
and al,al ; CF=0
jz .done
cmp bp,di ; CF set if BP < DI
jnc .loop
; Zero-terminate overflow string
mov al,0 ; Avoid changing flags
stosb
.done:
pop bp
pop ax
ret
|