 7
                        paee popaa.

   o設co popa  apac    a,  acac,  a ae
ac oepaoo cceo p aepe. 모 co- oo po
oo  e  e  aepa⨢.  Ho    popaco  a acceepe
eec pa oooc  a pae eocppe ee.  Heoope
popa  ec  a  paep cpoc  paep pepa 
o o  coxpae    a  ("pee묨")  ae  oce  x
aepe   (eopa  pepa  oece稢a  exa,  ocpeco
oopoo  ocee  popa   o   opaac      pee
poepa).  oa  popae  eoxoo  ac    ce p
popa.  Ha cao ee DOS ooe popae  ap㧨    a
op  o  COMMAND.COM,  oopa  oe  cooaa  a cpeco
epeca c ooae- e  oe oa ⨯a COPY  DIR.

                 1. ac oo popa  po.

   MS DOS oece稢ae 㭪 EXEC (oep 4BH pepa 21H),  pea-
  o  oo  popa  po.  epa popaa aaec
"poee", a apaea  acaea - "ooo".

   Cpe poe.

   㭪 4BH oee  coa,  e  ocae,  pe  epex  oo-
oex ao:
   1. ooo  a eco, oc㯭oe popae.
   2. Coa o apaepo.
   3. ocpo cpo,  coepa  aoe,    po-
pa.
   4. Coxpa ae pecpo SS  SP  epeex.
   oco p  ap㧪e popa MS DOS ee e c oc- 㯭
a,  o eoxoo ocoo eco  a.  Ec  e  ocoo
ac  a,  o e e eca  ap㧪 opo popa.  oce
oo a a ocooea,  B o poco oec  BX peeoe
co  16-ax  apapao,  aca 4AH  AH  o pepae
21H,  ea oc㯭 popae eo o co apapao,  oopoe e
peec.
   o apaepo,  a oop o aa ES:BX  o  14-a
o o a,  oop B o oec ce-  opa:

   DW   cee apec cpo cpe
   DD   cee  ceee oao cpo
   DD   cee  ceee epoo FCB
   DD   cee  ceee opoo FCB
   Cpoa cpe  -  o  cpoa,  cocoa    oo  oee ce-
䨪a権,  oop cee MS DOS  p  oe  popa.  ee
cpo cpe ae e, a  e o oo oap㦨  co- o ae
CONFIG.SYS.  Hapep,  cpo oe  oeeo VERIFY = ON. poco
a筨e cpo c epoo eea, aep訢 eo coo ASCII 0, oo
ae ce騩  ..  a oce eeo o ceoa  a
coa ASCII 0. Cpoa oa a稭ac a pae apapaa (.e. ee
apec o o 16 oe    pae  ).  o  맢ao  e,  o
cooec騩   xo    oe  apaepo,  aa騩  a  cpo,
coep oo 2-aoe ceeoe aee.  Bce o e 㦭o,  ec
oa popaa oe paoa c o e cpoo cpe,  o  popaa
"poe".  B o cae ao poco oec a coa ASCII 0  
epe 2 aa oa apaepo.
   Cee 4 aa oa apaepo aa a oa cpo 

                                     - 2 -
apaeo  popa.  "Koaa  cpoa"  -  o coa cpoa,
opeea coco pao popa. p ap㧪e popa  DOS oa
oe e  poe EDITOR A:CHAPTER1\ NOTES.MS.  p o aec
peaop  e epeaec  aa    oaaoe  aoe  A  
eeeoo  op.  Koa  B ooaaee oa cpo 
EXEC,  o ao a oo oce ac opa樨,  o  e  
apaeo  popa.  epe  oao  cpoo  oe co a,
coepa騩  o cpo,   oa oa aepac  coo  <BK>
(ASCII 13).
   ocee 8 ao oa apaepo aa a  pae  o
ao  (FCB).  FCB  coep  opa  o  oo    x aax,
aax  oao cpoe.  Ec opaex  ao  e,  o  ao
ao  ce  8  a  coo  ASCII  0.  B [5.3.5] oceo,  a
paoae  FCB.  Ha稭a  c  epc  MS  DOS  2.0,   cooae   FCB
eoaeo    B  oee  e a opa FCB,  eco oo
co o oe ecpopa ao (file handler),   oopo
oc    a  peocaec  o  ooo oep,  a e epe FCB
(ae oc㦤aec  [5.3.5]).
   Haoe, B  o ocpo cpo c aae aoe,   
