 װTASM 5.0ܼ򵥣ֻҪرվ[ع]е"TASM50.zip"ļѹWindows9x/NTִ
"INSTALL.EXE"ɿʼװ

    1.ڰװTASM5.0֮װDelphi 1.0Borland C++ 4.x߰棬Ҫֶϵͳ
ʹЩƷԹͬһϵͳС顰System.iniļ[386Enh]һǷжTDDEBUG.386
ɾTDEBUG.386ֻ֤汾TDDEBUG.386װ롣ͨ[386Enh]Сȷϣ
װTASM 5.0δģֹSystem.iniļ[386Enh]Сӣ
         device=c:\tasm\bin\windpmi.386֧TASM5.032λߡ
         device=c:\tasm\bin\tddebug.386֧ǵĵ

    2.Windows NTʾ൱Windows9xMS DOSʽ
    NTʾ16λʽtlinkҪʾCONFIG.NTļһУ
         ntcmdprompt

    3.ưװTASM5.0ʱѡ
      16-bit command line tools [3085K]
         װ16λߣTASMTLINKȣҲСװĬѡ(鲻װ)
      32-bit command line tools [3163K]
         װ32λߣTASM32TLINK32
      Turbo Debugger for DOS [1041K]
         װTurboDOSԹߣҲСװĬѡ(鲻װ)
      Turbo Debugger for Windows [1533K]
         װTurboWindowsԹ߼صԹߡ
      Turbo Debugger for Win32 [1502K]
         װTurboWin32Թߡ
      Examples [580K]
         װBorland TASM̡
      Documentation Files [6K]
         װ˵ĵ

    4.Windows9x/NTTASM3232λ
    TASM5.0װWindows½TASM5.0飬ΪЩʾеĹ
߽ӦPIFļTASM.EXE16λִй߲ҪرPIFļܹڳWindows MS-DOS
ʽ¡ҪWindows MS-DOSʽTASM3232λߣҪΪ佨ӦPIFļ򵥵ķ
B32TOOLS.PIFTASM\BINĿ¼£Windows MS-DOSʽЩ32λߡWIndows˫
B32TOOLS.PIF,ἤһDOSڣ֮TASM32.EXETLINK3232λߡ

TASM 5.0 ļ嵥

X:\TASM 

<dir> 
BIN 

<dir> TASM5.0ִ߰ļ(77) 
TD.PIF ΪԹTDһеʾ 
B32TOOLS.PIF ﶨһTasm5.0 32λеʾ 

TASM.EXE 16λʵģʽ 
TASMX.EXE 16λģʽ 
TASM32.EXE 32λģʽ 
TLINK.EXE 16λӳ(ֻ16λĿļ) 
TLINK32.EXE 32λӳ(ֻ32λĿļ) 
BRC.EXE 16λԴ/󶨳 
BRCC.EXE 16λԴ 
BRC32.EXE 32λԴ/󶨳 
BRCC32.EXE 32λԴ(ԴBRC32һ) 
MAKE.EXE һܵMAKEFILEļĹ涨ɱ롢ӵĹ 
MAKER.EXE MAKENT(WindowsNTMAKEʱ) 
TLIB.EXE Tasm 
IMPLIB.EXE ɶ̬ӿӦĹ(һõĹ) 
IMPDEF.EXE ɶ̬ӿģ鶨ļĹ 
H2ASH.EXE C/C++ͷļTasmͷļ(ļ)ת(16λ) 
H2ASH32.EXE C/C++ͷļTasmͷļ(ļ)ת(32λ) 
WINSTUB.EXE Windows򸽼һDOSͷ(DOSPEʾ) 
MAKESWAP.EXE ڴ湤(ڴʱһ̽ļ) 
OBJXREF.EXE OBJתΪREFļת 
RLINK.EXE Դ(ѱԴļִͬļװ䵽һ) 
TDUMP.EXE ļ۲(Ҫڻȡ.EXE.OBJ.LIBļϢ) 
THUNK.EXE ΢ThunkߣҪ16/32λת(ϸ˵EXAMPLES) 
TOUCH.EXE бļڡʱΪǰָڡʱĹ 
JITIME.EXE ʱ԰װ 
GROUPS.EXE Windowsĳ½Tasm5.0ĳ 
32RTM.EXE ûù 
TDSTRIP.EXE ű(for 16λ) 
TDSTRP32.EXE ű(for 32λ) 
TDMEM.EXE TDڴ۲(DOSʽ) 
TDRF.EXE TDԶļ乤 
TD.EXE DOSԹ(ɻ) 
TDW.EXE WindowsԹ(ɻ) 
TD32.EXE Win32Թ(ɻ) 
TDINST.EXE TD.EXEù(ɻ) 
TDWINST.EXE TDW.EXEù(ɻ) 
TD32INST.EXE TD32.EXEù(ɻ) 
TDWINI.EXE TDʾ̬ӿù(for Windows) 
TDREMOTE.EXE Զ̵Թ(for DOS) 
WREMOTE.EXE Զ̵Թ(for Windows) 
WRSETUP.EXE Զó(for Windows) 
GREP.COM ûù 

WINDPMI.386 ӦӵSystem.iniļ[386Enh]һ 
TDDEBUG.386 Գ 
BUILTINS.MAK ڽmakefileļ(ûȱʡmakefileļMAKE.EXE) 

TLINK.CFG TLINKĵ 
TLINK32.CFG TLINK32ĵ 

TASM.HLP Turbo Assemblerļ(Windowsļʽ) 
TDWINI.HLP TDʾ̬ӿù߰ļ 
TDHELP.TDH TD.EXEİļ 
TDWHELP.TDH TDW.EXEİļ 
TD32HELP.TDH TD32.EXEİļ 

RTM.EXE Ƕߣߵ(൱һļ) 
TDCON32.EXE ǶߣTDW.EXE(൱һļ) 
DPMI16BI.OVL ļ 
DPMI32VM.OVL ļ 
RLINK32.DLL ̬ӿ 
RW32CORE.DLL ̬ӿ 
RWRES.DLL ̬ӿ 
BWCC.DLL ̬ӿ 
TDKBD32.DLL ̬ӿ 
TDVID16.DLL ̬ӿ 
TDWINTH.DLL ̬ӿ 
DUAL8514.DLL ʾ̬ӿ 
STB.DLL ʾ̬ӿ 
SVGA.DLL ʾ̬ӿ 
SVGA32.DLL ʾ̬ӿ 
TDWGUI.DLL ʾ̬ӿ 

HELP.ICO ͼļ 
TDDOS.ICO ͼļ 
TDOSINST.ICO ͼļ 
TD32.ICO ͼļ 
TD32INST.ICO ͼļ 
TDW.ICO ͼļ 
TDWINST.ICO ͼļ 
WORKOPT.DOS ֪ƺǹѡ 
INCLUDE 

<dir> TASM 5.0ļ(3)
(İļڴ) 
MMSYSTEM.INC 16λļ 
TOOLHELP.INC 16λļ 
WINDOWS.INC 16λļ 
LIB 

<dir> TASM 5.0ļ(2)
(ļڴ) 
IMPORT.LIB 16λļ 
IMPORT32.LIB 32λļ 
EXAMPLES 

<dir> TASM 5.0 
(ļ) . 
DOC 

<dir> TASM 5.0˵ĵ(10) 
MAKE.TXT MAKEMAKERʹ˵ 
TDUMP.TXT TDUMPʹ˵ 
TLIB.TXT IMPLIBIMPDEFTLIBʹ˵ 
TLINK.TXT TLINK(TLINK32),TLINK.CFG,Response files,ģ鶨ļʹ˵ 
TSM_HELP.TXT ļTurbo AssemblerһЩ 
TSM_UTIL.TXT TDSTRIP(TDSTRP32)TDMEMTDWINITDRFʹ˵ 
TD_ASM.TXT TURBO DEBUGGER Assembler-level debugging 
TD_HDWBP.TXT TURBO DEBUGGER USING THE HARDWARE DEBUGGING FEATURES 
TD_RDME.TXT TURBO DEBUGGER Turbo Debugger Readme file 
TD_UTILS.TXT H2ASH 
UNPAK.EXE .  
README.COM . װʱһΣԺûʲô 
TSM_INST.TXT . TASM 5.0װ˵ĵ 
TSM_RDME.TXT . TASM 5.0ܸ 

TASM 5.0 ּ֧

(Borland)վ㣺http://www.borland.com/
TASMҳhttp://www.borland.com/borlandcpp/cppcomp/tasmfact.html
TASM飺news://newsgroups.borland.com/borland.public.tasm/

СTASM 5.0 ߰

ûԱһWindowsôTASM 5.0߰Ҫļ
            TASM32.EXE                ;
            TLINK32.EXE               ;
            BRC32.EXE                 ;Դ
            TLIB.EXE                  ;
            IMPLIB.EXE                ;μ
   Ȼ㲻,Turbo ASM5.0ġimport32.libȡ,ֻǰǡ桱
