          ⮤   ⫠稪  ᥬࠬ.

          蠣  믮   (஢)   ணࠬ
樨 ⠭ 䫠 TF  ॣ 䫠.    蠣
०      ⮬᪨       ஢筮
뢠 (INT 1)  ᫥  믮        
, ᫨ ࢠ  易      뫪
ॣ  SS.    8086/8088  ய᪠   ஢筮
뢠 ᫥    뫪   ᥣ
ॣ஢.  ᮡ 蠣  ०  ࠡ  뢠
"३ ஢筮 뢠"       ᯮ짮
 । ࠡ ணࠬ  ⫠稪. 筮 楤
ࠡ⪨  ஢筮  뢠  ᯮ  ணࠬ
⫠  樨 ᮤন  ॣ஢      祥
.  ࠡ⪥  뢠    ࠭    ⥪
ᮤন  ॣ  䫠,      CS:IP,     ⥬
뢠 䫠 IF  TF,  ।頥 蠣  믮
ᠬ  ࠡ稪   뢠.      楤   ࠡ⪨
뢠 蠥,  ⥪    ०  ﭨ
䫠   ᭮ ॢ   蠣  ०  ࠡ.
믮 ணࠬ  ० ஢,   ⫠稪
( Turbo Debugger, Periscope,  CodeView,  AFD)  ᫥
 PUSHF  INT,  ।  믮 뢠  䫠  TF.
⨬  ⨣    ॠ쭮      㥬
ணࠬ --  ࠡ  ⫠稪  ⥪  뫠    
ᠬ ,    筮 ० ࠡ.

        騩  ࠣ    ॠ      
ᯮᮡ ॣ樨 믮 ணࠬ   ०  ஢,
ᯮ騩  ᮡ  ࠡ        ⫠稪   
蠣 ०:

        ...
        pop ss          ;  ० ஢ ᫥ ⮩ 
                        ; 뢠 int 1  㤥 맢
        pushf
        pop ax          ;  䫠  ax
        test ax,0100h   ; ⠭  䫠 TF ?
        jnz tracing
        ...
tracing:                ; ࠡ  蠣 ०!
        ...

          ஬  ஢筮   뢠   ᫥
믮  POP SS  ਢ    ⮬,    ⫠稪  "
"  PUSHF   ⥪ 㤥 ᥭ ॠ쭮 ﭨ
ॣ 䫠 ( ⠭ ⮬ TF).

         ࠢ, ⫠稪    ⠭    
ணࠬ ஫ 窨 (breakpoints). 뢠 ஫쭮
窨  뢠    INT  3        樨   0CCh.
⮢    INT  3      ⠭
஫      ணࠬ,    㦭  ࢠ
ଠ쭮 믮  믮  ᯥ樠 ⢨.
᪮ ᯮ짮 뢠 1  3  ࠪ୮  ࠪ᪨
  ⫠ ।,  ᤥ ।⥫  뢮
 ࠡ ணࠬ  ⫠稪, ᫨     뢠
 㪠뢠   IRET ( 0CFh). ᫨   筮
⢥ ࠧ   ணࠬ  맮 뢠
஫쭮  窨,  ⫠稪  㤥  ⠭    
樨  INT  3,      ଠ쭮  ᪥   ணࠬ   
믮  뢠    㤥.  䥪⨢  ⮣  ⮤
⢥ 蠥  ᯮ짮  맮 뢠
஫쭮 窨   横    訬  ᫮  ७.
⢥ ॠ 堪  ⠪  --   権
INT 3  NOP. ⮬ ।  ᯮᮡ  ⥫쭮  
⮬ ஫쭮 㬬 ⪮ ,     ந室
맮 INT 3,    ࠡ稪  뢠  ஫쭮
窨 -  ࠡ.    ⥩襬  砥  
  ⠭      뢠    楤,
뢠騥  襭  믮塞   ணࠬ   (ਬ,   
ࠡ稪 뢠 INT 22 (Program  Termination)    INT  0
(Divide Error)),    ⭮  堪    ᯮᮡ    
⠭.  १⮢      ஢
 , ᯮ ࠡ稪 ⫠  뢠  
᪮ 䨪樨    ணࠬ.    ᫥饬  ਬ
ࠡ稪 뢠 INT 1  頥      NOP  맮
뢠 21h, 뢠 । ⮬ 䫠 TF   室  
蠣 ०.   ஢  ⮩  ணࠬ  ⫠稪
CodeView  AFD  ࠡ稪 INT 1 ⠪   뢠,   Turbo
Debugger,      NOP'    INT  21,  
믮 ࢮ  PUSHF   .     
१ : 뢮  ࠭ ᮮ饭 msg .

