Category : Assembly Language Source Code
Archive   : RHSTDLIB.ZIP
Filename : STRCMPL.ASM
assume cs:stdlib
;
;
; strcmpl- Compares the string pointed at by es:si to the string following
; the call instruction.
;
; inputs:
;
; es:di- First string (The string to compare)
; cs:rtn- Second string (The string to compare against)
;
; e.g.,
; "if (es:si < cs:rtn) then ..."
;
; returns:
;
; cx- index into strings where they differ (points at the zero byte
; if the two strings are equal).
;
; Condition codes set according to the string comparison. You should
; use the unsigned branches (ja, jb, je, etc.) after calling this
; routine.
;
public sl_strcmpl
;
sl_strcmpl proc far
push bp
mov bp, sp
push es
push ds
push cx
push si
push di
mov ax, es
mov ds, ax
mov si, di
les di, 2[bp]
;
; In order to preserve the direction flag across this call, we have to
; test whether or not it is set here and execute two completely separate
; pieces of code (so we know which state to exit in. Unfortunately, we
; cannot use pushf to preserve this flag since we need to return status
; info in the other flags.
;
pushf
pop ax
test ah, 4 ;Test direction bit.
jnz DirIsSet
;
; Compute the length of the string following the CALL instruction:
;
cld
mov al, 0
mov cx, 0ffffh
repne scasb
xchg di, 2[bp] ;Save as new return address.
neg cx
dec cx ;Length of string.
mov ax, cx
repe cmpsb ;Compare the two strings.
;
pushf
sub ax, cx
dec ax
popf
pop di
pop si
pop cx
pop ds
pop es
pop bp
ret ;Return with direction flag clear.
;
;
DirIsSet: cld
mov al, 0
mov cx, 0ffffh
repne scasb
xchg di, 2[bp] ;Save as new return address.
neg cx
dec cx ;Length of string.
mov ax, cx
repe cmpsb ;Compare the two strings.
;
pushf
sub ax, cx
dec ax
popf
pop di
pop si
pop cx
pop ds
pop es
pop bp
std
ret ;Return with direction flag set.
;
;
;
sl_strcmpl 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/