ǡ㡱Ҫĸأӵһı༭򵥵ľWindiows9xļ±ˣ
ʮֳ֣Ϊдϣ༭м䡢鿽ܣҪżվվҪƳû
дʵóо9x&2KµĻԱ༭ˣ

TASM/TASMX/TASM32

[ֻTASM32]

Turbo Assembler Version 5.0 Copyright (c) 1988, 1996 Borland International

Syntax: TASM32 [options] source [,[object] [,[listing] [,[xref]]]] [;]
䷨
TASM32 [ѡ] Դļ [,[Ŀļ] [[嵥бļ] [[()ļ]]]] [;]

˵(䷨ӢзԭģǱվʵ޸Ķãܷӳʵ)

1. ѡһϡݾѡãҲɲҪԺ֣ᷢһЩѡڱWin32ԳʱźҪáҽϾ뷽ʽģָ֮ϸ˵̳רһһ˵ʾ /a,/s Alphabetic or Source-code segment ordering
涨ĿļʱӢĸ˳Դ˳дΣĬΪ/s 
/c Generate cross-reference in listing
嵥ļв 
/dSYM[=VAL] Define symbol SYM = 0, or = value VAL
ţʹãʹʱñϢĳʼֵͨTASM32
дݻȡ 
/e,/r Emulated or Real floating-point instructions
ĻʵʵķָĴ 
/h,/? Display this help screen
ĻʾϢ 
/iPATH Search PATH for include files
ðļ· 
/jCMD Jam in an assembler directive CMD (eg. /jIDEAL)
һָ磺/jIDEAL 
/kh# Hash table capacity # symbols
ɢб# 
/l,/la Generate listing: l=normal listing, la=expanded listing
涨嵥ļl=嵥ļla=嵥ļ 
/ml,/mx,/mu Case sensitivity on symbols: ml=all, mx=globals, mu=none
ñʱԷŴСджȣml=ȫУmx=ԹⲿƴСдУmu= 
/mv# Set maximum valid length for symbols
÷ŵЧȣųֵȲֽԣ 
/m# Allow # multiple passes to resolve forward references
#α루ɨ裩ǰãһöɨ裬һʹã/m1/m2 
/n Suppress symbol tables in listing
ȡ嵥ļеı 
/os,/o,
/op,/oi Object code: standard, standard w/overlays, Phar Lap, IBM
涨ĿʽֱӦ׼ʽ׼w/overlaysʽPhar LapʽIBMʽ 
/p Check for code segment overrides in protected mode
Ǵ루ʵģʽ¿дΣģʽ¾ͻ⣬ģʽдһ
ͨʵֵģμ̾ѡеġPm09.zip⻰Ǻǣ 
/q Suppress OBJ records not needed for linking
ĿļȡЩ޹صݼ¼ 
/t Suppress messages if successful assembly
ɹȡϢ 
/uxxxx Set version emulation, version xxxx
ð汾ͻ 
/w0,/w1,/w2 Set warning level: w0=none, w1=w2=warnings on
ó伶 
/w-xxx,/w+xxx Disable (-) or enable (+) warning xxx
ʹ(/w-)ʹ(/w+) 
/x Include false conditionals in listing
嵥ļаã嵥ļа֧Ĵ룩 
/z Display source line with error message
ڴϢʾԴ 
/zi,/zd,/zn Debug info: zi=full, zd=line numbers only, zn=none
Ϣzi=ȫzd=кţzn= 


2. Դļѡı༭дĻԳļƣıʽļʹ
ƼչASMʽпԲļչ֡ȻҲָչʽһҪ
ļȫԴʹƼչ

3. ĿļѡǱĿģӳװʱʹãƸʽȷһ
ĿļͻὨʽδָƣչͻԶԡԴļ+
.OBJΪļĬϣͰָġĬϵġ

4. 嵥ļҲơбļѡǲԴеĸִıʽĬչ
Ϊ.LST

5. ļҲСűļѡа˳еĸַšεϢƸ
ʽĬչΪ.XRFΪĶļӦʹCREFתΪıļCREF
õĸʽǣ
CREF [űļ];


ʾ
TASM32 myfile,,,
ĬϷʽ"myfile.asm"ļ"myfile.obj""myfile.lst""myfile.crf"ļ

TASM32 myfile;
ĬϷʽ"myfile.asm"ļֻ"myfile.obj"ļ

TASM32 /v /z myfile,,;
ڼ佫ȫ״̬ϢͳϢʾĻϣ"myfile.obj""myfile.lst"ļ


ϻָʾ

ߣ
վ
Դԣ
ղڣ2003-09-23

   
   νԴļе¼ҪĽܣ˵ڱˮƽޣд󼰿Խһ޸ĵĵطָ
ϻ̣ 
һϻǰ׼
MS-DOSϵͳ磺MSDOS6.22 , MSDOS7.0 ȣ
ı༭ 磺EDIT.COM , TURBO.EXE , TC.EXE , C.EXE ȣ
 磺MASM.EXE , ASM.EXE ȣ
ӳ 磺LINK.EXE ȣ
Գ 磺DEBUG.EXE ȣ

:




a.Դͨb.ΪĿļЩd.Ϊִļ
  
 c.ͨ޸ģ󣩡   
 
f.ȷõԹߵԣ޸ģ߼󣩡  
e
 ȷ
 g.


ڶԣÿһĸĹ(PROCEDURE)ϸ˵

PROCEDURE a:Դ򣨼 ļ.asm
̾൱ֽϱдԴһֻǽֽΪ˼ҲԴ¼롣Դ¼ķܶ࣬潫ܾ巽 
1.ͨMD-DOSԴEDIT.EXEı༭룬DOSʾ¼:EDITس,ʱϵͳڿɵʱEDITĲĻϣͿʾ½¼ˣ¼Ϻѡ̲ļһļʽfilename.asm filenameΪļ,1-8ַɣasm Ϊʶȥģɸġ̺DOS¿DOSDIR鿴ļڣͿԽнb
2.ϵͳûEDITҲϤı༭¼롢༭cԺpascalԵı༭༭,ļΪfilename.asmʽɡ

PROCEDURE b:ĿļΪ.obj .lst .crfļ
̼ȷԴΪԡ嵥ñĿļʱĳϵͳָڵڼУʲô͵Ĵɸʾȥһ޸ġֽܾ̣
DOSʾ¼MASM filenameس
עϵͳڵĻΪMASM.EXE,ϵͳĻΪASM.EXEʱ㽫ΪASM filenameسfilenameΪղPROCEDURE a нļ
ʱļֱ.obj .lst .crf)ʣһ·سɡʾϢԴеĴΪ0ʾ˳ͨͿɽнcΪ0˵д󣬲ֵָУʾȥ޸ġ̫໹δȿʾȥˣνϢһָļı༭ȥ鿴 MASM filename >filen filenΪһûùļԴųϢԺɲ鿴filenõϢ

PROCEDURE c:벻ͨ,޸ģͣԴ䲻Ϸ
ִйPROCEDURE bгϢʱҪԼPROCEDURE cȥԾPROCEDURE dȥǿִPROCEDURE dκЧ
ھͿҴɣҪPROCEDURE bмĴΪÿһ﷨÷ܼ߼ƣ䰴λãԾҪǺóкšڼ¼кź󣬾ӦٴִPROCEDURE aʱͲӦǴѱõԴEDITΪDOSʾ¼룺
EDIT filename.asmسкŽ޸Ĳ̣ٴνлֱ࣬PROCEDURE bͨΪֹɼִPROCEDURE d
һЩϢԱԣ

1Register already defined ڲ߼
2Unknown symbol type ڷУЩʶĶ
3Symbol is multi-defined ظһ
4Symbol not defined ûж
5Syntax error ﷨κοʶ﷨ƥ
6Symbol is reserved word
ͼǷʹһı(addΪһ)
7Not proper align/combine type SEGMENTȷ
8One operand must be const ǼӷָķǷʹ
9Operands must be same or 1 abs ǼָķǷʹ
10Already have base register ͼظַ
11Illegal size for item õĳǷǷģ磺˫λ
12Illegal register value ָļĴֵܷ롰reg ֶ
13Must be AX or AL ĳЩָֻAXAL
14Improper use of segment reg μĴʹòϷ磺mov ds,0
15Division by 0 or overflow һ0ıʽ
16value is out of range ֵҪʹõ
17CS register illeal usage ͼǷʹCSĴ
18DUP is too large for linker
DUPǶ̫ڴӳܵõҪļ¼

PROCEDURE d:ΪִļΪ.exe .comļ
һû⣬Ҳļˡ
ʽDOSʾ£ LINK filename س

