⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 strcatm.asm

📁 汇编编程艺术
💻 ASM
字号:
StdGrp		group	StdLib, StdData
;
StdData		segment	para public 'sldata'
		public	sl_strcatm
;
scptr1		dd	?
strlen1		dw	?
scptr2		dd	?
strlen2		dw	?
;
StdData		ends
;
stdlib		segment	para public 'slcode'
		assume	cs:StdGrp
;
		extrn	sl_malloc:far
;
; strcatm-Computes the lengths of two strings pointed at by es:di and dx:si
;	  then allocates storage for a string long enough to hold the con-
;	  catentation of these two strings.  Finally, it concatenates the
;	  two strings storing the resulting string into the new buffer.
;	  Returns ED:SI pointing at the new string.
;
; inputs:
;
;	ES:DI- Points at the first string.
;
;	DX:SI- Points at the string to append.
;
;
; outputs:
;
;	ES:DI- Points at new string containing the concatenation of the
;	       two strings.
;
;	carry=0 if no error.
;	carry=1 if strcat2 could not allocate enough memory to hold
;		the resulting string.
;
sl_strcatm	proc	far
		push	ds
		push	si
		push	cx
		push	ax
		pushf
		cld
;
; Save pointers to the strings
;
		mov	word ptr StdGrp:scptr1, di
		mov	word ptr StdGrp:scptr1+2, es
		mov	word ptr StdGrp:scptr2, si
		mov	word ptr StdGrp:scptr2+2, dx
;
; Compute the length of the second string.
;
		mov	al, 0
		les	di, StdGrp:scptr2
		mov	cx, 0ffffh
	repne	scasb
		neg	cx
		dec	cx
		mov	StdGrp:StrLen2, cx
;
; Find the end of the first string:
;
		les	di, StdGrp:scptr1
		mov	cx, 0ffffh
	repne	scasb
		neg	cx
		dec	cx
		dec	cx
		mov	StdGrp:StrLen1, cx
;
; Malloc the appropriate storage:
;
		add	cx, StdGrp:StrLen2
		call	sl_malloc
		jc	BadStrCat2
;
; Save ptr to dest
;
		push	es
		push	di		
;
; Copy the strings:
;
		lds	si, StdGrp:scptr1
		mov	cx, StdGrp:strlen1
		shr	cx, 1
		jnc	cs1
		lodsb
		stosb
cs1:	rep	movsw
		lds	si, StdGrp:scptr2
		mov	cx, StdGrp:strlen2
		shr	cx, 1
		jnc	cs2
		lodsb
		stosb
cs2:	rep	movsw
;
		pop	di
		pop	es
		popf
		pop	ax
		pop	cx
		pop	si
		pop	ds
		clc
		ret
;
BadStrCat2:	les	di, StdGrp:scptr1
		popf
		pop	ax
		pop	cx
		pop	si
		pop	ds
		stc
		ret
sl_strcatm	endp
;
;
stdlib		ends
		end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -