diff options
Diffstat (limited to 'core/strecpy.inc')
-rw-r--r-- | core/strecpy.inc | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/core/strecpy.inc b/core/strecpy.inc new file mode 100644 index 00000000..1fc53e96 --- /dev/null +++ b/core/strecpy.inc @@ -0,0 +1,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 |