PROCEDURE e:бõĿִļ
PROCEDURE dͨ󣬻һִļʱֻ򣬿Ƿóڼ䣬ҪһЩٽ״̬ ǷȶǷȷһɽPROCEDURE gˡ
µǲOKһЩĪĽɲҪΪļָӣʵһ˿ذĳִСǰΪҵļëڿʱǧҪţסԼȲҪӣʱǣʱҪõؼõһˣPROCEDURE f 

PROCEDURE f:õԹߵԣ޸ģ߼
ҽDOSԴĵԳDEBUG.EXEгԡ.
Ҫ˽DEBUGĻ÷ 
1ڵԳʱʽ
DEBUG FILENAME.??? س
FILENAMEļ???չļڴǰѱһļΪdjx.exe ҪеʱDOSʾ
DEBUG djx.exe سɼ '-' ʾκʾ˵ȷɽеԡ
2DEBUGԹõDEBUGܣ
עָ [] ݿȱʡ
1)D(Dump)ʾָڴ浥ԪݣһݣDSΣ
ʽd[ַ] [ַ]ָڴ浥Ԫʾ128ֽڵ
[ַ]ȱʡʱʾһDUMP 
d ַΧ ʾָΧڵڴݡ
ʾ-d100 ʾDS100Hʼݣʮʾ

2)E(Enter)޸Ĵ洢ԪݣһDSΣ
ʽe ַ [] ø[]ָΧĴ洢Ԫ
e ַ ޸һָڴ浥Ԫ
ʾ-e ds:200 'djx'FF00AA ͿɽDSδ200ʼ205
Ϊ64 6A 78 FF 00 AA

3)G(GO)
ʽ-g [=ַ][ϵַ1 [ϵַ2 ...[ϵַ10]]]
ָ[ַ]ʼִгַȱʡӵǰCS:IPʼ[ϵַ1]ֹͣʾмĴ־λһָ滹жϵ㣬ɼg,ִС
ʾ-g001a ִдӵǰcs:ip001aָ
ע⣺ַñָĵһֽ

4)T(Trace)ִһ
ʽ -t [=ַ] ָ[ַ]ִһͣ,ʾмĴݼ־λֵһָ[ַ]ȱʡӵǰCSIPʼִ
-t [=ַ][value] ִַָvalueָֹͣ

5)P(proceed)ִһѭ;һжϻcallӹ
ʽ-p [=ַ][n]
ʾ: mov ah,02h
mov dl,41h
int 21h
ʱ: -p سϵͳʾһַA,ⲻP,T,ôϵͳINT 21HжϵУʱΪĳˣһע!!

6)R(register)ʾ޸ļĴ
ʽ-r ʾмĴ
-r Ĵ ޸ָĴ(ɸģAX,BX,CX,DX,SP,
BP,SI,DI,CS,DS,ES,SS,PC,IP,F)

7)U(Unassemble)
ʽ-u [ַ] ָ[ַ]32ֽڣ[ַ]ȱʡӵǰַ32ֽڡ
-u ַΧ ָΧڵĴ洢Ԫз

ڵԳпõDEBUGͣDEBUGлڼвõͲٽˡ

PROCEDURE g:ãǾһOK!!!!ԡ˯

һвĳϣҺһԡ޸Ĳͨ
ִPROCEDURE a༭Դ
ʵֹܣĻʾHello world
My name is DJX
ļerror.asm
кţ Դ룺

1 data segment
2 out1 db 'Hello world'
3 ax db 'My name is DJX'
4 data ens
5
6 code segment
7 assume cs:code;ds:data
8 lea dx,out1
9 mov ah,2
10 int 21h
11
12 mov dl,0ah
13 mov ah,2
14 int 21h
15 mov dl,0dh
16 moo ah,2
17 int 21h
18
19 lea dx,ax
20 mov ah,
21 int 21h
22 code ends

ڱ༭ִPROCEDURE bmasmб룺masm errorسʾ£
Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.

Object filename [error.OBJ]:
Source listing [NUL.LST]:
Cross-reference [NUL.CRF]:
End of file encountered on input file
error.ASM(23): warning A4085: End of file, no END directive
Open segments: DATA
error.ASM(3): warning A4016: Reserved word used as symbol: AX
error.ASM(4): error A2105: Expected: instruction or directive
error.ASM(16): error A2105: Expected: instruction or directive
error.ASM(19): error A2049: Illegal use of register
End of file encountered on input file
error.ASM(23): warning A4085: End of file, no END directive

51566 + 406450 Bytes symbol space free

2 Warning Errors
4 Severe Errors

˵д󣬲ڵ3,4,16,19,23д
ִPROCEDURE cȥһ
У3 ax db 'My name is DJX'
ĴAXΪ
3 out2 db 'My name is DJX'
עղǶAXΪʱںĳù'AX'ڵ19
19 lea dx,ax
ڳҲ19дΪܽAXЧַDX,
19 lea dx,out2
һ¾ͽ
У4 data ens
ΪһεĽ©ĸ
4 data ends
ʮУ16 moo ah,2
Ҳ
16 mov ah,2
ڶʮУ
Ϣerror.ASM(23): warning A4085: End of file, no END directive
˵ûнα
룺ڵߡмַ־ start:
ԭ23 end start

ִPROCEDURE aԴ޸£

data segment
out1 db 'Hello world'
out2 db 'My name is DJX'
data ends

code segment
assume cs:code;ds:data
start:
lea dx,out1
mov ah,2
int 21h

mov dl,0ah
mov ah,2
int 21h
mov dl,0dh
mov ah,2
int 21h

lea dx,out2
mov ah,9
int 21h
code ends
end start

ٴνPROCEDURE bб룬Ļʾ

Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.

Object filename [error.OBJ]:
Source listing [NUL.LST]:
Cross-reference [NUL.CRF]:
51524 + 406492 Bytes symbol space free

0 Warning Errors
0 Severe Errors

޴
ִPROCEDURE dΪִļ(link errorس),Ļʾ

Microsoft (R) Overlay Linker Version 3.60
Copyright (C) Microsoft Corp 1983-1987. All rights reserved.

Run File [ERROR.EXE]:
List File [NUL.MAP]:
Libraries [.LIB]:
LINK : warning L4021: no stack segment

ʱerror.exeִļѴڣִPROCEDURE eпһǷȷ
dosʾ¼룺errorس(С!!!)
Ļʾ룬reset My computer!
˵߼д󣬲ء
ǾҪPROCEDURE f,õԹߵԣҴ
DOSʾ¼룺debug error.exeس
Ļ - ʾʱͿDEBUGҴˣ
d鿴ݣչַݶεĶףݶڵ100hλϣʱmasmһĵĹ涨Ǿڶݶκı100hԪҪǽdsμĴλڳstart:ָ(ִPROCEDURE a)
mov ax,data
mov ds,ax
ִPROCEDURE b,PROCEDURE d,PROCEDURE eг
Ļʾ

My name is DJX룬Ҫ
ٴִPROCEDURE a򣬷֣
1.й涨ÿַӦ$β
2.һеAHӹܺӦΪ09H

ִPROCEDURE b,PROCEDURE d,PROCEDURE eг
Ļʾ
Hello world
My name is DJXܷDOS
ԭڳûзDOSָ
PROCEDURE aб༭
DOS 21Hжϵ4cHӹܱɷDOScode endsǰӣ
mov ah,4ch
int 21h
ִPROCEDURE b,PROCEDURE d,PROCEDURE eг
Ļʾ
Hello word
My name is DJX
DOS
ɹ
һ͵ɣȷ
ȷԴ

data segment
out1 db 'Hello world$'
out2 db 'My name is DJX$'
data ends

code segment
assume cs:code;ds:data
start:
mov ax,data
mov ds,ax

lea dx,out1
mov ah,9
int 21h

mov dl,0ah
mov ah,2
int 21h
mov dl,0dh
mov ah,2
int 21h

lea dx,out2
mov ah,9
int 21h

mov ah,4ch
int 21h
code ends
end start

ܼ򵥣ֻΪ˵ʵֻԵϻ̼Թ̣ϰص㣬Ա˳ͨ
 


̳̣	
DEBUG

ߣ
վ
Դԣ
ղڣ2003-09-23


   DEBUGDOSеһⲿDOS 1.0ʹд˿ɼҪˡȻĹܷǳǿ󣬿Խ⣬Ƕ˵ǳѧ˵ȴǳաˣֽDEBUGϸһô֪ʹá
Debug:Aࣩ


ֱӽ 8086/8087/8088 ϲڴ档

ӻ䴴ִеĻ롣ֵʮƸʽ밴һĸַЩֵõĲ루룩ǰָǰ׺롣


a [address]




address

ָָλá address ʹʮֵ벻ԡhַβÿֵַָa ϴֹͣʼࡣ

