برنامه نویسی به زبان اسمبلی برای کامپیوترهای شخصی

Upload: harrisel

Post on 18-Oct-2015

66 views

Category:

Documents


1 download

DESCRIPTION

برنامه نویسی به زبان اسمبلی برای کامپیوترهای شخصی

TRANSCRIPT

  • 5/27/2018

    1/53

    AssemblyProgramming

  • 5/27/2018

    2/53

    (RAM) : OO(Ram)

    :ROM. . / ((BIOS68K 960K . .RAM ROM

    . RAM: RAM RAM.() RAM .ROMRAM.

    RAM.

  • 5/27/2018

    3/53

    0526H1315 .05

    29. :

    .

    .

    .

    . 64k

    . .

  • 5/27/2018

    4/53

    . . (cs) .64k

    .

    64k" . ((DS

    ."

    (ss).

    .

    088EOH 038E 038EOH . .

    [038[0.

  • 5/27/2018

    5/53

    ) ) 65,535 FFFFH0000H. 01 .00 65535

    ..DS 038EOH038E[o]H0032H

    .

    . 03912H

    ,.

    PC : .8086/8088 ( ) nnnn[o] FFFF[o]H o.

  • 5/27/2018

    6/53

    1111 F o.

    : 80286 FFFFF[o] .

    .

    : / 80386/486 . . .

    .

    SS,DS,CS .

    .

    o.

  • 5/27/2018

    7/53

    .:CS (Ip)

    .cs.:. DS .

    . : SS . . ((sp

    ss. : ES ES() DI() ES

    . :. FS,GS

    BP,SP,IP:

    IP(IP): IP.CSIP IP. DEBV6 EIP IP.

  • 5/27/2018

    8/53

    514H IP39B4[o] H CS . ,CSIP.

    IP CS 39B40H+514H=3A054H .

    ss:(... ( BP() SP .

    SP: (SP) ss ESP.

    .

    BP: (BP) .

    EBP.

    . DX,CX,BX,AX . AX. ALAH

    EDX,ECX,EBX,EAX.

  • 5/27/2018

    9/53

    OECX,BX,AX: MOV AX,OO 2/MOV BH,OO 3/MOV ECX,OO / :AX

    AX . .

    : BXBX ....

    .. CX:CX cx

    . / DX:DX. AX,DX

    .

    . :

    DI,SI. : SI DSSI

    ESI.. : DI

    DIES.

  • 5/27/2018

    10/53

    (Flags) flag

    .() () OF

    . () DF

    . () IF

    . .() TF FlagDEBVG

    . =) 1 = o) () SF

    zr=o) () ZF zf=1)

    ()AF.

    . () PF()() CF

    .

  • 5/27/2018

    11/53

    Flag.

    CF,ZF,SF,OF: Flag . DF

    flag .

  • 5/27/2018

    12/53

  • 5/27/2018

    13/53

    . Ilo DOS.

    . . :Dos

    . : /

    .. :

    . : .

  • 5/27/2018

    14/53

    .

    : .

    : CO.MMAND.Com,MSDOS.SysIO.sys :

    : IO.sys / / .

    IBMBIO.COM. pc-Dos : MSDOS.sys . /

    . pc-DosIBMDOS.COM : COMMAND.COM .

    .

    BooT Process .(Cold boot)CS . IP FFFF[o] H

  • 5/27/2018

    15/53

    FFFFoH CS:IP ROM.

    FFFFOH :

    . .

    40[o]. .

    (boot start loader) MSDOS,To.sys To.sys To.sys. DOS DOS .MSDOS.sys ConFIG.sys. COMMAND.COMMSDOS.sys . AUTOEXE.BAT

    . 640k

    .

  • 5/27/2018

    16/53

    - ROM .

    . Dos Llo . Dos --.

    .

    COM. EXE,COM COM.

  • 5/27/2018

    17/53

    ) EXE . ) EXE

    : . .EXE

    .(266 (PSP .

    . PSP. . .PSPES,DS

    ( .CSLP ).

    . .SSSP .

    . SS:SP,CS:LP ESDSPSP

    . .EXE,COM

    . COM .EXE

  • 5/27/2018

    18/53

    SS (). SP . . :

    . POP,PUSH

    6P .PUSHSP POP SP

    . . EXE

    . popA,pushA. : popF PushF ()

    .

  • 5/27/2018

    19/53

    . . .

    . DS cs EXE

    IP. .

    .

    Wordx,DW

    Wordx DW o (). MOV CX , Wordx WordxCX

    MOV CX, 25 CX MOV CX , DX CXDX MOV CX, [DX] DXCX

    . MOV -. -MOV

  • 5/27/2018

    20/53

    -MOV . MOV -DS:DX DS ) DX:

    CX ( .

    .

    . Comment.

    ADD , MOV

    SEGMENTEND SIZE,FAR

  • 5/27/2018

    21/53

    .Model , Data .

    ((label:

    ..MAIN .

    MAIN PROC FAIR : .

    . ZQZA -

    (.) 09 - ($)(@) (-) () -

    () () (state ments)

    .: .ADD,MOV.

    (directives). .

    .

  • 5/27/2018

    22/53

    Title,Page Title,Page

    . Page : Page

    . Page{} {} : Page

    . Title: Title

    . SAGMENT

    . EXE ........

    segments , : ENDS.

    segment Begin segment ENDS End segment

    (align) : : .((combine((class

    segment ""

  • 5/27/2018

    23/53

    :. PARA

    10H. para.

    : public , common , stack .:

    . AT Sgment PARA stack

    common , poblic

    none. ( ) (calss):code . stackdata ()

    . PROC

    PROC.

    ASSVME DS EXESS

    CS.

  • 5/27/2018

    24/53

    . ASSVME.

    ASSVME ss : :CS:DS

    ss ss : .

    ASSVMEES ES. :

    ES ES:nothing.

    ASSVME

    . END

    ENDPENDS END. .

    END [procname]

    PROC .

    FAR.

  • 5/27/2018

    25/53

    psp EXE

    .: -CS.

    -sspsp.

    .

    ...MODEL

    : large , compact,medium,small,tiny

    Tiny * *

    small medium compact Large

    liny ) comTiny TASM4,MASM6.( 64k.smallmodel 64k64k

    Assume.

  • 5/27/2018

    26/53

    stack : {}

    Data

    code {}Ends segment

    (): . txet,data.() text,data,stack

    . ds

    MOV DS, AX ,MOVS AX , @data EXIT ,Startup

    .Exit , MASM .startup..startup INI 21h4chExit

    . TASMExitCode,startup code.

    : EXE ./. DWDB: ( ).

  • 5/27/2018

    27/53

    . [name] Dn expressino ..

    : . nameDW( ) DB: : Dn())DD))DF))DQ))DT) MASM6 .

    Tword,Qword,Fword,Dword-22/word-Byte. ((expression .

    : FLDA DB ? ()

    FLDA DB/Byte 21,22,23,........ FLDA.) FLDA+o)

    FLDA+lMOV AL,FLDA+3

    AL(18h)24 ()Dupname DN.

    1/ DW/word 10 Dup (?)

    2/ DB/Byte 5 Dup (12)

    3/ DB/Byte 3 Dup (5 Dup 4 )

    (44444)4 .

    :

  • 5/27/2018

    28/53

    PC PC (Byte) DB,MASM. DB()

    :

    23/ DB , strawberry jam

    DB crazy sams CD Emporium . DB Crazy sam s CD Emporium

    : . H .

    . :

    :1,0B

    Test,xor,OR,AND.

  • 5/27/2018

    29/53

    D :

    . :0FH.

    .

    :

    .

    . .RET CLC () () .

    .[lable:] operation operand 1,operand 2

    .

    .Worda Dw ? define a word

    Mov DX,Worda ,register in first operand

  • 5/27/2018

    30/53

    Mov worda . cx ,register in second ... ....

    Mov EDX , EBX ,register in both operand

    .

    ) (.

    .Count DB ?

    ADD BX,25 ,add 25 to BX

    Mov count,50 ,move 50 to count

    ( DC.( Cmps,movs

    .Worda DW o ,Define a word

    Bytea DB o ,define a Byte

    Mov BX, worda

    ADD ByteA , DL

    Mov CX,DS:[38BOH]

    INC ByteA PTR [1BOH]

    ) (DS38BOH

    38BOHmove cx. 1BOH.

  • 5/27/2018

    31/53

    [1BOH] Byte PTR.

    Codetbl DB 20 DUP (?)

    Mov CL, Codetbl [3]

    Mov CL, Codetbl+3

    mov mov+.

    BP,SI,DI,BX . SI,DI,BX . DS:SI,DS:DI,DS:BX DS SS:BPssBP

    . . . .[[DI

    DI.MovBXDataval.MovDataval BX Dataval DB 50 .MOV BX ,offset DatavalMOV [BX],25

  • 5/27/2018

    32/53

    .mov Dataval ,25MOV . mov [BX+2] ,o Dadval: [BX+DI]:

    BXDI. SIDI,BX,BP

    .ADD CL,[BX] ,2nd operond =DS:BX

    MOV Byte ptr[DI],25 ,1st operond =DS:DI

    ADD [BP] ,CL ,1st operond =SS:BP

    MOV .:Data TAB () Data TABBL

    DI. Datatab DB 40 DUP(?)

    MOV datatab[DI] ,BL

    ()

    . MOV

    MOV .() (

  • 5/27/2018

    33/53

    / / . MOV [lalde:] MOV /

    MOV:Bytefld BW ?Wordfld DW ?

    .MOV EDX,ECX ,Register to Register

    MOV DS , BX ,Register to segment register

    MOV Byteefld,DH ,Register to memory,direct

    MOV [DI] ,BX ,Register to memory , Indirect .

    MOV CX,40 ,Immediate to register

    MOV Bytefld,40 ,Immediate to memory-direct

    MOV Wordfld [BX],40 ,Immediate to memory-indirect

    .MOV CH,Bytefld ,memory to Register,direct

    MOV CX,Wordfld [BX] ,memory to Register,indirect

    .MOV CX,DS ,segment register to Register

    MOV Wordfld,DS ,segment Register to memory

    . CH

    MOV: CL -()--

    --.. :

  • 5/27/2018

    34/53

    :. :

    . .

    . .

    .

    .

    (1) (o) .AH ooo .27-1.

    woAX1.

    MOVMOV AH,OO 10110 100 OOOOOOOO

  • 5/27/2018

    35/53

    (100)AH .MOV

    :MOV AX,00 10111 000 00000000 00000000 AX(ooo)

    .reg,w.

    ((mode :

    1110,01,00mod .

    Rey m r 8R/m

    . (/) d

    BXAX.MOV BX,AX 00 00 00 11 11 011 000(r/m)(ooo) reg(011)mod(11)D=q . w=l . (011)BX(ooo)Ax

    .DEBU6.

    : MOV

  • 5/27/2018

    36/53

    . () . mov (MOVS)

    . :.

    MOV///: .:

    100010 dw mod reg r/m :Reg / reg/mem

    1100011w modooor/m .....data....data ifw=1

    1011wreg......data......data if w=1 lmmed: 1010000w addr-low addr-high mem: 1010001w addr-low addr-high mem

    10001110 mod Osgr/m (sg=seg reg) segregrem/mem 10001100 modosgr/m (sg=seg reg) reg/memseg reg

    9 (Interrupt= ) INT INT21 H INT10H.

    .

  • 5/27/2018

    37/53

    () AH .

    INT10 H INT 21 H. . DOS

    . INT21 H

    . enterODH

    ((carriage Return=CR.

    (). ()

    .

    OOH OOH OO OO

    4FH OOH 79 OO 27H/28H OOH 39/40 12

    OOH 18 H OO 24

  • 5/27/2018

    38/53

    O4 H 18 H 79 24 .2K 4KBOOOCOJH 2K .

    16kB800[0]h.. (graphics mode)(text mode)

    ). (

    INT 10 H- . AHO2 HDH BH O ()

    . DL. .O8:

    MOV AH,O2 H ,Request set sursorMOV BH,OO ,Page number O

    MOV DH,O8 ,Row 8

    MOV DL,15 ,Solumn 15

    INT 10H ,Call interrupt service.

  • 5/27/2018

    39/53

    INT 10 HO6H

    . O6H=AH

    . =AL OOH =( ) BH

    =CX: =DX:

    ()CX,DX . AL : OO:OOH CX: 18:4FHDX.71H

    ()(). MOV AX,0600H ,AH =06(scroll),AL=oo(full screen)

    MOV BH,71H ,white background (I), biue foreground (1)

    MOV BH,0000H ,upper left row: column

    MOV DX,184 FH ,lower row : column

    INT 10 H ,Call interrupt serviceoo05

    0500HCXoc4FHDX: 184FH

    .09HINT 21H

    .

  • 5/27/2018

    40/53

    CUSTMSG DB , customer name ? $

    customer name?$ .DB $

    $. LEA 09HAH

    DXINT 21 H.MOV AH,09H

    LEA DX,Custmsg ,load address of prompt

    INT 21H

    INT . . .

    . 09H

    FFH,ooH.

    .20 H. : INT 10 H06 H

    .INT O . O6 H.

  • 5/27/2018

    41/53

    . AL .AL

    :AL= (00) CX=: BH= DX=: :MOV AX,0601 H ,Request Scroll upone Line

    MOV BH,61 H ,Bronn Background , Blue Foregronnd

    MOV CX,0000 ,From 00:00 throoghMOV DX,184 FH ,24:79-(Full screen)

    INT 10H ,call interrupt service

    . ROW .

    O. ..

    (CMP ROW,22)ROW. ROW .

    ROWOO. ROW((INC ROW . AL.DXCX DX:CX () .: :

    :::MOV AX,0607H ,request scroll 7 lins

    MOV BH,80H ,cyan background,black foregroond

  • 5/27/2018

    42/53

    MOV CX,OC19 H ,from cow12,column25 tehrough

    INT 10 H ,call int errupt- service

    . .

    . : INT 10 HO9 H

    .:

    AL= BL= BH= CX=

    AL CX " C60 .

    "((01H.MOV AH,09H ,request display

    MOV AL,01H ,happy face for display

    MOV BH,O ,page number o (normal)

    MOV BL,16H ,blue background ,brown foreground

    MOV CX,60 ,60repeated characters

    INT 10H ,call interrupt service

    (Bell) Tab

    . 09 H01 CX .oo

  • 5/27/2018

    43/53

    cx )AL (LOOP 02HINT 10H.

    : Dana porter .

    : 11/2=5 . 40-5=35 .

    page 60,132

    Title Ao9CTRNM (EXE) Accept names ,Center on screen

    .model small .stack 64

    Data

    Parlist labeel byte

    Maxnlen DB 20

    Actulen DB ?

    KB name DB 21 DUP

    Prompt DB name? , $

    .Code .886

    Alomain proc far ,MOV AX.@ data,MOV DS,AX

    MOV ES,AX, CALL QLOCLR

    AL cx "

    "((01H:MOV AH,09H ,Request display

  • 5/27/2018

    44/53

    MOV AL,01H ,Happy face for display

    MOV BH,O ,page number o (normal)

    MOV BL,16 H ,blue background , brown foreground

    MOV CX,60 ,60 repeated characters

    INT 10 H ,call interrupt service

    (Bell) TAB

    . 09 H CX .00( AL01 ( LOOPCX INT 10H02H

    .A2OLOOP:

    MOV DX,OOOO ,set wrsor to oo,oo

    Call Q2OCURS

    Call B10 PRMPT ,display-prompt

    Call C10 INPT ,provide for input of name

    Call Q10 CLR ,clear screen

  • 5/27/2018

    45/53

    CMP ACTULEN,OO ,name entered?

    JE A30 ,no,exit

    Call D10 CODE , setbell ande $

    Call E10 CENT ,cinter,display name

    JMP A20 LOOP

    A30:

    MOV AX,4COOH ? ,end processing

    INT 21 H

    A10 MAIN ENDP

    Display Prompt

    B10 PROMPT PROC Near

    MOV AH , 09H ,Reqvest dispiay

    Lea DX,PROMPT

    INT 21H

    RET

    B10 Prompt Endp

    Accept+input of name

    C10 INPT Proc near

    MOV AH,OAH ,Request Key board

    Lea DX,PARlist ,input

    INT 21 H ... RET .... C10INPT Endp

  • 5/27/2018

    46/53

    Set bell and $ delimiter

    D10 Code PROC near

    Movsx BX,Actulen Replace ODH with 0H

    Mov KB name [BX],0

    Mov KB name[BX+1] $

    RetD1OCOde Endp

    Center and display name:

    E10cent PROC near

    MOV DL,Actulen ,locate center column

    Shir DL,1 ,divide lengh by 2

    NEG DL ,reverse sign

    ADD DL,40 ,add 40

    MOV DH,12 ,center row

    Call Q20coRs ,set cursor

    MOV AH,09H

    LEA DX,kbname ,display name

    INT 21 H

    RET

    E10Cent Endp

    Clear Screen

    Q10CLR PROC Near

    MOV AX,0600H ,Request scroll screen

    MOV BH,30

  • 5/27/2018

    47/53

    MOV CX,0000

    MOV DX,184FH

    INT 10H

    RET

    Q10 CLR Endp

    Set eursor row co umn

    Q20CUPRS PROC near ,DX set on entry

    MOV AH,02H ,Request set cursor

    MOV BH,00 ,page #00

    INT 10H RET

    Q20CURS ENDP

    End A10 main

    SHRE10 CENT .

    ADD . NEG+- DLDL Dana porter: . (01H) D10Ccode

    :MOV ZX BX,Actulen

    MOV Kbname[BX],01H

    MOVzxBX.MOV BX .movbxKB name

  • 5/27/2018

    48/53

    07H .07H ( Enter )KB name+11 INT09H 07H$ D10 code

    21 H. 00HINT 21 H09 H.

    :

    cmp Actulen ,ooA20 loop.

    INT 21 H OAH OAHINT 21 H.

    .INT . . .

    .: .ABEL BYTE.

  • 5/27/2018

    49/53

    .LABEL .

    LABEL...

    OFFh. .

    . .

    .. Enter.

    .

    pgup , home , F1 .

    OS 12,unix .

    .

    00 (con)

  • 5/27/2018

    50/53

    01 . (con) 02 ((con. 03 (AVX) 04 (LPT1PRN)

    :01,00 .

    .

    INT 21h 40h

    .AH=40h CX=BX=01 DX=

    AX INT :

    () = 05H AX= 06H

    :JC error-rautine , test for display error

  • 5/27/2018

    51/53

    ODH( ) oalt,(back spacs)08H() 07H . INT 21H09H()

    Cotitle DB Intertech corp , ODH,OAH ,Dispiay area

    MOV AH,40H ,kequest display

    MOV BX,01 ,File handle for screen

    MOV ex,17 ,Display 17 characters

    Lea BX,Cotitle ,Display area

    INT 21 H ,Call interrupt service

    CotitleOAH,ODH

    INT 21 H 3FH

    .:

    AH=3FH BX=00 CX= DX=

    AX INT .

  • 5/27/2018

    52/53

    INT = 06H= 05H:AX AX.

    .

    (back spaes) 3FhINT 21hOah .

    KB nput DB 20DUP

    MOV AH,3FH ,Request keyboard input

    MOV BX,00 ,File handle for key board

    MOV CX,20 ,maximum 20 characters

    Lea DX,KBInput ,Input area

    INT 21 H ,call interrupt service

    Enter .CX

    .

  • 5/27/2018

    53/53

    (ODH) Enter (Oah) . INT.

    AX.