code segment
assume cs:code,ds:code,ss:code
org 100h
    start: mov ax,2501h     ; ⠭ ࠡ稪 int 1
    mov dx,offset int1
    int 21h
    pushf                   ; 樨஢ 蠣
    pop ax                  ; 믮 ணࠬ
    or ah,1                 ; TF=1
    push ax
    popf
    mov dx,offset msg       ; 뢮 ᮮ饭
    mov ah,09h
print:
    nop                     ;    int 21h
    nop
    int 20h                 ; 室

int1:
    push bp                 ; ࠡ稪 int 1
    mov bp,sp
    push ax

    mov ax,[bp+6]           ;  䫠 TF
    and ah,not 1
    mov [bp+6],ax

    mov word ptr print,021CDh   ; ନ஢  int 21h

    pop ax
    pop bp
    iret

    msg db 'Normal execution! ',0Ah,0Dh,'$'

code ends
end start

          ४  ᯮᮡ  ᡨ    ⮫  ࠪ᪨
 ⫠稪 -- 祭 ⥪    ᯮ塞  .
 ࠢ,  ⫠稪 ᯮ ⥪ 㥬 ணࠬ
  ᢮ 㦤,   ⮬ ⫠ .   ᫥饬
ਬ      push  ax  ࠥ     室   
ணࠬ,   ணࠬ த 믮   ᫥
⪨ stacktop.  ⪥ ஢ ⮣ ࠣ  筮
  ᠬ  push ax.

    ...
    push cs             ; ந ⥪   
    pop ss
    mov sp,offset stacktop
    mov ax,9090h ; nop,nop
    push ax             ; ࠥ 樨
    push ax
    push ax
    nop
    db 0B8h,00h,04Ch    ; mov ax,4C00h
    db 0CDh,21h         ; int 21h
    db 90h              ; nop
stacktop:
    ...                ;  㦭 ⠭ 㪠⥫ ⥪!

         ⮤,  騥      ࠡ
ணࠬ         蠣   ᯮ      ⫠稪,
᭮뢠  ᯮ짮  ୮  ਭ樯  믮
 業ࠫ ஬ (। ).

        ।     ।⠢   ᮡ      ⮢
ॣ஢    奬  設  䥩  ,    
㯠 , ࠭  ணࠬ    ।⢥
।  믮.   樮  ன⢮  
  믮  ,  設  䥩   ᠬ⥫쭮
樨 ० 롮  ।    ,
  ᮢ  ६  䠧  롮ન    믮
.  ࠧ ⨣ ᮪ ⭮ 㧪 設
  襭  ᪮  믮  ணࠬ.      믮
樮 ன⢮  । ࠢ  (᫮  
᫮ 室, 맮 ணࠬ  뢠,  
ணࠬ  뢠), 設 䥩 뢠 ।  
稭 롮       .  ⫠稪,  믮
ணࠬ  蠣 ०, 頥 ।      
蠣,    뢠     ஢筮     뢠.     堭
⨢⢨ ஢  ᯮ짮    ᮡ.
, ਬ, cmd1  cmd2  --    ᫥⥫  ,
࠭ 設 䥩ᮬ   ।    믮,  祬
cmd1        ।  ࠢ    
뫪/  ᥣ  ॣ஢.  ᫨     cmd1
 "ࠧ"  cmd2      cmd2',      
ࠧ   室  믮  ணࠬ    ଠ쭮  ०,
᪮  ३  ᯮ  ᫥饩    
। (cmd2).  蠣 ० ᫥ 믮   cmd1
ந 맮  ஢筮  뢠.      
뢠 ।  뢠        롨ࠥ
஢  cmd2', ,  ࠢ,  
ࠡ   ணࠬ.   騩   ࠣ       
஢ 㦤.

    ...
    mov byte ptr _cmd2,0F9h ; 0F9h --  樨 stc
_cmd2:
    clc
    jc tracing
    ...        ;  "ଠ쭮" ०
    ...        ; 믮 ணࠬ
tracing:
    ...         ; ࠡ  ⫠稪!

         ਢ ਬ  mov byte  ptr  _cmd2,  0F9h