йؽ뵽ָֽеϢ뵥⡱бе Debug E룩

йطֽڵϢ뵥⡱бе Debug Uࣩ


˵

ʹü

εΪ cs:ds:es:  ss:Զ̷صļ retfַļȷַС磬ʹ movsw ƶ 16 λִʹ movsb ƶ 8 λֽڴ


ת͵

ֽ滻Զ̡ԶתûൽĿַͨʹ near  far ǰ׺תãʾ

-a0100:0500
0100:0500 jmp 502 ; a 2-byte short jump
0100:0502 jmp near 505 ; a 3-byte near jump
0100:0505 jmp far 50a ; a 5-byte far jump

Խ near ǰ׺дΪ ne


ֺֽڴλ

ĳĳڴλûֽڴλʱǰ׺ word ptr ǰ׺ byte ptr ָ͡ɽܵдֱ wo  by·ʾָʽ

dec wo [si]
neg byte ptr [128]


ָ

Debug ʹð ([ ]) Ĳڴַϰ÷Ϊһ Debug ڴַĲ·ʾָʽ

mov ax,21 ; load AX with 21h
mov ax,[21] ; load AX with the
; contents of
; memory location 21h


ʹαָ

ʹ a ṩõαָdb 룬ֱֵֽӻൽڴ棬dw 룬ֱֵӻൽڴ档αָķ

db 1,2,3,4,"THIS IS AN EXAMPLE"
db 'THIS IS A QUOTATION MARK:"'
db "THIS IS A QUOTATION MARK:'"
dw 1000,2000,3000,"BACH"




a ֧ʽļעʾ

add bx,34[bp+2].[si-1]
pop [bp+di]
push [si] )

֧вͬʣʾ

loopz 100
loope 100
ja 200
jnbe 200

 8087 룬ָ wait  fwait ǰ׺ʾ

fwait fadd st,st(3) ; this line assembles
; an fwait prefix


Debug:CȽϣ


Ƚڴ֡


c range address




range

ָҪȽϵڴһʼͽַʼַͳȡйЧ range ֵϢ뵥⡱беġDebug ˵

address

ָҪȽϵĵڶڴʼַйЧ address ֵϢ뵥⡱беġDebug ˵


˵

 range  address ڴͬDebug ʾκݶֱӷص Debug ʾв죬Debug ¸ʽʾ
address1 byte1 byte2 addess2



ͬЧ

c100,10f 300
c100l10 300

ÿ 100h  10Fh ڴݿ 300h  30Fh ڴݿбȽϡ

Debug ӦǰʾϢٶ DS = 197F

197F:0100 4D E4 197F:0300
197F:0101 67 99 197F:0301
197F:0102 A3 27 197F:0302
197F:0103 35 F3 197F:0303
197F:0104 97 BD 197F:0304
197F:0105 04 35 197F:0305
197F:0107 76 71 197F:0307
197F:0108 E6 11 197F:0308
197F:0109 19 2C 197F:0309
197F:010A 80 0A 197F:030A
197F:010B 36 7F 197F:030B
197F:010C BE 22 197F:030C
197F:010D 83 93 197F:030D
197F:010E 49 77 197F:030E
197F:010F 4F 8A 197F:030F

עбȱٵַ 197F:0106  197F:0306Щַеֵͬġ


Debug:Dת


ʾһΧڴַݡ


d [range]




range

ָҪʾݵڴʼͽַʼַͳȡйЧ range ֵϢ뵥⡱беġDebug ˵ָ rangeDebug 򽫴ǰ d ָĵַΧĩβʼʾ 128 ֽڵݡ

йʾĴݵϢ뵥⡱бе Debug RĴ


˵
ʹ d ʱDebug ʾڴݣʮƲ֣ÿֽڵֵʮƸʽʾ ASCII 벿֣ÿֽڵֵ ASCII ַʾ)ÿǴӡַʾ ASCII ɾ (.) ʾÿʾʾ 16 ֽڵݣ 8 ֽں͵ 9 ֽ֮һַÿʾд 16 ֽڵı߽Ͽʼ


ٶ
dcs:100 10f
Debug ¸ʽʾΧеݣ
04BA:0100 54 4F 4D 00 53 41 57 59-45 52 00 00 00 00 00 00 TOM.SAWYER......
ûв¼ d Debug ǰʾʽʾÿԱǰһеĵַ 16 ֽڣʾ 40 еĻΪ 8 ֽڣĵַͷ
ںÿ d Debug ʾʾֽݡ
Debug  CS:100 ʼʾ 20h ֽڵݣ
dcs:100 l 20
Debug ʾΧ CS ε 100h  115h ֽڵݣ
dcs:100 115

Debug:E룩

뵽ڴָĵַ
԰ʮƻ ASCII ʽݡǰ洢ָλõκȫʧ

e address [list]


address
ָݵĵһڴλá
list
ָҪ뵽ڴֽеݡ
йؼɼϢ뵥⡱бе Debug Aࣩ
йʾڴ沿ݵϢ뵥⡱бе Debug D ת

˵

ʹ address 

ûָѡ list ֵָ address ֵDebug ʾַݣһظַȴ롣ʱִв֮һ

滻ֵֽΪˣڵǰֵֵֵЧʮֵֵϵ֣ Debug Чַ
һֽڡΪˣ밴 SPACEBARոҪĸֽеֵڵǰֵֵ SPACEBARոʱƶ 8 λޣDebug ʾµһвʾµַ
صǰһֽڡΪˣ밴 HYPHEN  (-)Է HYPHEN  (-) ƶֽڡڰ HYPHEN ʱDebug ʼвʾǰֵַֽ
ִֹͣ e Ϊˣ밴 ENTER κֽλö԰ ENTER
ʹ list 

ָ list ֵ e ʹбеֵ滻еֵֽ󣬽κֵֽ

List ֵʮֽڻַʹÿո񡢶ŻƱֵָ뽫ַڵ˫С



ٶ

ecs:100

Debug ĸʽʾһֽڵݣ

04BA:0100 EB.

ҪֵΪ 41ڲ 41ʾ

04BA:0100 EB.41_

һ e ֵֽڼֵ SPACEBARոǰ ENTER Debug ʾһֵڴ˷У SPACEBARոDebug ʾֵ

04BA:0100 EB.41 10. 00. BC._

Ҫʮֵ BC Ϊ 42ڲ 42ʾ

04BA:0100 EB.41 10. 00. BC.42_

ٶֵ 10 Ӧ 6FҪֵ밴 HYPHEN Էصַ 0101ֵ 10Debug ʾݣ

04BA:0100 EB.41 10. 00. BC.42-
04BA:0102 00.-
04BA:0101 10._

ڲ 6f ֵʾ

04BA:0101 10.6f_

 ENTER ֹͣ e ص Debug ʾ¡

ַķ

eds:100 "This is the text example"

ַ DS:100 ʼ 24 ֽ

Debug:F䣩

ʹֵָָڴеĵַ

ָʮƻ ASCII ʽʾݡκǰ洢ָλõݽᶪʧ


f range list




range

ָҪڴʼͽַʼַͳȡЧ range ֵϢ뵥⡱беġDebug ˵

list

ָҪݡList ʮŰַɡ


˵

ʹ range 

 range ֽ list еֵDebug  list зֱֵָ range еֽȫ䡣

 range еκڴ𻵻򲻴ڣDebug ʾϢֹͣ f 


ʹ list 

 list ֵ range еֽDebug  list жֵ




ٶ

f04ba:100l100 42 45 52 54 41

ΪӦDebug ʹֵָ 04BA:100  04BA:1FF ڴλáDebug ظֱֵ 100h ֽȫΪֹ


Debug:Gת


еǰڴеĳ


g [=address] [breakpoints]




=address

ָǰڴҪʼִеĳַָ addressWindows 2000  CS:IP Ĵеĵǰַʼִг

breakpoints

ָΪ g Ĳֵ 1  10 ʱϵ㡣

йִѭظַָжϻӳϢ뵥⡱бе Debug PִУ

йִָϢ뵥⡱бе Debug T٣

Debug:Hʮƣ

ִָʮ㡣


h value1 value2




value1

 0  FFFFh Χڵκʮ֡

value2

 0  FFFFh Χڵڶʮ֡


˵

Debug ȽָӣȻӵһмȥڶЩĽʾһУȼͣȻ




ٶ

h19f 10a

Debug ִ㲢ʾ½
02A9 0095

Debug:I룩


ָĶ˿ڶȡʾһֵֽ

i port



port

ַָ˿ڡַ 16 λֵ

йؽֵֽ͵˿ڵϢ뵥⡱бе Debug O




ٶ

i2f8

ͬʱٶ˿ڵֵֽ 42hDebug ȡֽڣֵʾ£
42


Debug:Lأ

ĳļضݼصڴ档

