chuong 04 8086 assembly
TRANSCRIPT
-
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