e aa.  a cpoa ee apae popa. DS:DX aae
a    cpo  p  oe EXEC.  a cpoa - caapa cpoa
ASCIIZ,  .e.  eo  oee,  e  caapa   ce䨪a   aa,
aepaea    oo    ASCII    0.    Hapep,    o    oe   
B:\NEWDATA\FILER.EXE<NUL>, e coo <NUL> ooa- e o ASCII 0.
   oce oo  a  c  aaa  opa  oooea,  ocaec
oce aaa.  oco ce pecp  ee  ae-  o
aae, o ao coxpa cee cea  aae cea, c e o
o  o    occaoe,  oa  paee  e   opaeo
맢ae  aae.    x  coxpae coae epeee.  oco
aee pecpa DS ae e eeo,  o  epeee e  o
  ae,  o  ex  op  oa  e   oo- pe oepaop MOV
AX,DSEG  MOV DS,AX.  oce oo a SS  SP coxpae,  oece 0  
AL,    opa  oepa樨 "ap㧪a  ac" (EXEC coec ae
 oepee.  ae oece 4AH  AH  oe  pepae  21H.  B
o   oe  ae  e  popa,  pe  popaa  "poe"
axoc  oca- oeo cocoﭨ. MS DOS peocae oooc
popae  oo epea poe o opaa,  a opao o
 epea o訡  cac.  o acaec cao 㭪樨 aca,  o
p ooe o訡 caaaec a epeoca,  a pecp AX 
o cae e opaa 1 -  epaoo oepa 㭪樨,  2 -
ec a e ae,  5 - p coo o訡e, 8 - p exae a,
10 - ec epaa cpoa cpe  11 - ec eepe opa.
   po pep - poce訩  oox,  o aco oe eo
 e ao.  ec ocae e o apaepo  e coaa  cpoa
cpe.  o  oaae,  o apaeo popae e e epeaac
oaa cpoa  o cpea e  ao  e,  a      ae
popa.  B  o oo e pacpe- eee a,  coa
  (co) o apaepo  coxpa-  ae SS  SP.

;--- ceee ax
FILENAME     DB   'A:TRIAL.EXE',0  ;apae TRIAL.EXE
PARAMETERS   DW   7DUP(0)          ;eo o apaepo
KEEP_SS      DW   0                ;epeea  SS
KEEP_SP      DW   0                ;epeea  SP

;---epepacpeeee a
   MOV   BX,ZSEG          ;o # apapaa oa
   MOV   AX,ES            ;o # apapaa aaa
   SUB   BX,AX            ;c paep popa

                                     - 3 -
   MOV   AH,4AH           ;oep 㭪樨
   INT   21H              ;epepacpeeee
;---aae a o apaepo
   MOV   AX,SEG PARAMETERS      ; ES - cee
   MOV   ES,AX                  ;
   MOV   BX,OFFSET PARAMETERS   ; BX - ceee
;---coxpa o SS  SP
   MOV   KEEP_SS,SS       ;coxpae SS
   MOV   KEEP_SP,SP       ;coxpae SP
;---aae a cpo e aa
   MOV   DX,OFFSET FILENAME     ;ceee -  DX
   MOV   AX,SEG FILENAME        ;cee -  DS
   MOV   DS,AX                  ;
;---ap㧪a popa
   MOV   AH,4BH           ;㭪 EXEC
   MOV   AL,0             ;롨pae "ap㧪  ac"
   INT   21H              ;acae aa
;---ocec⢨, occaaae pecp
   MOV   AX,DSEG          ;occaaae DS
   MOV   DS,AX            ;
   MOV   SS,KEEP_SS       ;occaaae SS
   MOV   SP,KEEP_SP       ;occaaae SP

;--- oe popa coae 䨪⨢ cee
ZSEG     SEGMENT          ;c. [1.3.1]
ZSEG     ENDS

          2. Coxpaee popa  a oce aepe.

   popa, ocaee   pee묨    a,  o  c㦨  
aece ⨫  p㣨x popa.  Oo ae popa ac
epe  ecoe  eop  pepa.  MS  DOS paccapae ae
popa a ac  oepaoo  cce,  aa  x  o  aoe
p㣨x  popa,  oope    ape ocec⢨.  Peee
popa oo c  ope COM. popa, acae  ope EXE
oca-  pee묨  a eoo p㤭ee.
   aepee popa pepae  27H  ocae  ee  peeo  
a.  CS oe aa a aao PSP  oo,  o a 㭪
paoaa  pao.  B  popaax  COM,  CS   cpa   caaaec
cooec騬   opao,  oo  ao  poco  aep  popa
pepae 27H.  B popaax EXE  ,  CS  epoaao  aae  a
ep a,  ce騩 a PSP (.e. 100H). p op- ao aepe
EXE popa oce cp  RET  aae    cea  epe
ooee  a ae:  PUSH DX / MOV AX,0 / PUSH AX.  oco DS
epoaao aae a aao PSP,  o p oe x  ae
  cea ce稪 oa a- ae a ceee 0  PSP,  e p -
aa樨  acaec  cp   INT   20H.   oo   INT   20H
oec,  a  o  caapa  㭪    aepe popa 
epea pae  DOS.  o aca pepae 27H  paoa  
EXE  popae  ao  oec 27H o opo a PSP (ep coep
a設 o cp樨 INT),  a ae aep popa o RET.
  oox ⨯o ao pee e o pepae 27H,  DX oe
coepa ceee oa popa, ocaeoe o aaa PSP.

   Cpe poe.

   Beop pepa caaaec c oo 㭪樨  25H  pepa
21H,  oaoec,  o  poepa  oa稢aac  IRET.  Kpoe cao
poep,  caaaea popaa e oa ea e- o,  poe

                                     - 4 -
aa樨  eopa  pepa,  pcoe  DX ae-  cee
oa poep  aepe.   COM ao poco oece oepaop
INT  27H    oe popa.   EXE ao oece o oepaop 
epoe coo PSP  aepe popa o oepaopo RET.  oo
o o poep,  oc- ec⢨ apea popaa oa
맢a INT 70H.
   pee pep    oox  ⨯o  ao  (COM   EXE).  B oox
caoea  ea  FINISH    oe⪨  oa  poep   pepa
(aoae,  o  a  $ ae aee ce稪a oa  o oe).
 COM ao FINISH ae ceee o aaa PSP,  a  peec 
pepa 27H.  EXE ao ceee ocaec o epoo aa,
ceeo a PSP,  oo  e  eoxoo  pa  100H,  o
epeca  a  aao PSP.  ae⨬,  o oec⨢ poep  aao
popa,   oe c caoo ac oa    peeo
op樨. po oo oc coco  cooa cp樨 MOVSB
 epec뫪 oa poep   ecoe ac  PSP,  a稭a
co cee 60H, o ocooae 160 a a.
   Ca aa COM:
;---ec poepa pepa
BEGIN:     JMP   SHORT SET_UP  ;epexo a cao
ROUTINE    PROC  FAR
           PUSH  DS            ;coxpaee pecpo
            .
      (poepa)
            .
           POP   DS            ;occaoee pecpo
           IRET                ;opa  pepa
FINISH     EQU   $             ;oea oa poep
ROUTINE    ENDP

;---caoa eopa pepa
SET_UP:    MOV   DX,OFFSET ROUTINE  ;ceee poep  DX
           MOV   AL,70H             ;oep eopa pepa
           MOV   AH,25H             ;㭪 cao eopa
           INT   21H                ;caaae eop
;---aepee popa, oca peeo
           LEA   DX,FINISH          ;opeee pe. ceee
           INT   27H                ;aepee

   Ca aa EXE:

;---ec peea poepa
           JMP   SHORT SET_UP   ;epexo a cao
ROUTINE    PROC  FAR
           PUSH  DS             ;coxpaee pecpo
            .
       (poepa)
            .
           POP   DS             ;occaoee pecpo
           IRET                 ;opa  pepa
FINISH     EQU   $              ;oea oa poep
ROUTINE    ENDP

;---caoa eopa pepa
SET_UP:    MOV   DX,OFFSET ROUTINE  ;ceee poep  DX
           MOV   AX,SEG ROUTINE     ;cee poep  DS
           MOV   DS,AX              ;
           MOV   AL,70H             ;oep eopa pepa
           MOV   AH,25H             ;㭪 cao eopa

                                     - 5 -
           INT   21H                ;caoa eopa
;---aepee popa
           MOV   DX,FINISH+100H     ;ce ceee oa
           MOV   BYTE PTR ES:1,27H  ;ocae 27H  PSP
           RET                      ;aepae poep

   㭪 31H pepa 21H paoae aaoo, a cee oo,
o    DX  oo  coepac co 16-ax apapao,  peex
poepe (cee paepa poep,  a稭a o aaa PSP - c. 
pepe  [1.3.1]).  peeco  o  㭪樨  ec o,  o oa
epeae poeco popae o xoa, a騩 opa o cace
poep.  Poeca  popaa oae o o c oo 㭪樨
4DH pepa 21H. Ko xoa oc㦤ac  [7.2.5].

              3. ap㧪a  ac popax oepee.

   Oepe - o ac popa, oope ocac a ce,  o pe
a  eo  popa  peeo    a.  Koa  peec 㭪,
oea a-o oepee, o o apaec  a  popaa
ae eo a poep.  Pae oepe o apac  oo
 o e eco a,  epepa pe騩 o.  Hapep,  popaa
ee  a  ax  oe  ap㧨  poep coppo,  a ae
epep ee poepo ee- pa樨 oeo.  a exa  coec
 oo a.  Ho oa xopoa oo  ex poep, oope e
coc oc- oﭭo,  ae ace opae   c  pe  
o, o popaa e oc co eeo.

   Cpe poe.

   MS DOS  coe 㭪 EXEC  ap㧪 oepee.  a 㭪,
oep 4BH pepa 21H,  coec ae   ap㧪    aca
oo  popa    po,  ec  oec  o  0  AL.  Ec  AL
oec o 3,  o oa e ape oepe.  B  o  cae  e
coaec  PSP,  oo  oepe  e ca- aaec a eaca
popaa.  Taa poepa poco apae oepe,  e epeaa e
pae.
   eec a  cocoa  oece  a    oepe.  Moe  
cooaa  o  oac  p  ea  popa,  o  ceao
oeea oac a a peea ooo popa.  㭪樨  EXEC
epeaec  oo  cee  apec,   aece o樨,  a e
ape oepe.  Koa oepe apaec  eo ooo popa,
o  popaa oa c oep apapaa,  a e apac
oepe,  caa.  C po copo, p ap㧪e  ceao oee
a MS DOS oece稢ae popa oe- po apapaa.
   B epeeo pepe coec ap㧪a  oee a.
oco  DOS  oo  popae  c  oc㯭  a,  o caaa
eoxoo ocoo a c oo 㭪樨 4AH. 㭪 48H oo
o  a ocaoo oo,  o o o p ca oo 
oepee. a 㭪 opaae ae- e ceea oa  AX,  o
oep  apapaa  opeee  a  e ape oepe,  a ae o
ao apec oepe e ac ooo popao.
   Kpoe oa 3,  acaeoo  AL, B o cao  o 㭪-
樨 ee a apaepa.  DS:DX o aa a cpo, a  
a oepe,  aepae ao ASCII 0. Heoxoo aa ooe
 aa,  a pacpee .COM  .EXE,  oco DOS    ao
cae e cae, o o e popa a.
   Haoe, ES:BX  o  aa  a  4-a  o   apaepo,
oop coep (1) 2-a oep apapaa,  a e apac
oepe  (2) 2-a aop p離,  oop e  cooac

                                     - 6 -
  p離  apeco    oepee.  B  aece  oepa apapaa ao
cooa co, opaaeoe  AX,  oepa apapaa oeeoo
oa a. aop p離 ae ceee, o oopo o  -
ce apeca pex p離  apaepo    oepee.  coe
oep   apapaa,   a   apaec  oepe.  oce  oo  a  o
caoe,  oe 㭪  oepe e ape.  poco e
    oepeo  a,  oo o  o a  㭪,
apa ce oe  oe oepe. Ec p opa- e caoe a
epeoca,  o  a o訡a  ee o e opae  AX.  Ko pae 1,
ec aa eep oep 㭪樨,  2 - ec a e ae,  5 -  p
cox o訡ax  8 - p occ⢨ ocaoo a.
   oce oo a oepe ape   a,    e  oo  o
oc  a    aeo (far) poepe.  B ceee ax oe 
caoe xco aae,  opee騩 o o.  Ceea
ac  aae  poco  paa  ee  ooo cee.  Ceee
oepe oo  ceo axoee pa e ceea oa
   oepe    㬭oee  peaa  a  16  (epeo  e稭  
apapao    a).  B  epeeo   pepe   e   epeee
OVERLAY_OFFSET    CODE_SEG  oee  oa  a  po   pao
cao aae.  Oa ape,  oepee  ae  oe  -
ac cpe CALL DWORD PTR OVERLAY_OFFSET.
   Oepe oe  oo popao co co ceea  ax  
cea,  xo  a  pao  coec  ceo  cee  ae
popa.  p  oe  oepe  aee  ceea  eo  coceoo
ceea ax oo  oeeo  DS.

;---aepae popa 䨪⨢ ceeo
ZSEG         SEGMENT
ZSEG         ENDS

;--- ceee ax
OVERLAY_SEG    DW    ?
OVERLAY_OFFSET DW    ?             ;ceee oepe
CODE_SEG       DW    ?             ;cee oepe - oe
PATH           DB    'A:OVERLAY.EXE' ;ceoa a ceee
0BLOCK         DD    0             ;4-a o apaepo

;---ocooae a
   MOV   CODE_SEG,CS     ;coae o CS
   MOV   AX,ES           ;ope aee ceea PSP
   MOV   BX,ZSEG         ;apec ceea oa popa
   SUB   BX,AX           ;ce paoc
   MOV   AH,4AH          ;oep 㭪樨 SETBLOCK
   INT   21H             ;ocooae a
   JC    SETBLK_ERR      ;a epeoca oop o o訡e
;---oo a  oepe
   MOV   BX,100H         ;oo  oepe 1000H a
   MOV   AH,48H          ;㭪 oee a
   INT   21H             ;eep AX:0 aae a o
   JC    ALLOCATION_ERR  ;a epeoca oop o o訡e
   MOV   OVERLAY_SEG,AX  ;aacae apec ceea oepe
;---cee cee oepe  ooo ceee
   MOV   AX,CODE_SEG     ;ae aee ceea oepe
   MOV   BX,OVERLAY_SEG  ; ae ceea oa
   SUB   BX,AX           ;BX coep co apapao
   MOV   CL,4            ;cae o co a 4 a eo
   SHL   BX,CL           ;o o e稭  aax
   MOV   OVERLAY_OFFSET,BX  ;aoae ceee
;---ap㧪a epoo oepe

                                     - 7 -
   MOV   AX,SEG BLOCK    ;ES:BX aae a o apaepo
   MOV   ES,AX           ;
   MOV   BX,OFFSET BLOCK ;
   MOV   AX,OVERLAY_SEG  ;oeae apec ceea oepe 
   MOV   [BX],AX         ;epoe coo oa apaepo
   MOV   [BX]+2,AX       ;cee oepe - aop p離
   LEA   DX,PATH         ;DS:DX aae a   a
   MOV   AH,48H          ;oep 㭪樨 EXEC
   MOV   AL,3            ;o ap㧪 oepe
   INT   21H             ;apae oepe
   JC    LOAD_ERROR      ;a epeoca oop o o訡e
;---eep popaa aaec co ea
    .
    .
   CALL  DWORD PTR OVERLAY_OFFSET  ;o oepe
    .     ;㦭o aa DWORD PTR, a a oepe -
    .     ;aea poepa

;---ocope  cpp, oa ee ca oepe
DSEG     SEGMENT     ;a oo, caaae cee ax
            .        ;ocae ceo cee (coec
            .        ;ce ae popa)
DSEG     ENDS

CSEG     SEGMENT     PARA PUBLIC 'CODE'
OVERLAY  PROC FAR      ;cea "aea" poepa
         ASSUME CS:CSEG,DS:DSEG
         PUSH   DS     ;xpa DS ae popa
         MOV    AX,DSEG;caaae DS oepe
         MOV    DS,AX
          .
          .
         POP    DS     ;occaaae DS p aepe
         RET
OVERLAY  ENDP
CSEG     ENDS
         END

          4. peopaoae popa  ⨯a .EXE  ⨯ .COM.

   popac a  acceepe  e  oooc  peopaoa  co
popa    ooo  opaa  EXE    opa  COM.  a EXE e
aooo,  coepa騩  opa     p離;   DOS   pae
eoope  apeca popa p ap㧪e.  C po copo,  a COM
cec  ao e, o p離a e peec - o xpac e 
o e,   oopo apaea popaa oa   a a設.
o o p稭e a EXE o ee  epe  a  768  ao  oe  a
ce,  e  x  COM  ae (xo p ap㧪e  a o 
aa  oaooe  eco).  a  COM  ae  cpee  apac,
oco  e  peec  p離.  p㣨x  peec   x e,  a
eoope popa co co  co  e,  o  x  oo
o peopaoa  ⨯ COM.
   p離a - o poecc cao  apeco,  cax  c  cee
pecpo. Hapep, popaa oe aa a aao oac ax
ce騬 oo:
   MOV   DX,OFFSET DATA_AREA
   MOV   AX,SEG DATA_AREA
   MOV   DS,AX
   Ceee  DX cao c caoo ceeoo pecpa DS. Ho aoe

                                     - 8 -
aee oe pa ca DS? popaa pee aco-  apec,
o oep apapaa,   oopo e pacoaac DATA_AREA ac o
oo,   aoe eco  a e apea popaa - a o ac
o epc MS DOS,  a ae o oo,  ae peee popa  
axoc     ax  apecax  a.  o  o  p稭e  o  pe
ooo  popa  oo  oo  cao  eoope  ceee
ae epe cee oo- ceo aaa popa.  ae,  oa
DOS  ocec⢫e  p離,  aee  aaoo   apeca   popa
paec  cee ae, aa acoe apeca, peee
 ceeo pecpe.
   a COM  e  㦤ac  p離e,  oco o xpac  ao
e,  o e 㦤ac  䨪ca樨 ceea.  Bce  popae  xpac
ooceo  aaa oooo ceea,  a ce ae  ce.  o
o p稭e c popaa e oe pea 65535 a o e,  o
cooece acao cee, oopoe cece  coeo
cxee apeca樨 (oco epx ac oo oa aa ceo,  o
peaoe  pocpaco  oc㯭oe   oa  ax eoo ee e
65535 a,  xo ceo cee p eoxooc oe  ece
a  pa  64K aoo oa).  B aax COM ce ceee pecp
aa a aao PSP;  cpae c aa EXE, e DS  ES a-
pc aao opao,  o CS aae a ep a ce騩
a PSP.
    pecae  popa    e aa COM peec coee
cex pa:
   1. He oope popa  e poep. Beco oo, oece
 caoe aao e, poe START,  aepe popa oepaopo END
START.
   2. oece  aae popa oepaop ORG 100H.  o oepa-  op
aae aao oa (.e.  caaae ce稪 oa).  popa
COM a稭ac c 100H,  o ec ep ao,  ce騬 a  PSP,
oco CS aae a aao PSP,  oopoe pacooeo a 100H a
e.  oo o aa oee c oo poo eca oece
o apec 100H cp JMP.
   3. Oepaop ASSUME oe caaa DS,  ES  SS a  opao,
o  o  coaa  co  aee   oooo ceea,  apep,
ASSUME CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG.
   4. ae popa o oeac  o ece popa, o ex
op, oa o e epeea c oo. e a稭a popa c oac
ax,  oco  apoacceep  oe aa cooe o o訡ax
p epo  poxoe,  ec  ec  cc뫪  a  e䨪aop  ax,
oop  ee  e  oape.    epexoa  aa oa coe 
aece epo oa popa cp JMP.
   5. He  cooa 䨪ca ceeo ⨯a MOV AX,SEG NEW_DATA.
ocaoo aa ooo cee e⪨.  B acoc, 㦭o oca
o  o,  coe    aae popa  cao ceea
ax, MOV AX,DSEG / MOV DS,AX.
   6. Ceo cee ooc ocaec  aao oe. aae
cea apec a ep設 apecoo pocpaca  64K,  co-
eoo  popao  (aoae,  o  ce  pace   a).  B
popaax COM o oe  cea ee e 64K, SS  SP o 
ee. ee , o p oooe popa ooo騪 ac
cooee  o  o訡e,  aaee,  o  cee  cea  occe.
oppe eo.
   7. aepe popa o cpe RET,  o pepae  20H.
pepae  20H  -  o  caapa 㭪  aepe popa 
opaa pae  DOS.  ae oa popaa a- epaec cp-
e  RET,  a  cao ee coec pepae 20H.  o pocxo
oo,  o ep設a cea epoaao co- ep 0.  p  oe
aepae   cp樨  popa  RET,  0  aaec    cea,

                                     - 9 -
epeaaa ce稪 oa a aao PSP.  Haxoac   o  ee
㭪 20H,  oec a ce- a cp popa, a
epea pae  DOS. Bce o oaae, o Ba e ao p cape
popa  oea a ce DS  0 (PUSH DS / MOV AX,0 / PUSH AX),  a
o peec  EXE ao.
   oce oo   a   popaa   cocppoaa  a  opao,  ac-
cepe  ooe ee a oo.  ae peopae ee   op
COM c oo ⨫ EXE2BIN,  eec  MS DOS. Ec  popa,
ocpoeo ooo騪o MYPROG.EXE, o poco ee oa EXE2BIN
MYPROG.  B peae B oe popa a c ee MYPROG.BIN.
Bce o Ba ocaec oce oo ce- a - epeeoa o a 
MYPROG.COM.  B  oee ae cpa cooa oa EXE2BIN MYPROG
MYPROG.COM,  oe-  aa c pacpee COM.

   H poe.

   B ao pepe coepc oa opoa  popaa,  oopa  o
caoe  epeaee  opeee oeco aoee  a設e 
ae o cooee a pa.  Oa oe c㦨 pepo  opoo
⨫ oo copa,  oopx opa COM eae. CSEG SEGMENT
              ORG 100H
              ASSUME CS:CSEG, DS:CSEG, SS:CSEG
;---ae
START:        JMP  SHORT BEGIN  ;epexo  o
MESSAGE1      DB   'The dip switches are set for $'
MESSAGE2      DB   'disk drive(s).$'
;---ea epo ac cooe
BEGIN:        MOV  AH,9    ;㭪 9 pepa 21H - o
              MOV  DX,OFFSET MESSAGE1  ;cpo
              INT  21H     ;o cpo
              PUSH AX      ;coxpae oep 㭪樨 a ee
;---oae cao epeaee  opa A pocxe 8255
              IN   AL,61H  ;oae a  opa B
              OR   AL,10000000B  ;caaae  7
              OUT  61H,AL        ;aee a
              IN   AL,60H        ;oae cao epea.
              AND  AL,11000000B  ;ee cape 2 a
              MOV  CL,6          ;oooa  c AL pao
              SHR  AL,CL         ;cae 2 a  aao
              ADD  AL,49         ;oae 1, o ca c 1
                                 ; 48  epeoa  ASCII
              MOV  DL,AL         ;oeae pea  DL
              MOV  AL,61H        ;o occao op B
              AND  AL,01111111B  ;cpacae  7
              OUT  61H,AL        ;opaae a
;---ea ca aoee
              MOV  AH,2          ;㭪 2 pepa 21H
              INT  21H           ;eaae co  DL
;---ea opo oo cooe
              POP  AX            ;epe oep 㭪樨 co cea
              MOV  DX,OFFSET MESSAGE2
              INT  21H           ;o cpo
              INT  20H           ;aepee popa
CSEG          ENDS
              END START
