home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Stars of Shareware: Programmierung
/
SOURCE.mdf
/
programm
/
msdos
/
asm
/
ucrstdlb
/
strcspnl.asm
< prev
next >
Wrap
Assembly Source File
|
1991-10-12
|
2KB
|
87 lines
StdGrp group stdlib,stddata
stddata segment para public 'sldata'
stddata ends
;
stdlib segment para public 'slcode'
assume cs:stdgrp
;
;
; strcspanl- Returns the number of characters (from a set) which
; do NOT precede a string.
;
; inputs:
;
; ES:DI- Points at string to test.
; return address- Points at set of characters (zero terminated string).
;
; outputs:
;
; CX- Number of characters in set which are NOT in the prefix of
; the test string.
;
;
;
;
public sl_strcspanl
;
sl_strcspanl proc far
push bp
mov bp, sp
pushf
push es
push ds
push ax
push bx
push dx
push si
push di
cld
;
; Put the pointers into a couple of better locations.
;
mov ax, es
mov ds, ax
mov si, di
les di, 2[bp]
;
mov bx, di ;Preserve ptr to char set.
mov cx, 0ffffh
mov al, 0
repne scasb ;Compute length of char set.
neg cx
dec cx
dec cx
mov 2[bp], di ;Save new return address
mov dx, cx ;Save for use later.
;
; Okay, now we can see how many characters from the set match the prefix
; characters in the string.
;
StrLp: lodsb ;Get next char in string.
mov cx, dx ;Get length of char set.
mov di, bx ;Get ptr to char set
repne scasb ;See if in set
jnz StrLp ;Repeat while not in set.
;
pop di
mov cx, di
sub cx, si
neg cx
dec cx
pop si
pop dx
pop bx
pop ax
pop ds
pop es
popf
pop bp
ret
sl_strcspanl endp
;
;
;
;
stdlib ends
end