ҪӴļ BX:CX Ĵָֽݣʹ﷨

l [address]

ҪԹ Windows 2000 ļϵͳֱӼضʹ﷨

l address drive start number




address

ָҪмļݵڴλáָ addressDebug ʹ CS Ĵеĵǰַ

drive

ָȡָĴ̵ֵֵͣ0 = A, 1 = B, 2 = C ȡ

start

ָҪݵĵһʮ

number

ָҪݵʮֻҪضݶǼ debug л Debug nƣָļʱʹ drivestart  number 

йָ l ļϢ뵥⡱бе Debug nƣ

йдԵ̵ļϢ뵥⡱бе Debug wд룩


ע

ʹò l 

ʹò l ʱ debug ָļصڴУӵַ CS:100 ʼDebug ͬʱ BX  CX ĴΪصֽ debug ָļװļʹ n ָļ


ʹþ address  1 

ʹô address  l Debug ڴλ address ʼļָݡ


ʹôȫ l 

ʹôв l Debug ָݶǼļ


ض

ָΧڵÿ drive ȡDebug  start ʼأֱ number ָеȫء


 .exe ļ

Debug  .exe ļĵַ address ָ .exe ļDebug ļ¶λ .exe ļıָļصַ .exe ļصڴǰ .exe ļ룬˴ϵ .exe ļСڴеĲͬҪ .exe ļʹòͬչļ


ʮļ

Debug  .hex չļΪʮƸʽļ벻 l Լشʮļָĵַʼʮļ l  address Debug ָĵַӵʮļҵĵַϣȷʼַ




ٶ Debug 

nfile.com

ڿԼ l Լ File.comDebug ļʾ Debug ʾ

ٶҪ C ʼ߼Ϊ 15 (0Fh)  109 (6Dh) ݼصʼַΪ 04BA:0100 ڴСΪˣ
l04ba:100 2 0f 6d


Debug:Mƶ



һڴеݸƵһڴС

m range address




range

ָҪݵڴʼͽַʼַͳȡ

address

ָҪ range ݸƵλõʼַ

˵

ƲݵӰ

ûдڱƵݿеĵַԴݽֲ䡣ǣĿѾ(ڸǸһ)򽫸дݡǸƲָЩĿݿ鲿ݸԭݿ鲿ݵĲ


ִиǸƲ

m ִĿַĸǸƲʧݡдĵַȸơˣϸλַݸƵϵλַƲԭλַʼλַС֮Ҫݴӵ͵ַƵߵַƲԭߵַʼ͵ַС




ٶ

mcs:100 110 cs:500
Debug Ƚ CS:110 ַеݸƵַ CS:510 УȻ CS:10F ַеݸƵ CS:50F У˲ֱ CS:100 ַеݸƵַ CS:500 СҪ鿴ʹ Debug dתʹ m ָĿַ

Debug:Nƣ



ָ Debug lأ wд룩ĿִļƣָڵԵĿִļĲ


n [drive:][path] filename


ҪָԵĿִļĲʹ﷨

n file-parameters




ûвʹã n ǰ淶
[drive:][path] filename

ָҪԵĿִļλúơ

file-parameters

ΪڲԵĿִļָͿء

йؽļָݼصڴеϢ뵥⡱бе Debug Lأ

йдԵ̵ļϢ뵥⡱бе Debug Wд룩


˵

n ;

԰ַʽʹ n ȣʹָ lأ wд룩ʹõļûļ Debugʹ l ļ֮ǰʹ nfilename CS:5C Ϊļƿ (FCB) ȷļĸʽΣʹ n ָļвͿء


ڴ

ĸڴ򶼻ܵ n Ӱ죺

ڴλ


CS:5C
ļ 1 ļݿ (FCB)

CS:6C
ļ 2 ļݿ (FCB)

CS:80
n еĳȣַʾ

CS:81
n ַĿͷ


Ϊ n ָĵһļ CS:5C  FCB Сָڶļƽõ CS:6C  FCB Сn ϼַһַ֮⣬n洢λ CS:80n ϵʵַٴΣĸ n ֮⣩洢 CS:81 ͷλáעЩַ Windows 2000 ʾ¼Чκοغͷָ




ٶѾ DebugڵԵĳ Prog.comΪ Prog.com ָд˳Ǵ˷У

debug prog.com
nparam1 param2
g

£Debug gתиó򣬾ͺ Windows 2000 ʾ

prog param1 param2

ԣԺ͵Էӳ Prog.com ͨʱ价

Уһ n  File1.exe ָΪӵ lأļ File1.exe صڴ档ڶ n ָ File1.exe ʹõĲg  File1.exe ļͺ Windows 2000 м File1 File2.dat File2.dat һ

nfile1.exe
l
nfile2.dat file3.dat
g

ע
Ҫ n ĵڶʽʹ l Ҫע⣬ʹ wд룩Windows 2000 ʹ File2.dat ڵԵļ File1.exeΪִ˽Ӧ l  w ֮ǰʹ n ĵһʽ

Debug:O



ֵֽ͵˿ڡ


o port byte-value




port

ַָͨ˿ڡ˿ڵַ 16 λֵ

byte-value

ָҪָ port ֵֽ

йش˿ڶȡֵֽϢ뵥⡱бе Debug I룩



Ҫֵֽ 4Fh ͵ַΪ 2F8h ˿ڣ
o2f8 4f

Debug:PִУ



ִѭظַָжϻ̣ͨκָ١


p [= address] [number]




=address

ָһҪִָλáַָĬϵַ CS:IP Ĵָĵǰַ

number

ָڽƷظ Debug ֮ǰҪִеָĬֵΪ 1

йеǰڴгϢ뵥⡱бе Debug Gת򣩡

йִָϢ뵥⡱бе Debug T٣


˵
ƴ͵ҪԵĳ

 p ƴ Debug ͵ҪԵĳʱó򲻼УֱѭظַָжϻַָΪֱִָֹĻָΪֹƷص Debug

ַ

 address ûָΣDebug ʹñԳ CS Ĵʡ address򽫴 CS:IP ĴָĵַʼִС address ֮ǰʹõȺ (=) Ա㽫 number ַָָ֡ѭظַָжϻ̣ p  Debug t٣ͬ

ʹ p ʾʼ

 p ִһ˵Debug ʾļĴݡ־״̬ԼһνҪִеָĽʽ




ʹ p ֻڴ (ROM)



ٶڲԵĳڵַ CS:143F һ call ָҪ call ĿλõӳȻ󽫿Ʒص Debug

p=143f

Debug ¸ʽʾ
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=2246 ES=2246 SS=2246 CS=2246 IP=1443 NV UP EI PL NZ AC PO NC
2246:1442 7505 JNZ 144A

Debug:Q˳



ֹͣ Debug Ự浱ǰԵļ

 q Ժ󣬿Ʒص Windows 2000 ʾ


q





йرļϢ뵥⡱бе Debug Wд룩

Debug:RĴ


ʾıһ CPU Ĵݡ


r [register-name]






ûвʹã r ʾмĴԼĴ洢еı־

register-name

ָҪʾݵļĴ

йʾڴ沿ݵϢ뵥⡱бе Debug Dת

йطֽڵϢ뵥⡱бе Debug Uࣩ


˵

ʹ r 

ָ˼ĴƣWindows 2000 ʾʮƱǱʾļĴ 16 λֵðʾΪʾҪİڼĴеֵǼֵ ENTER 밴 ENTER  Debug ʾ

ЧĴ

 register-name Чֵaxbxcxdxspbpsididsessscsippc  fip  pc ָָ롣

ָĴƣǴǰбָWindows 2000 ʾϢ

br error

ʹ f ַǼĴ

 f ַĴDebug ÿǵĵǰʾΪĸ룬Ȼʾ Debug ʾҪı־ã±мʵĸ룺

־




ov
nv


dn
up

ж
eiã
diã


ng
pl


zr
nz

λ
ac
na

żУ
peżУ飩
poУ飩

λ
cy
nc


԰κ˳µı־ֵҪЩֵ֮ոҪֹͣ r 밴 ENTER κûֵָı־ֲ䡣

 r ʾʼ

Ϊָ˶ֵDebug ʾϢ

df error

ָûǰıгı־룬Debug ʾϢ

bf error

£Debug ЧĿָ֮á

Debug Ĭ

 Debug ʱὫμĴõڴĵͶˣָָΪ 0100hб־ҽĴΪ㣬˱Ϊ FFEEh  sp ֮⡣

Debug:R




Ҫ鿴мĴݡбǵ״̬͵ǰλõָ

r

ǰλ CS:11Aʾ۽ݣ

AX=0E00 BX=00FF CX=0007 DX=01FF SP=039D BP=0000 SI=005C DI=0000
DS=04BA ES=04BA SS=04BA CS=O4BA IP=011A NV UP DI NG NZ AC PE NC
04BA:011A CD21 INT 21

