home *** CD-ROM | disk | FTP | other *** search
- ; Concat- Copies the string pointed at by SI to the string
- ; rointed at by DI and then concatenates the string;
- ; pointed at by BX to the destination string.
- ;
- ; On entry-
- ;
- ; DS:SI- Points at the first source string
- ; DS:BX- Points at the second source string
- ; ES:DI- Points at the destination string.
- ;
- ; Error condition-
- ;
- ; The sum of the lengths of the two strings is greater than 255.
- ; In this event, the second string will be truncated so that the
- ; entire string is less than 256 characters in length.
-
- CONCAT proc near
- push si
- push di
- push cx
- push ax
- pushf
-
- ; Copy the first string to the destination string:
-
- mov al, [si]
- mov cl, al
- mov ch, 0
- mov ah, ch
- add al, [bx] ;Compute the sum of the stringâ•’s
- adc ah, 0 ; lengths.
- cmp ax, 256
- jb SetNewLength
- mov ah, [si] ;Save original string length.
- mov al, 255 ;Fix string length at 255.
- SetNewLength: mov es:[di], al ;Save new string length.
- inc di ;Skip over length bytes.
- inc si
- rep movsb ;Copy source1 to dest string.
-
- ; If the sum of the two strings is too long, the second string
- ; must be truncated.
-
- mov cl, [bx] ;Get length of second string.
- cmp ax, 256
- jb LengthsAreOK
- mov cl, ah ;Compute truncated length.
- neg cl ;CL := 256-Length(Str1).
-
- LengthsAreOK: lea si, 1[bx] ;Point at second string and
- ; ; skip the string length.
- cld
- rep movsb ;Perform the concatenation.
-
- popf
- pop ax
- pop cx
- pop di
- pop si
- ret
- CONCAT endp
-