(cmd1) ⢫  ᫥饩  clc  (cmd2)    stc
(cmd2'). ,  ଠ쭮  ०  ࠡ  ணࠬ,  
 stc 㤥 믮 ""  clc,   ⮬
 㦥 室   ।  .    믮  ⮣
ࠣ  蠣 ०  ।    㤥  襭  
믮  stc,  맮 室  ⪥  tracing  
ᮮ⢥騩 ࠡ稪 ᮡ 樨.

             㤠  㦨  ஢
० 믮 ணࠬ, ᯮ ᮡ 믮  
⫠稪 ⥬ 맮 DOS.   ࠡ⪥  뢠  21h
⥪騩 㪠⥫ ⥪ SS:SP ᯮ塞  ணࠬ  ࠭
 ᬥ饭  2Eh    砫  PSP.  ᫨  INT  21h  뢠  
蠣  ०,    ࠡ⪠   砥   ᮮ⢥騬
㭪   ⫠稪      㪠⥫   ⥪,         ࠢ,
⠭.   ਢ  ⮬,  ᫥ 맮
⥬ 㭪樨   PSP    㪠⥫  ⥪  ⫠稪.
    ࠪୠ,  ਬ,     ⫠稪   Turbo
Debugger  CodeView,  AFD  Periscope   㤮    .
ணࠬ  ॠ   ᠭ   誨      룫拉
᫥騬 ࠧ:

    ...
    mov ah,9
    int 21h         ; 맮 㭪樨 뢮 ப
    ...
    mov ax,ss       ; ࠢ ⥪ ᥣ⮢
    cmp ax,es:[30h] ; (।,  ES 㪠뢠  PSP)
    jne tracing     ; ᥣ  ࠢ -- ࠡ  ⫠稪!
    ...
tracing:
    ...   ; ॠ  ஢

        騩   ᯮᮡ   㦥   ⫠稪    뢠
ᮡ 樠樨 ॣ஢ ணࠬ  㧪. ᫥
㧪 ணࠬ ⨯ COM,  ॣ  CS,DS,ES    DS  ᮤঠ
ᥣ  PSP, ॣ IP ࠢ 100h,    㪠⥫  ⥪
  ணࠬ ᥣ (筮 SP=0FFFEh,   
  , ᫨ ணࠬ 㯥  ᥣ  ).
 ॣ CX      ࠧ  ணࠬ,  ࠢ  
COM-䠩.  㧪 EXE-ணࠬ,  PSP  㪠뢠  ॣ
DS     ES,      砫쭮   ﭨ   ॣ஢   CS,IP,SS,SP
⠭    ᮮ⢥⢨     祭ﬨ      
EXE-䠩.    ॣ  CX  頥   稭,   ।塞
᫥饩 㫮:

      CX = (PageCnt*200h - HdrSize*10h + 200h - PartPag) % 0FFFFh,



        PageCnt --  ࠧ ணࠬ  512- ࠭
(2   ᬥ饭 +4   EXE-䠩),

        HdrSize --      16-  ࠣ  (2
  ᬥ饭 +8),

        PartPag --  筮  ᫥ ࠭ 
 (2 , ᬥ饭 +2),

        % --   ⪠   .

         EXE-, ⠪  COM-ணࠬ 樠  ॣ  AX
   祭:

        00FFh, ᫨ 1- 㬥 ணࠬ  稭  ᨬ
               X:,    X  ᮮ⢥  㪢  饣
               ᪮;

        FF00h, ᫨ 2- 㬥 ணࠬ  稭  ᨬ
               X:,    X  ᮮ⢥  㪢  饣
               ᪮;

        FFFFh, ᫨ 1-  2- 㬥  ணࠬ  뫠  
               騥 ᪮;

        0000h,  ᫨  1-    2-  㬥     뫠   
               騥 ᪮.

         祭ﬨ  樠஢ ॣ  BX,
DX, SI, DI, BP  ⮢୮   ⭮.  宦,  ॣ  DI
⠭  ࠢ  SP,      ⠫  ᥣ  ᮤঠ
㫥 祭.

         ࢮ 㧪 ணࠬ ⫠稪 Turbo Debugger  
CodeView ᥣ    ॣ  AX,BX,CX,DX,SI,DI,BP.  ᫥
୮  㧪  Turbo  Debugger  ᮤন     ᫥
ॣ , ⠢訩 ᫥ ࢮ  ண  ணࠬ,  
CodeView  ᭮  樠      ﬨ.      ࠧ,
娫ᮢ ⮩   ⫠稪   ॣ  CX,
 ஬   ணࠬ ᥣ 室  ,  㦭.
஬ ⮣, Turbo Debugger  让 ⭮  ""
    ୮  㧪,  ஢  祭    ॣ  AX.
⫠稪 AFD  㧪 ணࠬ ⠪    ॣ
AX,BX,DX,SI,DI,BP,      ॣ   CX   頥   ४⭮
祭.  ᫥  ୮  㧪  CX  ᭮  ⠭
ࠢ쭮,  ⠫ ॣ ᮤঠ .     Periscope
v4.01,  ⮣,  ४⭮ 樠 ॣ CX,  ⮬
   ᥣ ࠢ쭮 㦠    ॣ  AX,    ⥬
᪫祭,   㬥 ணࠬ ᮤন ᨬ '\'
 '/' --  ⮬ 砥 AH ᥣ 㤥 ᮤঠ 00h.

          ᫥饣 ண       
 "㬭" ⫠稪 (⨯  TD.EXE)  ॠ쭮  믮塞
. 筮  ᤥ  ᪨㥬      
 樨   ।      ࠢ  -
ᯮᮡ (, ᪠, jmp-).  ⫠稪  ⭮  ᥬ
, ⨢  믮塞  ⢨⥫쭮 ,  
襭 堪, , 㤥 ᡨ  ⮫.    ਢ
ࠣ ᮧ      祭  E3FFh    
0000h:046Ch (稪 ⨪ ⥬  ⠩),      ᠬ-
 ⢫ 室   addr1.

    mov bx,offset addr1
    jmp hidden   ; 室  । 樨

    xor ax,ax
    mov ds,ax
    db 0C7h,06h,6Ch,04h     ;  Turbo Debugger 
                            ; mov word ptr [046C],E3FF
hidden:
    jmp bx   ; 室  addr1
addr0:
    ...
addr1:
    ...

         ந뢠 ⮣ ࠣ    Turbo  Debugger'
  jmp  bx      ⥫    mov  word   ptr
[046Ch],0E3FFh.  ᫥  믮    jmp  hidden,   Turbo
Debugger ᭠砫 룠        addr0,  ᫥
祣 믮   jmp bx  ந室  室  
⪥  addr1.    ⮬    jmp   bx   ⠪      ⠭
ᥬ஢.     ⫠稪  (ਬ,  
AFD.COM),    jmp  bx,  -⠪  ᯫ뢠      
믮 jmp hidden.   , ᠭ  ᯮᮡ  ࠢ  
⢮      ⠪    ᯥ宬  ਬ  
   ᥬ஢.

        쬠  䥪⨢  ।⢮         ⫠   
ᥬ஢ -- ᯮ짮  ࠡ稪  ஢
뢠  ᪮ 䨪樨 .  ᫥饬 ਬ
 ணࠬ ஢뢠 ࠡ稪 蠣 뢠
INT 1.

    ...
    xor ax,ax
    mov es,ax
    mov ax,word ptr es:[06h]    ; ࠭塞  뢠 01h
    mov cs:int01seg,ax
    mov ax,word ptr es:[04h]
    mov cs:int01off,ax

    mov word ptr es:[06h],cs    ; ⠭  ࠡ稪
    mov word ptr es:[04h],offset coder

    mov dx,offset msg

    pushf
    pop ax
    or ax,0100h     ; ⠭ 䫠 TF
    push ax
    popf
    nop

 ; ஢ :

    db 2Eh,09h  ; mov ah,9
    db 57h,21h  ; int 21h
    db 06h      ; pushf
    db 0C2h     ; pop ax
    db 0BFh,0FFh,0FEh   ; and ax,0FEFFh
    db 0CAh     ; push ax
    db 07h      ; popf
    db 0Ah      ; nop

    mov ax,word ptr cs:int01seg ; ⠭  01h
    mov word ptr es:[06h],ax
    mov ax,word ptr cs:int01off
    mov word ptr es:[04h],ax

    mov ax,4c00h
    int 21h

coder:                      ; ࠡ稪 int 01h
    push bp
    mov bp,sp
    mov bp,word ptr [bp+2]
    xor byte ptr cs:[bp],9Ah
    pop bp
    iret

int01off dw 0
int01seg dw 0
msg  db 'Try to trace me!',0Dh,0Ah,'$'
    ...

        騩 ࠣ    ᢥ  ।
ࠢ   jmphere ஢ 맮 뢠  INT
0.  ਬ ਬ⥫   ⥬,  ⫠稪,  ࠡ騥
 饭 ० (TD386.EXE  ..),    뢠  뢠
INT 0  ࠡ⪨   0.  ਬ,  TD386  ⠭
ࠡ  樨 div ah, 뤠 ᮮ饭 "Divide by zero".

    ...
    xor ax,ax
    mov es,ax
    mov word ptr es:[0000h],offset jmphere
    mov word ptr es:[0002h],cs
    div ah ;   0
    ...

jmphere:
    ...


        (c) Mike Belonosov
             2:463/198.4@FidoNet