Ҫֻ鿴־״̬

rf

Debug ¸ʽʾϢ

NV UP DI NG NZ AC PE NC - _

ڣ԰˳һЧı־ֵплûпոʾ

nv up di ng nz ac pe nc - pleicy

Debug  r ʾ Debug ʾҪ鿴ģ r  rf Debug ʾݣ

NV UP EI PL NZ AC PE CY - _
 ENTER ص Debug ʾ

Debug:S



ĳַΧһֵֽģʽ


s range list




range

ָҪΧĿʼͽַй range ЧֵϢ뵥⡱бе Debug

list

ָһֵֽģʽҪַÿո򶺺ŷָÿֵֽһֵֵַֽС


˵

 list ֵֽDebug ֻʾֵֽĵһַ list ֻһֵֽDebug ʾָΧڳֵָеַ




ٶҪҰֵ 41 ҷΧ CS:100  CS:110 еַΪˣ

scs:100 110 41

Debug ¸ʽʾ

04BA:0104
04BA:010D
-

 CS:100  CS:1A0 ķΧַPh
scs:100 1a0 "Ph"

Debug:Uࣩ


ֽڲʾӦԭ䣬аֵַֽ뿴ѻļб


u [range]






ûвʹã u ֽ 20h ֽڣĬֵǰ u ʾַĵһַʼ

range

ָҪʼַͽַʼַͳȡй range ЧֵϢ뵥⡱бе Debug

йؼɼϢ뵥⡱бе Debug Aࣩ

йʾڴ沿ݵϢ뵥⡱бе Debug Dת





Ҫ 16 (10h) ֽڣӵַ 04BA:0100 ʼ

u04ba:100l10

Debug ¸ʽʾ

04BA:0100 206472 AND [SI+72],AH
04BA:0103 69 DB 69
04BA:0104 7665 JBE 016B
04BA:0106 207370 AND [BP+DI+70],DH
04BA:0109 65 DB 65
04BA:010A 63 DB 63
04BA:010B 69 DB 69
04BA:010C 66 DB 66
04BA:010D 69 DB 69
04BA:010E 63 DB 63
04BA:010F 61 DB 61

ֻʾ 04BA:0100  04BA:0108 ضַϢ

u04ba:0100 0108

Debug ʾݣ

04BA:0100 206472 AND [SI+72],AH
04BA:0103 69 DB 69
04BA:0104 7665 JBE 016B
04BA:0106 207370 AND [BP+DI+70],DH

Debug:Wд룩



ļضд̡

Ҫ BX:CX Ĵָֽдļʹ﷨


w [address]


ҪԹ Windows 2000 ļϵͳֱдضʹ﷨

w address drive start number




address

ָҪдļļ򲿷ļʼڴַָ addressDebug 򽫴 CS:100 ʼ address ЧֵϢڡ⡱бе Debug

drive

ָĿ̵ֵֵͣ0 = A, 1 = B, 2 = C,ȵȡ

start

ָҪдһʮ

number

ָҪд

йָ w ļϢ뵥⡱бе Debug Nƣ

йؽļļݼصڴеϢ뵥⡱бе Debug Lأ

˵

 Debug ʱ Debug nƣָļַ֡Խַ CS:5C ļƿļȷرŸʽ


ʹò w ֮ǰ BX:CX

ʹ Debug gת򣩡t٣pִУ rĴʹ޲ w ֮ǰ BX:CX Ĵλ

޸ĺļд

޸ļļȻʼַDebug ȻȷؽļдԴλá

w 

øд .exe  .hex ļ



ΪԹ Windows 2000 ļдضķǳΣաֵļṹױ𻵡



ٶҪʼַΪ CS:100 ڴд뵽 B ĴСҪݴӴ̵߼ 37h ʼ 2Bh Ϊˣ

wcs:100 1 37 2b

дʱDebug ٴʾ Debug ʾ

Debug:XAչڴ棩

չڴָҳ

Ҫʹչڴ棬밲װ 4.0  Lotus/Intel/Microsoft չڴ淶 (LIM EMS) չڴ豸


xa [count]




count

ָҪչڴ 16KB ҳ

йʹչڴ Debug Ϣ뵥⡱бе XDͷչڴ棩XMӳչڴҳ XSʾչڴ״̬

˵

ָҳã Debug ʾϢϢľʮDebug ʾϢ



Debug:XA



Ҫչڴ 8 ҳ棬

xa8

ɹDebug ʾƵϢ
Handle created=0003

Debug:XDͷչڴ棩


ͷָչڴľ

Ҫʹչڴ棬밲װ 4.0  Lotus/Intel/Microsoft չڴ淶 (LIM EMS) չڴ豸


xd [handle]




handle

ָҪͷŵľ

йʹչڴ Debug Ϣ뵥⡱б XAչڴ棩XMӳչڴҳ  XSʾչڴ״̬



Ҫͷž 0003

xd 0003

ɹDebug ʾϢ
Hdle 0003 deallocated

Debug:XMӳչڴҳ


ָչڴ߼ҳӳ䵽չڴҳ

Ҫʹչڴ棬밲װ 4.0  Lotus/Intel/Microsoft չڴ淶 (LIM EMS) չڴ豸


xm [lpage] [ppage] [handle]




lpage

ָҪӳ䵽ҳ ppage չڴ߼ҳš

ppage

ָ lpage ӳ䵽ҳš

handle

ָ

йʹչڴ Debug Ϣ뵥⡱бе XAչڴ棩XDͷչڴ棩 XSʾչڴ棩




Ҫ 0003 ߼ҳ 5 ӳ䵽ҳ 2

xm 5 2 0003

ɹDebug ʾϢ

Logical page 05 mapped to physical page 02

Debug:XSʾչڴ״̬


ʾйչڴ״̬Ϣ

Ҫʹչڴ棬밲װ 4.0  Lotus/Intel/Microsoft չڴ淶 (LIM EMS) չڴ豸


xs






йʹչڴ Debug Ϣ뵥⡱бе XAչڴ棩XDͷչڴ棩 XMӳչڴҳ


˵

Debug ʾϢ¸ʽ

Handle xx has xx pages allocated
Physical page xx = Frame segment xx
xx of a total xx EMS pages have been allocated
xx of a total xx EMS handles have been allocated




ҪʾչڴϢ

xs

Debug ʾƵϢ

Handle 0000 has 0000 pages allocated
Handle 0001 has 0002 pages allocated
Physical page 00 = Frame segment C000
Physical page 01 = Frame segment C400
Physical page 02 = Frame segment C800
Physical page 03 = Frame segment CC00
2 of a total 80 EMS pages have been allocated
2 of a total FF EMS handles have been allocated


̳̣	
ԳŨ̳

ߣ
վ
Դԣժҳ
ղڣ2003-10-03


    ӴǶĻأǶûãֵVB""һAPI͹æʮµģһ˾֮ԵҲ飬ȻޱҪһأϻȻҪȻдƪ¸𼱣𼱣ҰԭίһедĳʱڴжԻ뷽ʽ洢ԱȽ׼ȷķɻԣΪԼãʼи١ԹߣWIN95/98£Իʾ˵ģ¶CRACKĸȤֱӲ򽻵ִͨʱڵеȥҲǸÿɲ־ڸʲôôɣһӲѣЩɲСDOSĶǡ֡һ루ҲǸ֣֡ڲԴӡ֡ǶЩڿͼܡڼ֡ǿҵٸ--#$%& !
Գѧ߶ԣ̫ӣѧϰܳʱҲдһƯƯĳ·ѧϰȤ˾ʹ˷Ҹ˿ѧ࣬һҪддȷʵǻǿҲDEBUGʱCRACKһСһгɾ͸УѧϷһĳЩָʵֻоĻԱãǶԣ̫ˡΪʹѧϰиõĿʼҪųЩӵעҪļָϣCMP LOOP MOV JNZچµĽ̿Ŀ̸꣬ףԱƪŨWINZIPWINRARѹȣٺ٣̡̳Բѵ˵ͨģȫԡ⡱ǰǺŪһDEBUGгɾ͸еģԿôDDأDD Here we goĶʱҪıзֽ⣩

ΪͨCPUڴӲԻģǲò˽һCPUڴ棺Ľڴ˲ᣩ

