ReC98/libs/BorlandC/_strcat.asm

50 lines
636 B
NASM

; char *__cdecl strcat(char *dest, const char *src)
public _strcat
_strcat proc far
@@dest = dword ptr 6
@@src = dword ptr 0Ah
push bp
mov bp, sp
push si
push di
cld
push ds
les di, [bp+@@dest]
mov dx, di
xor al, al
mov cx, 0FFFFh
repne scasb
push es
lea si, [di-1]
les di, [bp+@@src]
mov cx, 0FFFFh
repne scasb
not cx
sub di, cx
push es
pop ds
pop es
xchg si, di
test si, 1
jz short @@move_rest
movsb
dec cx
@@move_rest:
shr cx, 1
rep movsw
jnb short @@move_last
movsb
@@move_last:
xchg ax, dx
mov dx, es
pop ds
pop di
pop si
pop bp
retf
_strcat endp