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

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

of 53

description

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

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

  • 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.