Category : Assembly Language Source Code
Archive   : STDLIB_A.ZIP
Filename : STRINS.ASM
assume cs:stdlib
;
;
; strins- Inserts one string within another.
;
; inputs:
;
; ES:DI- Points at destination string, the one into which the source
; string will be appended.
;
; DX:SI- Points at the string to insert.
;
; CX- Index into source string (ES:DI) to begin insertion.
;
;
; Note: The destination string's (ES:DI) buffer must be sufficiently large
; to hold the result of the concatentation of the two strings.
;
public sl_strins
;
srcseg equ -2[bp]
destseg equ -4[bp]
insindx equ -6[bp]
source equ -8[bp]
dest equ -10[bp]
;
sl_strins proc far
push bp
mov bp, sp
push dx
push es
push cx
push si
push di
pushf
push ax
push bx
push ds
;
cld
;
; Compute the length of the string to insert.
;
xchg si, di
mov es, dx ;(srcseg)
mov al, 0
mov cx, 0ffffh
repne scasb
neg cx
dec cx
dec cx
mov bx, cx ;Save for later.
;
; Find the length of the dest string.
;
xchg si, di
mov es, destseg
mov cx, 0ffffh
repne scasb
;
; Compute the address of the insertion point:
;
mov dx, dest
add dx, insindx
cmp dx, di ;See if beyond end of string.
jb InsOkay
lea dx, -1[di]
InsOkay:
;
; Make room for the insertion.
;
mov ds, destseg
mov si, di
add si, bx
xchg si, di
mov cx, bx
std
rep movsb
;
; Now perform the insertion.
;
cld
mov si, source
mov di, dx
mov cx, bx
mov ds, srcseg
rep movsb
;
;
pop ds
pop bx
pop ax
popf
pop di
pop si
pop cx
pop es
pop dx
pop bp
ret
sl_strins endp
;
;
stdlib ends
end
Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!
This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.
But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/