home *** CD-ROM | disk | FTP | other *** search
- STRINGS.DOC -- Description of Routines in STRINGS.ASM
- =====================================================
-
- From `BLUEBOOK of ASSEMBLY ROUTINES for the IBM PC & XT'
- by Christopher L. Morgan
- Copyright (C) 1984 by The Waite Group, Inc.
-
- Purpose: The routines in STRINGS.ASM are used to manipulate strings.
-
- Contents:
- ---------
- COMPARE -- Compare two strings
- LEXINSERT -- Lexigraphically insert
- LEXSEARCH -- Search a lexigraphically ordered list
- LOWERCASE -- Convert to lower case
- SORTB -- Bubble sort a string array
- STRINSERT -- Insert one string in another
- STRSEARCH -- Search for one string within another
- SWITCH -- Switch two strings
- UPPERCASE -- Convert to upper case
- _______________________________________________________________________________
-
- Overview:
- ---------
- LOWERCASE & UPPERCASE convert characters within a string to the other
- case.
- STRSEARCH & STRINSERT require two input strings. STRSEARCH searches
- for a copy of one string in another, and STRINSERT inserts a copy of one
- string within another.
- LEXSEARCH & LEXINSERT require a string and a LIST of strings as input.
- LEXSEARCH searches for the proper place to insert a string in a
- lexigraphically-ordered list of strings LEXINSERT inserts a string in the
- proper place in a lexigraphically-ordered list of strings. Lexigraphic is
- the same as alphabetic, except these routines are ordered according to their
- ASCII code. So all uppercase letters precede any lowercase letter.
- These procedures can easily be modified so all lowercase letters are first
- converted to uppercase before lexigraphic comparison.
- LEXINSERT calls LEXSEARCH to find the proper spot, then calls
- STRINSERT to make the insertion.
- COMPARE, SWITCH, AND SORTB work with string arrays. COMPARE compares
- two strings of equal length. It lets you compare two different entries of
- the same string array. SWITCH switches two strings of the same length e.g.,
- two different entries of the same string array. Both these routines are
- needed by SORTB, which performs a bubble sort of a string array.
- These routines take advantage of the 8088 string instructions.
-
- _____________________________ROUTINE DESCRIPTIONS______________________________
-
- LOWERCASE -- Convert to Lower Case
-
- Function: This routine converts the characters in a string to lower case.
-
- Input: Upon entry, DS:BX points to a string. The first two bytes in the
- string form a 16-bit integer which specifies its length. The remaining
- bytes contain the characters of the string.
-
- Output: Upon exit, all alphabetical characters of the string are lower case.
-
- Registers used: AX, BX, & CX are first saved and then restored.
-
- Segments referenced: Upon entry, the data segment must contain the string.
- _______________________________________________________________________________
-
- UPPERCASE -- Convert to Upper Case
-
- Function: This routine converts the characters in a string to upper case.
-
- Input: Upon entry, DS:BX points to a string. The first two bytes in the
- string form a 16-bit integer which specifies its length. The remaining
- bytes contain the characters of the string.
-
- Output: Upon exit, all alphabetical characters of the string are upper case.
-
- Registers used: AX, BX, & CX are first saved and then restored.
-
- Segments referenced: Upon entry, the data segment must contain the string.
- _______________________________________________________________________________
-
- STRSEARCH -- Search for One String Within Another
-
- Function: This routine searches for a copy of a source string within a
- destination string.
-
- Input: Upon entry, DS:BX points to a source string and ES:DX points to a
- destination string. Each string begins with a 16-bit integer that
- specifies its length.
-
- Output: Upon exit, AL contains a return flag (0=not found, 0FFH=found), and
- if the search was successful DX contains the location of the first byte of
- the match in the destination.
-
- Registers used: AX & DX are used for output; all others are unmodified.
-
- Segments referenced: Upon entry, the data segment must contain the source
- string and the extra segment must contain the destination string.
- _______________________________________________________________________________
-
- STRINSERT -- Insert One String in Another
-
- Function: This routine inserts a source string in a specified spot in a
- destination string.
-
- Input: Upon entry, DS:BX points to the source string, ES:BP points to the
- destination string, and ES:DX points to the spot in the destination where
- the source is to be placed. Each string begins with a 16-bit integer that
- begins with a 16-bit integer specifying its length.
-
- Output: Upon exit, the destination string has the source string inserted in
- the proper location. The length of the destination string is increased
- accordingly.
-
- Registers used: SI, DI, CX, & AX are first saved and then restored.
-
- Segments referenced: Upon entry, the data segment must contain the source
- string and the extra segment must contain the destination string.
- _______________________________________________________________________________
-
- LEXSEARCH -- Search a Lexigraphically Ordered List
-
- Function: This routine searches a lexigraphically (alphabetically) ordered
- list of word strings for the proper place to insert a new word.
-
- Input: Upon entry, DS:BX points to a source word string, ES:BP points to the
- ordered list of words. The source word string begins with a 16-bit integer
- that is its length and is followed by the bytes of the string. The last
- byte must be a <CR> (ASCII 13). The destination list of words begins with
- a 16-bit integer specifying its length, continuing with the words which
- must consist of ASCII characters. The words in the list are separated by
- <CR>'s (ASCII 13).
-
- Output: Upon exit, AL contains a return flag (0=not found, 0FFH=found). If
- the search was successful, ES:DX contains the location of the proper place
- to insert the new word. If the word was already present, then ES:DX points
- to the location of this word in the destination.
-
- Registers used: AX & DX are used for output; all else is unmodified.
-
- Segments referenced: Upon entry, the data segment must contain the source
- string and the extra segment must contain the destination word list.
- _______________________________________________________________________________
-
- LEXINSERT -- Lexigraphically Insert
-
- Function: This routine inserts a word string in the proper place in a
- lexigraphically (alphabetically) ordered list of word strings. If the
- word is already present, no insertion occurs.
-
- Input: Upon entry, DS:BX points to a source word string and ES:BP points to
- the ordered list of words. The source word string begins with a 16-bit
- integer specifying its length. The string is ASCII and must be terminated
- by a <CR> symbol (ASCII 13). The destination list of words begins with a
- 16-bit integer specifying its length and continues with words consisting
- of ASCII characters. The words are separated by <CR> symbols (ASCII 13).
-
- Output: Upon exit, the list has the string inserted in the proper place.
-
- Registers used: AX is first saved and then restored.
-
- Segments referenced: Upon entry, the data segment and the extra segment must
- be equal and must contain the source string and the destination word list.
- _______________________________________________________________________________
-
- COMPARE -- Compare Two Strings
-
- Function: This routine compares two strings of the same length.
-
- Input: Upon entry, DS:SI points to one string (source) and DS:DI points to
- the second string (destination). Both strings have lengths given by CX.
-
- Output: Upon exit, the flags show the relation of the source to destination:
-
- L = source string is less than destination string
- E = source string is equal to the destination string
- G = source string is greater than the destination string
-
- Registers used: AX is modified.
-
- Segments referenced: Upon entry, the data segment contains the source string
- and the extra segment contains the destination string.
- _______________________________________________________________________________
-
- SWITCH -- Switch Two Strings
-
- Function: This routine switches two strings of equal length.
-
- Input: Upon entry, DS:SI points to one string (source) and ES:DI points to
- the second string (destination). Both strings have lengths given by CX.
-
- Output: Upon exit, the strings are switched.
-
- Registers used: AX, CX, DI, & SI are first saved and then restored
-
- Segments referenced: Upon entry, the data segment contains the source and the
- extra segment contains the destination string.
- _______________________________________________________________________________
-
- SORTB -- Bubble Sort a String Array
-
- Function: This routine sorts a string array using bubble sort.
-
- Input: Upon entry, DS:SI points to a string array, CX contains the number of
- entries in the array, and DX contains the size of each entry.
-
- Output: Upon exit, the array is alpha-up sorted.
-
- Registers used: AX, CX, DI, & SI are first saved and then restored
-
- Segments referenced: Upon entry, the data segment and the extra segment must
- be equal and must contain the string array.
-
- Routines called: COMPARE, SWITCH
- _______________________________________________________________________________
- >>>>> Physical EOF STRINGS.ASM <<<<<