ãУǿִеu߼ I/O ƹܵһоƬһֻֻضCPUҲ˵ͬCPUԵָ﷨಻ͬ˵1981ƳCPUչΪ8086802868038680486PENTIUM AMDCYRIX֧ǰCPUĹܣֻЩָܱڵMMXָ˼Ĵ38632λEAX˼Ĵ486FSΪȷڸֻͣƼʹ8086ԣѡΪ8086ԡĴRegisterCPUڲԪڼĴ֮ݴͷǳ졣;1.ɽĴڵִ߼㡣2.ڼĴڵĵַָڴĳλãѰַ3.дݵԵܱ豸8086 88λݼĴЩ8λĴɷֱ16λĴ&̣أۼӼĴ㣻£&£̣£أַĴڵַã&ạ̃ãأĴڼģ&ģ̣ģأݼĴݴݡΪеڴռ䣬8086趨ĸμĴרεַãӣCode SegmentμĴģӣData SegmentݶμĴӣӣStack SegmentջμĴţӣExtra SegmentӶμĴһҪִʱҪ롢ݺͶջҪõڴЩλãͨ趨μĴ CSDSSS ָЩʼλáͨǽDS̶Ҫ޸CSԣڿѰַռС64K±дС ԣĴСDS ָ64KڣCOMļô64Kԭ8086ڴΪսüĴΪ»أԼٹǰļĴ⣬һЩ⹦ܵļĴIPIntruction PointerָָĴCSʹãɸٳִй̣SPStack Pointerջָ룬SSʹãָĿǰĶջλáBPBase PointerַָĴSSһԻַλãSISource IndexԴַĴDS֮Դַָ룻DIDestination IndexĿıַĴ ES ֮Ŀıַָ롣һ־ĴFRFlag Register,оŸı־õʱϸ˵

ڴǵеĹؼ֣ҲǵڹдϢĵطڴ֯ɴֵĴλãСַ8086ַ20λCPUӵд1MѰַռ䣬ҲDOSЧƷΧ8086ڴ16λݣֻ064Kԣ÷ֶѰַܿڴַ20λַɷֳݣ1.λַ(Segment)16λĸƣһ16ƣ20λ趨1Mκһ64KΣͨ16λ2.ƫ(Offset)ֱʹ16λָλַеκһַ磺2222λַ:3333ƫʵʵ20λֵַΪ25553ӪҪ⣬㻹Ҫ֪ʲôDOSBIOSܵã򵥵˵ܵWIN95 API൱ӳ򡣻дѾҪˣMSIBMӳûˣڹܵ԰ߡ9811ڣ

дҪķ1.ʹMASMTASMȱ2.ʹóDEBUG.COMDEBUGʵһҪ;ڳеĴ󡣲Ҳд̵ĻԳѧ߶ԣDEBUG ѵŹߡΪDEBUGףֻҪDEBUGسAسɽл̼࣬򵥣ʹñʱõı༭LINKԼEXE2BINȳÿһ򶼱õһϵ൱ӵܹñԴ򣬱ָ޹صָʾ䣬Թʶʹ DEBUG ԱһʼĳСDEBUG ܹ֮⣬޸ڴλá봢ִгԼ޸ļĴ仰˵DEBUGΪǽӴӲƵġ8086ָ÷ÿн⣬ƪָܽг

DEBUGĵAԻ򵥵COMļDEBUGдĳһҪɵַ 100hCOMļҪ󣩿ʼźϷFOLLOW MESETP BY SETPس

 A100  DS100ʼ
2. MOV DL,1  ֵ 01h װ DL Ĵ
3. MOV AH,2  ֵ 02h װ DL Ĵ
4. INT 21  DOS 21ж2ŹܣʾװDLַ
5. INT 20  DOS 20жϣֹ򣬽Ȩظ DEBUG
6.밴 Enter 
7.ѽԳڴˣ G()
8.ֽһš
 ʵWORD97޷ʾԭһƷš
Program terminated normally

ǿãʮƵĻ뷴ࣨUnassembleɻָ㽫ÿһұߵĻָǱӦĻ룬8086ʵϾԻִг
1. U100,106
1FED:0100 B201 MOV DL,01
1FED:0102 B402 MOV AH,02
1FED:0104 CD21 INT 21
1FED:0106 CD20 INT 20
DEBUGã鿴ıĴݡCSIPĴ˽ִַָ
1.R
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1FED ES=1FED SS=1FED CS=1FED IP=0100 NV UP EI PL NZ NA PO NC
1FED:0100 B201 MOV DL,01

DS100ʼִУôֹʱDEBUGԶIP趨Ϊ100Ҫ˳һĿִļãԸóһҪΪCOMļ޷DEBUG롣
N SMILE.COM ǵøDEBUG򳤶ȣ100ʼ106ռ7
ֽڡBXųֵλ֣CXŵλ֡
2.RBX 鿴 BX Ĵݣֻ7ֽڣʱʡ
3. RCX 鿴 CX Ĵ
4. 7 ֽ
5. W ãóд루Write

ˣǱӴ8086ָˡ дԳʱֱͨӽڴУǴһǷţMnemonic SymbolsЩűʮƻ׼ס֮νָǷţCPUӦִк㡣 Ҳ˵ɵĻΪƵģǶPCƵġ

ڣһԽASCIIʾĳ
1.  DEBUG
2.  A100
3 MOV CX,0100 װѭ
MOV DL,00 װһASCII룬ÿѭװ
MOV AH,02
INT 21
INC DL INCָÿνݼĴ DL ڵֵ 1
LOOP 0105 LOOPѭָÿִһLOOPCXֵ1
ѭʼַ105ֱCXΪ0ѭֹͣ
INT 20
4. GʾASCII


ʾַ磺UNDERSTANDʹDOS21Hж9HŹܡг򣬴ִ̲п
1. A100
 MOV DX,109 DS:DX  ַʼַ
 MOV AH,9 DOS09hܵ
INT 21 ַ
INT 20
DB 'UNDERSTAND$'ַ
ڻУֲָͬ1.ָ MOV ȣCPUָCPUڳִʱӦЩʲô루OP-codeķʽڴУ2.αָDBȣDEBUGȱָ߱ڱʱӦЩʲôDBDefine ByteָDEBUG ڵASCII ڴСʹ 9H ַܵ$βã鿴DBαָЩݷڴ档
6. D100
1975:0100 BA 09 01 B4 09 CD 21 CD-20 75 6E 64 65 72 73 74 ......!. underst
1975:0110 61 6E 64 24 8B 46 F8 89-45 04 8B 46 34 00 64 19 and$.F..E..F4.d.
1975:0120 89 45 02 33 C0 5E 5F C9-C3 00 C8 04 00 00 57 56 .E.3.^_.......WV
1975:0130 6B F8 0E 81 C7 FE 53 8B-DF 8B C2 E8 32 FE 0B C0 k.....S.....2...
1975:0140 74 05 33 C0 99 EB 17 8B-45 0C E8 D4 97 8B F0 89 t.3.....E.......
1975:0150 56 FE 0B D0 74 EC 8B 45-08 03 C6 8B 56 FE 5E 5F V...t..E....V.^_
1975:0160 C9 C3 C8 02 00 00 6B D8-0E 81 C3 FE 53 89 5E FE ......k.....S.^.
1975:0170 8B C2 E8 FB FD 0B C0 75-09 8B 5E FE 8B 47 0C E8 .......u..^..G..

ڣһɼַȻʾdb 20ָʾDEBUG20hδõڴռ乩ʹá
A100
 MOV DX,0116 DS:DX  ַDBαָȷַ
MOV AH,0A 0Ah Źܵ
INT 21 뻺
MOV DL,0A ڹAhÿַһλ루0Dh Enter
MOV AH,02 ʹԶصеǰˣΪʹ
INT 21 ַǵԭַù2hһ
(OAh)ʹùƵһеĵǰˡ
MOV DX,0118 װַʼλ
MOV AH,09 9h$ŲŻַֹͣ
INT 21 $9hܻڴеݺʾ
INT 20
DB 20 建 
һ仰ѧмĸ

׻Ͳˡ£˵DEBUG Ǳ˵ǡֱDEBUGAֻɽһлָתɻԣִСMASMı༭EDITȣָһҸΪ.ASMıļԴMASM 벿֡MASMASMļ.OBJļΪĿOBJļйسҪδϲϢ޷ֱڴִСLINKɽOBJļתɿڴִУEXEcuteEXEļEXE2BINEXEļתCOMļCOM ļռõڴ٣ٶ죩
MASMдһDEBUGдĵһһĳ
EDIT༭һSMILE.ASMԴļ
Դ DEBUG 
prognam segment
assume cs:prognam
org 100h A100
mov dl,1 mov dl,1
mov ah,2 mov ah,2
int 21h int 21
int 20h int 20
prognam ends
end

Ƚһ£1.ΪMASMὫеֵΪʮƣDEBUGֻʹʮƣԴУǱйֺϴƵĸHʮƣDʮơĸͷʮ֣ĸǰӸ0Աʾ0AH2.Դprognam segment  prognam ends ǳɶԵģ MASM LINK˳򽫷һΪPROGNAM(PROGram NAMe)ĳڣжPROGNAMȡλñ̶assume cs:prognam ڳĿͷ߱˳ڶελ÷CSĴСendMASM򵽴˽, ORG 100H൱DEBUGA100ƫ100ʼࡣCOM ļԴ򶼱УұͬĴλó֣㶫¾УǧƪһɡţMASMSMILE.ASM
 MASM SMILE ô븽.ASM
