Chuong 04 8086 Assembly

download Chuong 04 8086 Assembly

of 16

Transcript of Chuong 04 8086 Assembly

  • 8/8/2019 Chuong 04 8086 Assembly

    1/16

    Ch ng 4

    8086 Assembly

    Xt o n ch ng trnh sau

    Int cong (int a, int b)

    {

    Return (a + b);

    }

    Void Main()

    {

    Int x=3; int y=4;

    Printf(Tong: %d, cong(x,y));

    }

    Trong ch ng trnh c hai phn: ph n khai bo v phn l nh cho

    ch ng tr nh. Trong ph n l nh c th cph n g i ch ng tr nh con

    Nh v y th c hi n m t ch ng tr nh (d ng .EXE).Ng i ta c n t nh t 3 o n b nh (segment). o ndnh ch a d l i u c khai bo, o n ch a mch ng trnh, o n ngn x p (stack) ph c v g ich ng trnh con. M i o n c kch th c 64K. Khich ng tr nh c th c hi n . M i on b nh ny c tr b i thanh ghi o n:

    Thanh ghi o n m CS: tr n o n b nh ch a mch ng trnh

    Thanh ghi o n d li u DS: tr n o n b nh khaibo ch ng trnh.

    Thanh ghi o n ngn x p SS: tr n o n b nh dnhcho stack.

    Ngoi ra trong nhi u tr ng h p, ng i ta s d ng thmm t on d li u ph dng trong tr ng h p cc d li uc n khai bo v t qu kch th c cho php c a m t

    o n. Khi thanh ghi d l i u ES s tr n

    Ngn ng my (Machine language)

    M i ki n trc my tnh c m t ngn ngmy ring. Ngn ng my l ngn ngduy nh t my c th hi u c.

    Ngn ng my l cc m l nh, v vi cghp n i cc m l nh v i d li u, a ch

    Vi c l p trnh b ng ngn ng my r t khkhn v ph c t p

    Dng ngn ng c p cao h n

    H p ng (Assembly language)

    d ghi nh ng i ta dng m gi(mnemonic), tn g i (label)

    H p ng l ngn ng m cc m l nh lm gi , d li u ho c a ch l cc label.Chng ta ghp n i l i theo m t c u trc

    V d

    mov al, 061h

    Trnh bin dch h p ng(assembler)

    Ch ng trnh vi t b ng h p ng ctrnh bin dch (assembler) dch sang m

    my my tnh c th hi u. V i m t ki n trc my tnh c th c nhi u

    trnh bin dch c a nhi u nh cung c p,ch y trn nhi u h i u hnh khc nhau

    V d v i cng ki n trc x86 nh ng cnhi u trnh bin dch: A86, GAS, TASM,MASM, NASM

  • 8/8/2019 Chuong 04 8086 Assembly

    2/16

    V d ch ng tr nh h p ng

    Hello.asm

    .MODEL SMALL .STACK 100H

    .DATA MyStr DB "HELLO ASM !$" .CODE MOV AX, @DATA MOV DS, AX LEA DX, MyStr MOV AH,9 INT 21H MOV AH, 4CH INT 21H END

    Cch th c ch ng trnh lm vi c

    Ngu n 1 Ngu n 2 Ngu n 3Ch ng tr nhngu n .ASM

    Trnh bin dch

    Ch ng tr nh

    lin k t

    it ng 1

    it ng 2

    it ng 3

    Ch ngtrnh th c thi

    .COM

    Ch ngtrnh th c thi

    .EXE

    Th

    vi n

    MASM.exe

    M i t ng ( .OBJ)

    B ng li t k (.LST)

    Tham kh o cho (.CRF)

    LINK.EXE

    M th c thi (.COM)

    M th c thi (.EXE)

    Bn ( .MAP)

    M ASCII000 001 010 011 100 101 110 111

    0000 NU LL D LE 0 @ P ` p0001 SOH DC1 ! 1 A Q a q0010 STX DC2 " 2 B R b r0011 ETX DC3 # 3 C S c s0100 EDT DC4 $ 4 D T d t0101 ENQ NAK % 5 E U e u0110 ACK SYN & 6 F V f v0111 BEL ETB ' 7 G W g w1000 BS CAN ( 8 H X h x1001 HT EM ) 9 I Y i y1010 LF SUB * : J Z j z1011 VT ESC + ; K [ k {1100 FF FS , < L \ l |1101 CR G S - = M ] m }1110 SO RS . > N ^ n ~

    1111 SI US / ? O _ o DEL

    000 001 010 011 100 101 110 1110000 NU LL D LE 0 @ P ` p0001 SOH DC1 ! 1 A Q a q0010 STX DC2 " 2 B R b r0011 ETX DC3 # 3 C S c s0100 EDT DC4 $ 4 D T d t0101 ENQ NAK % 5 E U e u0110 ACK SYN & 6 F V f v0111 BEL ETB ' 7 G W g w1000 BS CAN ( 8 H X h x1001 HT EM ) 9 I Y i y1010 LF SUB * : J Z j z1011 VT ESC + ; K [ k {1100 FF FS , < L \ l |1101 CR G S - = M ] m }1110 SO RS . > N ^ n ~1111 SI US / ? O _ o DEL

    Most significant bit

    Least significant bit

    000 001 010 011 100 101 110 1110000 NU LL D LE 0 @ P ` p0001 SOH DC1 ! 1 A Q a q0010 STX DC2 " 2 B R b r0011 ETX DC3 # 3 C S c s0100 EDT DC4 $ 4 D T d t

    0101 ENQ NAK % 5 E U e u0110 ACK SYN & 6 F V f v0111 BEL ETB ' 7 G W g w1000 BS CAN ( 8 H X h x1001 HT EM ) 9 I Y i y1010 LF SUB * : J Z j z1011 VT ESC + ; K [ k {1100 FF FS , < L \ l |1101 CR G S - = M ] m }1110 SO RS . > N ^ n ~1111 SI US / ? O _ o DEL

    e.g., a = 1100001 95 Graphic codes

    000 001 010 011 100 101 110 1110000 N ULL DLE 0 @ P ` p0001 SOH DC1 ! 1 A Q a q0010 STX DC2 " 2 B R b r0011 ETX DC3 # 3 C S c s0100 EDT DC4 $ 4 D T d t

    0101 ENQ NAK % 5 E U e u0110 ACK SYN & 6 F V f v0111 BEL ETB ' 7 G W g w1000 BS CAN ( 8 H X h x1001 HT EM ) 9 I Y i y1010 LF SUB * : J Z j z1011 VT ESC + ; K [ k {1100 FF FS , < L \ l |1101 CR GS - = M ] m }1110 SO RS . > N ^ n ~1111 SI US / ? O _ o DEL

    http://0000NULLDLE0@p/http://0000NULLDLE0@p/http://0000NULLDLE0@p/http://0000NULLDLE0@p/http://0000NULLDLE0@p/http://0000NULLDLE0@p/http://0000NULLDLE0@p/http://0000NULLDLE0@p/
  • 8/8/2019 Chuong 04 8086 Assembly

    3/16

    33 Control codes

    000 001 010 011 100 101 110 1110000 NU LL D LE 0 @ P ` p0001 SOH DC1 ! 1 A Q a q0010 STX DC2 " 2 B R b r0011 ETX DC3 # 3 C S c s0100 EDT DC4 $ 4 D T d t0101 ENQ NAK % 5 E U e u0110 ACK SYN & 6 F V f v0111 BEL ETB ' 7 G W g w1000 BS CAN ( 8 H X h x1001 HT EM ) 9 I Y i y1010 LF SUB * : J Z j z1011 VT ESC + ; K [ k {1100 FF FS , < L \ l |1101 CR G S - = M ] m }1110 SO RS . > N ^ n ~1111 SI US / ? O _ o DEL

    Alphabetic codes

    000 001 010 011 100 101 110 1110000 N ULL DLE 0 @ P ` p0001 SOH DC1 ! 1 A Q a q0010 STX DC2 " 2 B R b r0011 ETX DC3 # 3 C S c s0100 EDT DC4 $ 4 D T d t0101 ENQ NAK % 5 E U e u0110 ACK SYN & 6 F V f v0111 BEL ETB ' 7 G W g w1000 BS CAN ( 8 H X h x1001 HT EM ) 9 I Y i y1010 LF SUB * : J Z j z1011 VT ESC + ; K [ k {1100 FF FS , < L \ l |1101 CR GS - = M ] m }1110 SO RS . > N ^ n ~1111 SI US / ? O _ o DEL

    Numeric codes

    000 001 010 011 100 101 110 1110000 NU LL D LE 0 @ P ` p0001 SOH DC1 ! 1 A Q a q0010 STX DC2 " 2 B R b r0011 ETX DC3 # 3 C S c s0100 EDT DC4 $ 4 D T d t0101 ENQ NAK % 5 E U e u0110 ACK SYN & 6 F V f v0111 BEL ETB ' 7 G W g w1000 BS CAN ( 8 H X h x1001 HT EM ) 9 I Y i y1010 LF SUB * : J Z j z1011 VT ESC + ; K [ k {1100 FF FS , < L \ l |1101 CR G S - = M ] m }1110 SO RS . > N ^ n ~1111 SI US / ? O _ o DEL

    000 001 010 011 100 101 110 1110000 N ULL DLE 0 @ P ` p0001 SOH DC1 ! 1 A Q a q0010 STX DC2 " 2 B R b r0011 ETX DC3 # 3 C S c s0100 EDT DC4 $ 4 D T d t0101 ENQ NAK % 5 E U e u0110 ACK SYN & 6 F V f v0111 BEL ETB ' 7 G W g w1000 BS CAN ( 8 H X h x1001 HT EM ) 9 I Y i y1010 LF SUB * : J Z j z1011 VT ESC + ; K [ k {1100 FF FS , < L \ l |1101 CR GS - = M ] m }1110 SO RS . > N ^ n ~1111 SI US / ? O _ o DEL

    Punctuation, etc.

    Ki n trc t p l nh 8086

    Pop flags fromstack

    POPFPush flags ontostack

    PUSHF

    Load effectiveaddress

    LEATranslateXLAT

    Load ES withsegment and

    register with offset

    LESLoad DS vithsegment andRegister with

    offset

    LDS

    Store AH in flagsSAHFLoad AH withFlags

    LAHF

    OutputOUTInputIN

    exchangeXCHGPopPOP

    PushPUSHMoveMOV

    InstructionMnemonicInstructionMnemonic

    Nhm l nh di chuy n d liu

    L nh MOV

    Ch c nng: chuy n gi tr t ton h ng ngu n vo tonh ng ch.

    C php:MOV ch (Dst), ngu n (Src)

    reg1, reg 2Reg, datamem, regReg, memmem, data

    Ch :- Data chn m pha ngun- Hai ton h ng Dst, Src khng th ng th i l hai

    nh

    http://0000NULLDLE0@p/http://0000NULLDLE0@p/http://0000NULLDLE0@p/http://0000NULLDLE0@p/http://0000NULLDLE0@p/http://0000NULLDLE0@p/http://0000NULLDLE0@p/http://0000NULLDLE0@p/
  • 8/8/2019 Chuong 04 8086 Assembly

    4/16

    L nh PUSH

    Ch c nng: chuy n gi tr ton h ng ngu n vonh ngn x p

    C php

    PUSH Src v d

    reg16 push ax

    mem16 push x

    Segreg push DS

    Ch :

    - Ton h ng ngu n lun c kch th c 16 bit

    - Ton h ng ngu n khng th l data (h ng s )

    L nh POP

    Ch c nng: l y gi tr nh ngn x p a voton h ng ch

    C php:

    POP Dst v d

    Reg16 POP AX

    mem16 POP X

    Segreg POP DS

    Ch :

    - Ton h ng ngu n lun c kch th c 16bit

    - Ton h ng ngu n khng th l data (const)

    L nh PUSHF

    Ch c nng: chuy n gi tr thanh ghi cvo nh ngn x p

    C php:

    PUSHF

    L nh POPF

    Ch c nng: l p gi tr nh ngn x p l uvo thanh ghi c

    C php:

    POPF

    L nh XCHG

    Ch c nng: hon v gi trgi a ton h ngngu n v ch

    C php:

    XCHG Dst, Src v d

    Reg, Reg XCHG AX, BXReg, Mem XCHG AX, [BX]

    Mem, Reg XCHG [BX], AX

    L nh IN

    Ch c nng: c gi tr t m t c ng vothanh ghi AL ho c AX.

    C php:

    IN AL, a ch c ng (8bit)

    IN AX, a ch c ng (16bit)

  • 8/8/2019 Chuong 04 8086 Assembly

    5/16

  • 8/8/2019 Chuong 04 8086 Assembly

    6/16

    L nh MUL

    Ch c nng: Nhn n i dung c a ton h ng AX ho c AL v i n i dungc a ton h ng ngu n. Gi tr c a hai ton h ng l d ng khng d u.K t qu c c t nh sau:+ N u l php nhn hai ton h ng 8 bit th k t qu c t trong

    AX+ N u l php nhn hai ton h ng 16 bit th k t qu c t trongDX:AX

    C p hp:

    MUL Src V dReg MUL CL

    Mem MUL xCh :

    - Ton hng ngu n khng th lh ng s- K t qu cth tc ng n cc c : OF, ZF, CF

    L nh DIV

    Chia gi tr c a thanh ghi AX ho c DX:AX cho n i dung c a tonh ng ngu n. Gi tr c a hai ton h ng l d ng khng d u. K t qus c c t nh sau :+ N u s bchia l ton h ng 16 b it th phn th ng s c t

    trong AL, v ph n d t trong AH+ Nu b chia l ton h ng 32 bit th ph n th ng s c t trongAX, v ph n d u t trong DX

    C p hp:

    DIV Src V dReg DIV CL

    Mem DIV [BX]Ch :

    - Ton hng ngu n khng th lh ng s- K t qu c th tc ng n c : OF, CF

    L nh CMP

    Ch c nng: So snh gi tr c a ton h ng ch v ton h ng ngu n.N i dung c a hai ton h ng khng thay i sau l nh ny. L nh nyth c hi n b ng cch l y ton h ng ch tr i ton h ng ngu n. K tqu ph n nh ln thanh ghi c v khng c l u l i

    C phpCMP Dst, Src V d

    reg1, reg2 CMP AX, BXReg, Data CMP AH, 9FhMem, Reg CMP [BX], AXReg, Mem CMP CX, [1234h]Mem, Data CMP [BX], FFh

    Ch :- Hai ton h ng khng th ng th i l h ng s ho c nh

    - K t qu cth tc ng n c : OF, SF, ZF, AF, PF, CF

    Nhm l nh tnh ton logic

    Exclusive ORXOR

    Rotate left with CarryRCLRotate rightROR

    Bitwise ANDANDRotate with CarryRCR

    Bitwise ORORLogical compareTEST

    Rotate leftROLArithmethic shift rightSAR

    Logical shift rightSHRArithmethic shift leftSAL

    Logical shift leftSHLInvertNOT

    InstructionMnemonicInstructionMnemonic

    L nh NOT

    Ch c nng: o gi tr t ng bit m t c aton h ng ch

    C php:NOT Dst V d

    Reg NOT CL

    Mem NOT [BX]

    Ch :

    - Ton h ng ch khng th l h ng s

    L nh AND

    Ch c nng: th c hi n php AND logic gi a hai ton h ng, kt qu tvo ton h ng ch

    C p hp:AND Dst, Src V d

    Reg1, Reg2 AND AX, BXReg, Data AND AH, 9Fh

    Mem, Reg AND [BX], AXReg, Mem AND CX, [1234h]

    Mem, Data AND BX, FFhCh :

    - Ton h ng ngu n v ch khng th ng th i l nh ho c h ng s- K t qu cth tc ng n cc c : SF, ZF, PF

  • 8/8/2019 Chuong 04 8086 Assembly

    7/16

    L nh OR

    Ch c nng: Th c hi n php OR logic gi a hai tonh ng, k t qu t trong ton h ng ch

    C php:

    OR Dst, Src V dReg1, Reg2 OR AX, BXReg, Data OR AX, 12hMem, Reg OR [BX], ALReg, Mem OR CL, [1234h]Mem, data OR [BX], FFh

    Ch :- Hai ton h ng khng ng th i l h ng s ho c nh- K t qu c th tc ng n cc c : SF, ZF, PF

    L nh XOR

    Ch c nng: th c hi n php exclusive OR gi a hai ton h ng, ktqu t ton hng ch

    C p hp:XOR Dst, Src V d

    Reg1, Reg2Reg1, DataMem, regReg, MemMem, Data

    Ch :- Hai ton hng khng th ng th i l hng s ho c nh- K t qu cth tc ng n cc c : SF, ZF, PF

    L nh TEST

    Ch c nng: so snh n i dung hai ton h ng b ng cch th c hi nl nh AND gi a hai ton h ng m khng l u l i k t qu . Kt qu tc ng n thanh ghi c

    C p hp:TEST Dst, Src

    Reg1, Reg2Reg, data

    Mem, regReg, Mem

    Mem, dataCh - Hai ton h ng khng ng th i l hng s ho c nh- K t qu cth tc ng n cc c : SF, ZF, PF

    L nh SHL/SAL

    Ch c nng: dch tri cc bit c a ton h ng ch iCOUNT l n. Trong CL = COUNT

    C php:SHL/SAL Dst, COUNT V d

    Reg SHL AL, CLMem SHL [BX], CL

    Ch :- Hai ton h ng khng ng th i l h ng s ho c nh- Khi Count =1 th c th t 1 tr c ti p vo ton h ng v

    d SHL/SAL Dst, 1- K t qu c th tc ng n cc c : OF, SF, ZF, PF, CF

    L nh SHR

    Ch c nng: dch ph i cc bit c a ton h ng ch iCOUNT l n, trong CL = COUNT

    C php:

    SHR Dst, COUNT V dReg SHR AL, CLMem SHR [BX], CL

    Ch :- Hai ton h ng khng ng th i l h ng s ho c nh- Khi Count =1 th c th t 1 tr c ti p vo ton h ng v

    d SHL/SAL Dst, 1- K t qu c th tc ng n cc c : OF, SF, ZF, PF, CF

    L nh ROR

    Ch c nng: quay vng ph i cc bit c a ton h ng chi COUNT l n. Trong CL = COUNT. Trong m i l nquay, gi tr bit th p nh t v a chuy n vo thanh ghi cCF, ng th i chuy n vo bit cao nh t.

    C php:ROR Dst, COUNTV d

    Reg ROR AL, CLMem ROR [BX], CL

    Ch :- Hai ton h ng khng ng th i l h ng s ho c nh- Khi Count =1 th c th t 1 tr c ti p vo ton h ng v

    d ROR Dst, 1- K t qu c th tc ng n cc c : OF, CF

  • 8/8/2019 Chuong 04 8086 Assembly

    8/16

    L nh ROL

    Ch c nng: quay vng tri cc bit c a ton h ng ch iCOUNT l n. Trong CL = COUNT. Trong m i l nquay, gi trbit l n nh t v a chuy n vo thanh ghi cCF, ng th i chuy n vo bit th p nh t.

    C php:ROL Dst, COUNTV d

    Reg ROL AL, CLMem ROL [BX], CL

    Ch :- Hai ton h ng khng ng th i l h ng s ho c nh- Khi Count =1 th c th t 1 tr c ti p vo ton h ng v

    d ROL Dst, 1- K t qu c th tc ng n cc c : OF, CF

    Nhm l nh thao tc STRING

    Load StringLODS

    Store StringSTOS

    Compare stringCMPS

    Move a stringMOVS

    RepeatREP

    InstructionMnemonic

    L nh MOVSB (MOVSW)

    Ch c nng: chuy n m t xu k t theo t ngbyte (ho c theo t ng t ) t vng nh ngu nsang vng nh ch. Trong , DS:SI tr nxu k t ngu n v ES: DI tr n xu k tch. Sau m i l n chuy n 1 byte ho c 1 t thgi tr c a SI v DI t ng tng ln 1 (ho c 2)n u c h ng DF=0, ho c gi m i 1 (ho c 2)n u c h ng DF=1.

    C php: MOVSB ho c MOVSW

    L nh CMPSB (CMPSW)

    Ch c nng: so snh hai xu k t theo t ngbyte (ho c t ng t ) n m hai vng nh . Trong, DS:SI v ES: DI tr n hai xu k t . Saum i l n so snh t ng byte (ho c word) th gi trc a SI v DI t ng tng ln 1 (ho c 2) n u cDF=0 v gi m i 1 (ho c 2) n u c DF=1.

    C php:CMPSB ho c CMPSW K t qu c th tc ng n cc c : OF, SF, ZF,

    AF, PF, CF

    L nh LODSB (LODSW)

    Ch c nng: chuy n n i dung theo t ngbyte (ho c t ng t ) c a vng nh tr b i

    DS:SI vo thanh ghi AL (ho c AX). Saum i l n chuy n th gi tr c a SI t ngtng ln 1 (ho c 2) n u DF = 0 v gi m i1 (ho c 2) n u DF=1.

    C php: LODSB ho c LODSW

    L nh STOSB (STOSW)

    Ch c nng: chuy n n i dung theo t ngbyte (ho c t ng t ) c a thanh ghi AL

    (ho c AX) t i vng nh tr b i ES: DI.Sau m i l n chuy n t ng byte (t ng t ) thgi tr c a DI t ng tng ln 1 (ho c 2)n u c DF=0 v gi m i 1 (ho c 2) n u cDF = 1

    C php: STOSB ho c STOSW

  • 8/8/2019 Chuong 04 8086 Assembly

    9/16

    Nhm l nh chuy n i u khi n

    LOOPNZ

    JO

    JNB

    JNE

    JBE

    JZ

    LOOPE

    JNP

    JG

    JS

    JC

    JE

    JNOJAJNBEJNC

    LOOPENELOOPZLOOP (tng gi m

    CX 1 n v)

    JNS

    RETINTJCXZ

    JAEJNLEJGEJNL

    JNZJOJPEJP

    JNAJNAEJBJNGE

    JLJMPRETCALL

    Lnh nhy b t u b ng ch J, sau l iu kin. Vd : JGE(Jump if Greater than or Equal)

    L nh CALL

    Ch c nng: g i ch ng trnh con C php:

    CALL a chNhnTn ch ng trnh conRegMem

    L nh RET

    Ch c nng: quay tr v ch ng tr nh g i ch ng trnh con

    C php:RET

    L nh JMP

    Ch c nng: l nh nh y khng i u ki n C php:

    JMP a chNhnTn ch ng trnh conRegMem

    Ch : b c nh y c a l nh ny n m trong m to n 64KB

    Cc l nh nh y c iu ki n

    Cc b c nh y c a l nh nh y c i u ki n khng v t qu 128 byte

    Cc l nh l p Ch c nng: th c hi n vng l p cho n khi i u

    ki n th a mn. C php:

    - LOOP nhn (l p kh i l nh t nhn n LOOPcho n khi CX=0. Sau m i l n gi tr CX gi mi 1.- LOOPZ/LOOPE nhn (l p kh i l nh t nhn n LOOP ho c LOOPE cho n khi CX = 0 vc ZF = 1. Sau m i l n th c hi n gi tr c a CXgi m i 1.- LOOPNZ/LOOPNE nhn (l p kh i l nh t nhn n LOOPNZ/LOOPNE cho n khi CX0 vc ZF=0. Su m i l n th c hi n CX gi m i 1.

  • 8/8/2019 Chuong 04 8086 Assembly

    10/16

    Cc l nh g i ng t m m

    L nh INT- ch c nng: Th c hi n ng t m m

    - C php: INT s hi u ng t (hexa)- Cc c b tc ng: IF, TFL nh IRET

    - Ch c nng: tr v ch ng trnh chnh sau khith c hi n ch ng tr nh con g i ng t- C php: IRET- Cc c b tc ng: OF, SF, ZF, AF, PF, CF

    Cc l nh i u khi n khc

    L nh CLC- ch c nng: xa gitrc CF v 0 (CF=0)- c php: CLC- C b tc ng CF

    Lnh CMC- Ch c nng: o gi t r h in th i c a c CF- c php: CMC- C b tc ng: CF

    Lnh STC

    - Ch c nng: t c CF = 1- C php: STC- C b tc ng: CF

    Lnh CLD- Chc nng: xa gitrc DF (DF=0)- C php: CLD- C b tc ng: DF

    Lnh STD- Ch c nng: t c DF =1- C php: STD- C b tc ng: DF

    Lnh CLI- Ch c nng: xa cc c IF (IF=0). C m cc ngt c ng ho t ng, tr cc ng t khng che- C php: CLI- C b tc ng: IF

    L nh STI- Ch c nng: t IF=1. Cho php cc ng t c ngho t ng- C php: STI- C nh h ng: IF

    L nh HTL- Ch c nng: d ng my- C php: HTL

    L nh NOP- Ch c nng: khng lm g- C php: NOPCh : l nh NOP r t c ngha khi CPU th chi n cc chu k i c xen vo m t s chu k

    l nh trong qu trnh th c hi n l nh

    CCH TH C L P TRNH

    M t s ch c nng c a ng t 21h

    Ph n ny trnh by cc hm thng d ng c ang t 21h. l cc hm thao tc vo/ra i v ik t , chu i k t , file, th m c, k t thc ch ng

    trnh v tr quy n i u khi n cho DOS Hm 01: c 1 k t (c hi n) t bn phmInput: AH=01Output: AL = m ASCII c a k t

    AL = 0 n u g vo phm ch c nng Hm 02: hi n m t k t ln mn hnh

    Input: AH=02Output: DL=m ASCII k t c n hi n th

    Hm 08: c m t k t (khng hi n) tbn phmInput: AH =08Output: AL=m ASCII k t

    AL =0 n u g vo phm ch cnng

    Hm 09: hi n xu k t k t thc b i $ lnmn hnh

    Input: AH=09DX=a ch offset c a xu k t

  • 8/8/2019 Chuong 04 8086 Assembly

    11/16

    Hm 0Ah:Input: AH=0Ah

    DX = a choffset c a vng m ch a xu k tOutput: DX = a ch offset c a xu k t

    Hm 39h: t o th mcInput: AH = 39h

    DX = a ch offset c a tn th m cOutput: - N u thnh cng th m c c t o ra

    - N u khng thnh cng CF=1 v AX=m l i Hm 3Ah: xa th mc

    Input: AH =3AhDX = a ch offset c a tn th m c

    Output:- N u thnh cng, th m c c xa- N u khng thnh cng, CF=1 v AX=m l i

    Hm 3Ch: t o fileInput: AH=3Ch

    DX = a ch offset c a tn fileCX = thu c tnh file

    Output:- N u thnh cng, file c t o ra CF=0 v AX = th

    file (file handle)- N u khng thnh cng, CF=1 v AX = m l i

    Thu c tnh file c nh ngha nh sau:00h: file bnh th ng01h: file ch c02h: file n04h: file h th ng08h: thu c tnh cho nhn a10h: thu c tnh cho th m c con

    Hm 3Dh: m fileInput: AH=3Dh

    AL = modeOutput:

    - N u thnh cng, file c m , CF=0v AX=th file (file handle)

    - N u khng thnh cng, CF=1 vAX=m l i

    Hm 3Eh Hm 3Fh Hm 40h Hm 41h Hm 4Ch: k t thc ch ng trnh

    Input: AH = 4ChOutput: k t thc ch ng trnh, tr quy ni u khi n cho h i u hnh

    Cch t tn

    Quy t c t tn bi n v nhn: b t u b ng m tk t khc s , cc k t dng t tn: a-z, A-Z, 0-9, ?, @, _, $

    Ch ng trnh khng phn bi t ch hoa, chth ng. Bi u di n cc gi tr

    - S nh phn: xxxxxxB (010101B)- S bt phn: xxQ ho c xxO (123Q)- S th p phn: xxx (123)- S th p l c phn (s Hex): xxxxH, b t ub ng s (1230H, 0124H)

    CCH KHAI BO BI N

    Cc bi n c th c khai bo v i 3 ki ud li u khc nhau: ki u byte, ki u word,ki u double word

    + Bi n ki u byte:D ng khai bo: Tn bi n DB ?V d : X DB ?;khng c

    gi tr kh i uY DB 4;gi tr kh i

    u l 4

  • 8/8/2019 Chuong 04 8086 Assembly

    12/16

    Bi n ki u wordD ng khai bo: Tn bi n DW ?V d : X DW ?;khng c gi

    tr kh i uY DW 4;gi tr kh i

    u l 4 Bi n ki u double wordD ng khai bo: Tn bi n DD ?V d : X DD ?;khng c gi

    tr kh i uY DD 4; gi tr kh i

    u l 4

    Khai bo bi n ki u m ngM ng l m t dy lin ti p cc ph n t c cng byte ho ctv d : A1 DB 1,2,3,4,5

    L khai bo m t bi n m ng c tn A1, g m 5 byte trong bnh . N i dung nh [A1] c gi tr l 1, [A1+1] l 2...

    N u khai bo m t m ng khng c n gi tr ban u ta khaibo nh sau:

    A2 DB 100 DUP (?)Khai bo m ng c 100 ph n t v cc ph n t l ki u ByteKhai bo nh sau:

    A3 DB 100 DUP (0)Khai bo m ng c 100 ph n t ki u byte v i gi tr l 0

    Khai bo bi n ki u xu k tXu k t l m t m ng m m i ph n t lm t k t hay m ASCII c a k t . Xu kt k t thc b i k t $ (c m ASCII l24h)

    V d :xu1 DB cho cc b n$

    Khai bo h ngH ng c th l ki u s ho c ki u k t

    C php nh sau:Tn h ng EQU gi tr c a h ng

    V d :Chao EQU Cho b nCR EQU 11h

    Ton t DUP

    Ch xu t hi n sau DB ho c DW V i DUP ta c th l p l i 1 hay nhi u gi

    tr cho vng nh R t c ch khi lm vi c v i m ng ho c

    chu i V d :

    Matrix dw 3 dup (4 dup(0)); matr n 3x4

    Ton t ?

    Mu n khai bo m t bi n hay m t m ng mkhng c n kh i t o gi tr ta dng ton t?

    V d :MEM DB ? ; khai bo 1 byte tr ng trong bnhBMEM DB 50 DUP(?) ; khai bo 50 bytetr ng trong b nh

  • 8/8/2019 Chuong 04 8086 Assembly

    13/16

    KHUNG CH NG TRNH

    1. Ch th .MODEL: kch th c ch ng tr nh vd l i u- Tiny: code + data = 64KB (khng c bin no kch th c> 64KB)

    - Huge: code >= 64KB, data >= 64KB (m t bi n cth c kch th c> 64KB)

    2. Ch th .STACK khai bo kch th c vng stack cho ch ng trnhv d :.stack 100H khai bo stack c 256 byte

    3. Chth .DATA khai bo vng d li u- Dng cc chth DB, DW, DD khai bo cc bi n kiu d li u byte, word,double word ho c array

    + C php bi n Byte (DB):Tn DB Gi tr kh i uV d : A DB 1

    + C php bi n Word (DW):Tn DW Gi tr kh i u

    V d : A DW 2+ C php bin Double Word (DD)

    Tn DD Gi tr kh i uV d : A DD 4

    + Bi n m ng 1 chi u:Tn DB Gi trV d : M1 DB 1,2,3,4,5

    + Bi n mng nhi u chiuTn DB Gi tr

    DB Gi tr

    + K tTn DB string

    V d : string1 DB 123+ Khai bo h ng (EQU)

    V d : a EQU 0, value EQU 100+ LABEL dng nh d u a ch ho c thay i ki u d li u

    ca bi nV d : day LABEL Byte

    4. Ch th .CODE khai bo vng ch ng trnh

    .CODEMain PROC ; ch ng trnh chnh

    MOV AX, @DATAMOV DS, AXCALL CTC ; g i ch ng trnh con---------MOV AH, 4CH ; K t thc v DOSINT 21H

    Main ENDP ;k t thc ch ng trnh chnhCTC PROC ; ch ng trnh con

    CTC ENDP ; K t thc ch ng trnh con

    Khung ch ng trnh d ng .EXE

    Khung ch ng trnh khi dch thnh filech y d ng .EXE

    Ta dng Start v End start nh d ui m b t u v k t thc o n m l nhdng cho ch ng trnh (c th dng tnkhc Start)

    .model small

    .stack 100h

    .Data;cc khai bo h ng, bi n y

    .Code

    Start:Mov AX, @DataMov DS, AX;cc l nh c a ch ng trnh chnh vi t yMov AH, 4Chint 21h

    End Start;cc ch ng tr nh con n u c s c vi t y

    http://data/http://data/http://data/
  • 8/8/2019 Chuong 04 8086 Assembly

    14/16

    o n l nhMov AX, @DataMov DS, AXlm nhi m v cho con tr DS tr t i vng d l i u khaibo (Data). @Data l a chc a on b nh cp pht

    cho ch ng trnh trong qu trnh ch y. M DS khng thlm vi c tr c ti p v i h ng s (khng th chuy n tr cti p h ng s vo thanh ghi o n) nn thanh ghi AX lbi n trung gian a @Data vo DS.

    Hai o n l nh cu iMov AH, 4ChInt 21h

    Lm nhi m v k t thc ch ng trnh EXE.Tr quy n i u khi n l i cho ch ng trnhDOS. Nh c l i, khng gi ng cc h i uhnh khc (windows l h i u hnh anhi m), h i u hnh DOS l h i u hnh n nhi m. Ngha l, t i m t th i i m chc m t ch ng trnh chi m quy n i ukhi n v ti nguyn c a h th ng

    V d Ch ng trnh Hello World n gin. Ch ng trnh th c hi n vic in ra mn hnh l i

    cho Hello World;ch ng trnh in ra mn hnh Hello World.Model Small.Stack 100h.Data

    Msg db Hello World,$.CodeStart:

    Mov AX, @DataMov DS, AX ;cho DS tr n o n dataMov AH, 09h;hm 09 in ra 1 xu k tMov DX, offset Msg; DX ch a a choffset c a xuInt 21hMov AH, 4Ch ; tr quy n iu khi n cho DOSInt 21h

    End Start

    KHUNG CH NG TRNH D NG COM

    Ch ng tr nh .COM n gi n v ng n g nh n .EXE. T t c cc o n ngn x p, dli u, o n m c g p vo cng m to n l o n m. Ngha l ch ng trnh.COM c gi g n trong m t o n. V icc ng d ng nh m d li u v m l nhkhng v t qu 64KB, ta c th ghp luncc o n ngn x p, d li u v m l nhvo cng v i o n m t o ra file d ng

    .COM

    C u trc nh sau

    .Model Tiny

    .CodeOrg 100hJMP Start; cc khai bo h ng, bi n y

    Start:; cc l nh c a ch ng trnh chnh c vi t y

    Int 20h; cc ch ng trnh con n u c c vi t y

    End Start

    Khai bo m hnh kch th c s d ng bnh lun l Tiny. Ngoi ra trong khung nykhng c khai bo ngn x p v d li u.L nh u tin trong o n m l gi l nh

    ORG 100h, dng gn a ch b t ucho ch ng trnh t i 100h trong o n m.K ti p ng i ta s d ng l nh JMP nh y qua b nh dnh cho vi c khai bo

    http://data/http://data/http://data/http://data/http://data/http://data/http://data/
  • 8/8/2019 Chuong 04 8086 Assembly

    15/16

    V d.Model Tiny.Code

    Org 100hJMP Start

    Msg db Hello World , $Start:

    Mov AH, 09h;hm 09 in ra xu k tMov DX, offset MsgInt 21h ; th c hi n ch c nng in xuInt 20h ; k t thc ch ng trnh v DOS

    End start

    C u trc l p trnh c b n th c hi nb ng assembly

    If i u ki n then cng vi c (dng l nh sosnh v l nh nh y)

    V d : Gn cho BX gi tr tuy t i c a AX;if AX < 0CPM AX, 0JNL ENDIFNEG AX

    ENDIF: MOV BX, AX

    IF i u ki n then cng vi c 1 else cng vi c2

    V d : IF AX < BX then CX = 0 else CX = 1;if AX < BXCPM AX, BXJL THENMOV CX, 1JMP END IFTHEN: MOV CX, 0END IF:

    C u trc l a ch n CASECase bi u th c

    Gi tr1: cng vi c 1Gi tr2: cng vi c 2 ..Gi trN: cng vic N

    V d :N u AX < 0 th CX=1N u AX = 0 th CX=0N u AX > 1 th CX=1

    CMP AX, 0JL Am ; AX 0

    AM: MOV CX, 1JMP ENDCASE

    Bang: MOV CX, 0JMP ENDCASE

    DUONG: MOV CX, 1ENDCASE:

    C u trc l p FOR - DOFor s l n l p Do cng vi c

    kh i t o b m

    cng vi c

    gi m b m i 1

    b m=0?S

    Hi n th dng k t $ ln mn hnh

    Mov CX, 80 ; s l n l p

    Mov AH, 2 ; hm hi n th

    Mov DL, $ ; k t hi n th

    HIEN: INT 21H ; hi n th

    LOOP: HIEN

    ENDFOR:

    C u trc vng l p While - DoWhile i u ki n Do cng vi c

    cng vi c

    i u ki n

    S

    Vd : m s k t c t bn phm khigp k t CR th thi

    XOR CX, CX ; CX=0

    MOV AH, 1 ;hm c k t t bn phm

    TIEP: INT 21H ; c m t k t vo AL

    CPM AL, 13 ; CR?

    JE ENDWHILE

    INC CX ; tng CX ln 1

    JMP TIEP ; ti p t c

    ENDWHILE

  • 8/8/2019 Chuong 04 8086 Assembly

    16/16

    C u trc l p REPEAT - UNTILREPEAT cng vi c UNTIL i u ki n

    cng vi c

    i u ki n

    S

    Vd : c t bn phm khi g p k tCR th thi?

    MOV AH, 1 ; L NH C BN PHM

    TIEP: INT 21H ; C K T VO AL

    CPM AL, 13 ; SO SNH CR?

    JNE TIEP ; CH A, C Ti P

    END:

    Ch ng trnh con C u trc ch ng trnh con PROC Near/FarCc l nh ch ng trnh con

    RET ENDP Gi i thch

    Macro Macro bao g m m t tn i di n v m t

    kh i l nh. Khi ch ng trnh dch h p ngg p tn ny u trong ch ng trnh thkh i l nh c dch v t kh i m l nhvo v tr m ch ng trnh g i tn Macro

    Khai bo MacroTn Macro MACRO cc tham sThn MacroENDM

    Vect h th ng

    - 8086 dnh 1KB b nh cho cc vect ng t v ngo i l(exception)

    - S ng t l m t ton h ng 1 byte (0 255). K t qu caphp nhn s ng t v i 4 s ch t i vector ng t t ng ng (n i dung c a vector ng t l offset v segment c ach ng tr nh x l ng t)

    - V d l nh INT 21H, lm 8086 tm n a ch 00084Hl y offset n p vo thanh ghi IP v segment n p vothanh ghi CS

    Kh i ng h th ng

    - Khi reset 8086, ton b cc thanh ghi s tr v 0, ngo itr thanh ghi CS s c kh i t o l 0FFFFh v l nh.L nh u tin c th c hi n a ch 0FFFh:00000h

    - H th ng my tnh 8086 th ng c b nh ROM n m a ch cao ch a code kh i ng khi h th ng reset

    - Khi kh i ng, cng vi c u tin th ng l kh i t ob ng vector vng a chth p

    Bi t p