Microsoft (R) Macro Assembler Version 5.10
Copyright (C) Microsoft Corp 1981, 1988. All rights reserved.
Object filename [SMILE.OBJ]: ǷĶOBJļ粻ľENTER
Source listing [NUL.LST]:  ǷҪбļLSTҪENTER
Cross-reference [NUL.CRF]: ǷҪļCRFҪENTER
50162 + 403867 Bytes symbol space free
0 Warning Errors 󣬱ʾĳЩ䲻⣬ͨ
0 Severe Errors ش󣬻ɳ޷ִУͨ﷨ṹ

ûһڣOBJļOBJаǱĶƽ޷ DOSڴмִУᣨLinkingLINKOBJļSMILE.OBJ EXE ļSMILE.EXEʱ
1. LINK SMILE øOBJ
Microsoft (R) Overlay Linker Version 3.64
Copyright (C) Microsoft Corp 1981, 1988. All rights reserved.
Run File [SMILE.EXE]:  ǷĶEXEļ粻ľENTER
List File [NUL.MAP]:  ǷҪбļMAPҪENTER
Libraries [.LIB]: ǷҪļҪͼļҪENTER
LINK : warning L4021: no stack segment COMļʹöջΣԴϢ
"no stack segment"Ӱִ

ѾEXEļǻʹEXE2BIN EXEļSMILE.EXEתCOMļSMILE.COMEXE2BIN SMILE BIN ļSMILE.BINʵ BIN ļ COM ļȫͬģDOSֻCOMEXEBATļBINļ޷ȷִУֱ EXE2BIN SMILE SMILE.COMɡڣӦ SMILE.COM ļˣֻҪʾC>£ֱļ SMILE Ϳִˡ

Ƿñķ DEBUG 鷳ˣСԣȷˣڽϴĳͻᷢŵˡٽASCIIԱʽһΣ޲졣ȣEDIT.COM ASCII.ASM ļ
prognam segment ;
assume cs:prognam ;涨εĶλַ CS
mov cx,100h ; װѭ
mov dl,0 ; װһASCII룬ÿѭװ
next: mov ah,2
 int 21h
 inc dl ;INCָÿνݼĴ DL ڵֵ 1
loop next ; ѭָִһΣCX1ֱCXΪ0ѭֹͣ
int 20h
 prognam ends ;ֹ
end ;ֹ
ڻԵԴУÿһжԪأ
 start: mov dl,1 װһASCII룬ÿѭװ
 ʶ ʽ ע

ԭʼļмעʹ⣬Ժοÿעԡз롣עⲻᣬעݲOBJEXECOMļСдԴʱ֪ÿһеĵַԱԷԵַΪʶͨʵеʵλϣʶʶlabelɴ31 ֽڣڳУԼΪʶڣԽASCII.ASM ļ ASCII.COM ˡ1.MASM ASCII2.LINK ASCII3.EXE2BIN ASCII ASCII.COM

ע⣺ԱƵĳʱִᷢ󡢱ʶƴʮˣ衢߼ȡֳ˵ҸǣϵԼдĳһЩ󣨱˸ҵģһִг󣬾͵õĽûڼһ飬ΪǴġԭϣֻҪ߼ܹȷҳдḶ́д˼дʱֳܷģ飬˿ʹĿĽϵ׫дҲóв֮ͬĽ޽ʡʱ䡣жĵطֽʼйؼĴڴݣֽȻͻȻˡ ǽдһܴӼȡһʮƵֵתʮֵʾĻϵġ򡱡ǰԣҪ8086ִĹܣǱȽֽһĲ裬Ϊ滮ȣͼķʽȷ߼û⣨˵˰ɣʲôԶҪд˲裩ģ黯Ĺ滮ʽ֮Ϊ϶µĳ滮дʱȴǴСĵλģ飨ӳ򣩿ʼÿģ鶼֮ٺϲɴִۣСֵķʽΪ¶ϵĳơ

ǵĵһģBINIHEXҪ;Ǵ8086BXĴȡʮƷʽʾĻϡע⣺ӳ粻ܶУʵ
 binihex segment
 assume cs:binihex
mov ch,4 ;¼תʮλλ
rotate: mov cl,4 ;CL¼Ĵλƶ
rol bx,cl ;ѭĴBXݣԱ4ʮ
mov al,bl ;bxͰλblתal
and al,0fh ;λ
add al,30h ;ALݼ30Hal
cmp al,3ah ;3ahȽ
jl printit ;С3ahת
add al,7h ;ALݼ30Hal
printit:mov dl,al ;ASCIIװDL
mov ah,2
 int 21h
 dec ch ;chһʱ־1
jnz rotate ;JNZ־δ1ַָȣת
int 20h ;ӳ˻
binihex ends
 end

ѭָROLѭĴBX(BXݽɵڶӳṩ)ݣԱ4ʮ:1. CL¼ĴλĴ2.BXĵһʮֵƵұߡ AND ߼롱㣺ӦλΪʱΪΪ㣩ѲҪĲ㣬õȽBLֵALУAND0Fh00001111ALλ㡣ڣASCIIΪ30h39h֮ASCIIΪ41h46h7hԵõAL֮С3AhALֵֻ30hALټ7hADDָὫʽӣ߱ʽڡ־ĴFlag RegisterһʮλĴ9־λĳЩָ󲿷漰Ƚϡ߼ָִʱὫر־λ10 ı־λ־ZFű־SF־OFͽλ־CF ־λĳִָкӰ죬ָ־״̬״̬CMPָǽʽֵĴڴݲδı䣬ֻԵı־λıѣ AL ֵС 3Ahű־λ0֮1 JLָɽΪСھתƵָλãڡִСCMPJG JLתָһʹãγɳķ֧ṹдüɡ

ڶģDECIBIN ռ̴ʮתɶBX ĴУģ1 BINIHEXʹá
decibin segment
assume cs:decibin
mov bx,0 ;BX
newchar:mov ah,1 ;
int 21h ;һalʾ
sub al,30h ;alȥ30HalУASCIIת
jl exit ;Сת
cmp al,9d
 jg exit ;>ת
cbw ;8λalת16λax
xchg ax,bx ;axbx
mov cx,10d ;ʮ10cx
mul cx ;ʽֵaxˣax
xchg ax,bx
 add bx,ax
 jmp newchar ;ת
exit: int 20 ;
decibin ends
 end
CBW ʵʽ:ALеֵΪAH00h֮AHFFhXCHGҪʱĳĴеʱ
ȻһӳCRLFʹʾʮǵʮ
crlf segment
assume cs:crlf
mov dl,0dh ;سASCII0DHDL
mov ah,2
 int 21h
 mov dl,0ah ;еASSII0AHAH
mov ah,2
 int 21h
 int 20 ;
crlf ends
end

ǾͿԽBINIHEXDECIBINCRLFģϲһˡȣҪģӳԼӸĶȻдһγÿһӳ
crlf proc near
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
ret
crlf endp

SEGMENTENDSαָPROCENDPҲǳɶԳ֣ʶ𲢶һʵPROC ֻǸ߱õĳڽ̣NEARԶ̣FAR һĳ DEBUG ֱӵõģ INT 20 أ CALL ָõĳ÷ָRET,RETѿȨתƵջָĵַõַɵô˳ CALLָġ
ģ鶼㶨ˣȻǰӳʹ󹦸
decihex segment ;
assume cs:decihex
org 100h
mov cx,4 ;ѭcxӳҪõcxӳҪcxջ
repeat: call decibin;ʮתӳ
call crlf ;ӻءзӳ
call binihex ;öתʮƲʾӳ
call crlf
loop repeat ;ѭ4Σ4
mov ah,4ch ; DOS21ж4cŹܣ˳øINT 20H
int 21H ; һ㣬INT20H˲ʱһ
decibin proc near push cx ;cxѹջ;
 exit: pop cx ;cxԭ; retdecibin endp binihex proc near push cx
 pop cx retbinihex endp crlf proc near
 push cx
 pop cx retcrlf endpdecihex ends end

CALLָӳ򣬲ȨתƵӳַͬʱCALLһַָΪصַѹջСCALL ɷΪ̣NEARԶ̣FAR֣1.NEARIPݱѹջУڳͬһС2.FARCS IPĴѹջ,ڳڲͬСPUSHPOPһָڽĴѹ롢Ĵݣӳý϶ࡣջָиȳԭPUSH AXPUSH BXPOP BXPOP AX˿

ԳŨ̵̳Ҫһˣϣܵ춨ƵĻõļȫƽʱĻˡףɹ
