Professional Documents
Culture Documents
ALU (B lm tnh & lun l) CU (B iu khin) Thanh ghi trng thi Thanh ghi lnh
1 2 3 4 5 6
Hng ch lnh
Hnh: S khi ca CPU 8086 Ta thy CPU 8086 chia thnh 2 b phn chnh: B phn thc hin lnh (Execution Unit: EU) v b phn giao tip Bus (Bus Interface Unit: BIU). B phn thc hin lnh EU: Kim sot cc thanh ghi, gii m v thi hnh lnh tc l lm cc tc v m lnh yu cu. Nh vy EU lm hu ht cng vic ca CPU c Trang 1
Gio trnh Assembler in. Cc thanh ghi v ng bus trong EU iu l 16 bit. EU khng ni vi bus h thng bn ngoi, n ly lnh t hng ch lnh m BIU cung cp. Khi c yu cu truy xut b nh hay ngoi vi th EU yu cu BIU lm vic. BIU c th ti nh a ch cho php EU truy xut y 1MB (8086 c 20 ng a ch ngoi). B phn giao tip bus (BIU): BIU thc hin tt c cc tc v v bus ca EU. Trong khi EU ang thc hin lnh th BIU ly lnh t b nh trong v ct gi vo trong nh (gi l hng ch lnh) bn trong CPU. Do , EU khng phi i ly lnh t b nh. y l mt cch n gin ca cache.
b. Thanh ghi con tr: Dng thm nhp s liu trn ngn xp.
SP (stack pointer): Thanh ghi con tr ngn xp. BP (base pointer): Thanh ghi con tr nn dng ly s liu t ngn xp.
c. Thanh ghi ch s
SI (source index): Thanh ghi ch s ngun. DI (destination index): Thanh ghi ch s ch.
d. Thanh ghi on: c dng trong mi tnh ton a ch nh. Mi thanh ghi on xc nh 64 KB nh trong b nh trong.
CS (code segment): Thanh ghi on m lnh. DS (data segment): Thanh ghi on d liu. ES (extra segment): Thanh ghi on thm. Cc php tnh chui dng DI u lin quan n ES. SS (stack segment): Thanh ghi on ngn xp. Con tr SP lun tr ti nh ca ngn xp.
e. Thanh ghi c: Phn nh kt qu ca php tnh ton s hc v lun l, xc nh trng thi hot ng ca CPU. Cc bit trn thanh ghi c c ngha c trnh by di y.
CF: th hin s gi thot ra t bit cao nht ca thanh ghi kt qu sau mt php tnh ton. OF: th hin vic tnh ton vt qu kh nng ca CPU. AF: th hin s gi thot ra t bt th 4 (bit 3) ca thanh ghi kt qu. PF: bng 1 nu 8 bt thp ca thanh ghi kt qu mt php tnh ton c s con s 1 chn (v ngc li). ZF: bng 1 khi kt qu php tnh bng 0 (v ngc li).
Ch bin V Thanh n
Trang 2
DF: c th lp trnh c, bng 1 th SI v DI gim 1 cho mi vng lp. IF: c th lp trnh c, bng 1 cho php ngt. TF: c th lp trnh c, bng 1 khi cho php chng trnh chy tng bc phc v sa sai mt chng trnh.
15 14 13 12 11 10 O D
9 I
8 T
7 S
6 Z
4 A
2 P
0 C
dnh dng sau CF c s gi PF c chn l AF c s gi ph ZF c zero SF c du * TF c by * IF c ngt * DF c hng OF c trn
3. T chc b nh trong
B nh trong c t chc thnh tng mng gm cc nh 8 bit. Cc d liu c th ct gi hoc ly ra t bt k nh no. Mi nh c mt a ch. Theo qui c ca Intel cc d kin 16 bit ct gi vo nh vi byte cao a ch cao v byte thp nh c a ch thp.
Trang 3
di 500H
im bt u ca on CS
5. a ch cc ngoi vi
Cc ngoi vi u c a ch ring t 0 n 64 KB. CPU 8086 dng cc lnh ring bit truy xut ngoi vi v b nh trong. Mun truy xut ngoi vi, BIU ch cn a a ch ca ngoi vi ln 16 bit thp ca bus a ch (khng c on).
RD
RQ / GT 0 ( HOLD)
RQ / GT1( HALD)
Lock (WR)
S 2 ( M / IO)
S1( DT / R)
S 0 ( DEN )
READY RESET
Sau chu k my th nht S3, S4 cho ta bit on no c dng to a ch. S3 0 0 1 1 S4 0 1 0 1 ngha on ES on SS on CS hoc khng on no on DS
S5 th hin trng thi c ngt (interrupt flag). S6 c gi trng thi thp nu CPU ang s dng h thng bus ngoi. S7 lu gi trng thi ca
Ready: nh hoc ngoi vi c th dng tn hiu ny bo cho CPU bit n ang sn sng chuyn d liu.
BHE chu k my th nht. RD : CPU dng tn hiu ny c s liu t nh hay t cc thit b ngoi vi.
TEST : Khi ta dng lnh WAIT th CPU trng thi ngh cho n khi tn hiu chn ny xung thp th CPU mi thi hnh lnh k sau lnh WAIT. INTR: Cc ngoi vi tc ng vo chn ny khi cn ngt CPU. NMI (non maskable interrupt): y l ng vo ca ngt khng che, ngt khng che c u tin tuyt i. Reset: Khi ng li h thng.
CPU 8086 c hai ch vn hnh MAX ( MX ) v MIN (MN). Nhim v ca cc chn tng ng vi 2 ch vn hnh nh sau: MIN (MN) MAX ( MX )
HOLD
RQ / GT 0 RQ / GT1
HALD
WR M / IO DT / R DEN
ALE
Lock S2
S1 S0
QS0 QS1
INTA
Ch MN (hiu in th chn
MN / MX cao) DEN (data enable): Cho php s liu c nhn vo CPU hoc a ra bus s liu tu theo tn hiu chn DT / R . Nu chn DT / R c hiu th cao, CPU a s liu ra bus h thng. Nu DT / R c hiu th
thp, CPU nhn s liu t bus h thng.
M / IO (memory / input output): Chn ny trng thi cao nu CPU lin h vi b nh. N trng thi thp n CPU lm vic vi ngoi vi. HOLD: Cc ngoi vi tc ng vo chn ny nu mun s dng bus h thng. HLDA (hold acknowledge): CPU dng tn hiu ny bo cho ngoi vi bit n ang th ni bus h thng. ALE (address latch enable): Tn hiu chn ny cho bit a ch ca nh c a ra bus h thng. INTA (interrupt latch enable): y l tn hiu cho bit CPU cng nhn ngt m ngoi vi yu cu. WR : Tn hiu dng vit s liu vo b nh.
Ch MX (hiu in th chn S0, S1, S2 kt hp, ngha nh sau:
MN / MX thp)
Trang 5
RQ / GT 0 (request / grant): Ngoi vi to mt xung thp chn ny bo cho CPU bit n cn s dng bus h thng. CPU bo li bng mt xung m cho bit n th ni bus h thng. RQ / GT1 ging nh RQ / GT 0 nhng u tin thp hn. QS0 v QS1 cho bit trng thi ca hng ch lnh nh sau:
QS0 0 0 1 1 QS1 0 1 0 1 ngha Cha c tc v Byte th nht ca lnh c thc hin Hng ch lnh y Byte k tip ca lnh ang c ly i t hng ch lnh
LOCK: y l tn hiu bo CPU ang s dng bus h thng. GND (ground): l chn mass (0 volt). V cc l hiu in th ngun 5 volt. CPU 8086 phi dng chung vi mt s vi mch khc nh: vi mch iu khin bus, vi mch to xung nhp (clock), mi to thnh mt my vi tnh.
Ch bin V Thanh n
Lnh ny di chuyn s liu t ngun sang ch. Ngun c th l Reg, Mem, Immed; ch c th l Reg, Mem. V d: MOV CX, BX Lnh trn thc hin chuyn ni dung ca thanh ghi BX vo thanh ghi CX. Ni dung ca thanh ghi BX gi nguyn. Sau lnh ny th BX v CX c cng ni dung. PUSH (push): y vo. PUSH ngun Ngun c th l Reg16, Mem16. Lnh PUSH l gim con tr ngn xp SP xung 2 n v. V d: PUSH AX Lnh trn thc hin chuyn ni dung ca thanh ghi AX vo ngn xp, ng thi con tr SP gim 2 n v. POP (pop: ly, di chuyn): ly d liu ra t ngn xp. POP ch ch c th l Reg16, Mem16. Lnh POP l tng con tr ngn xp SP xung 2 n v.
V d: POP BX Lnh trn thc hin chuyn ni dung 2 byte nh m SP tr ti a vo BX, byte c a ch thp a vo BL, byte c a ch cao a vo BH, ng thi con tr SP tng 2 n v. Ghi ch: Qua 2 lnh PUSH v POP, ta thy ngn xp nh i t nh c a ch cao, n nh c a ch thp, ngha l s liu a vo ngn xp trc th a ch cao, s liu a v ngn xp sau th a ch thp hn.
Ch bin V Thanh n
Nu tri > phi th ZF = 0 v CF =0 Nu tri = phi th ZF = 1 v CF =0 Nu tri < phi th ZF = 0 v CF =1 V d: MOV AX, 1000H CMP AX, 200H JZ NHANDEN ; nhn n NHANDEN: ADD AX, BX
; lp 10 ln
Trang 9
10.
-
V d: Ch bin V Thanh n
MOV AL, 09 SUB AL, 06 (Sau 2 lnh ny AL = 03 tc l AL = 09-06) DEC (decrement: gim) DEC ch ch l Reg, Mem. Lnh ny gim ni dung ca ch xung 1 n v. V d: MOV AL, 02 DEC AL ;Sau 2 lnh ny AL = 1. MUL (multiplication: php nhn): nhn s khng du. MUL ngun Ngun l Reg, Mem. Lnh ny ly thanh ghi tch lu (AX) nhn cho ngun. Nu ngun 8bit th s ny c nhn AL v kt qu t trong AX. Nu ngun l 16 bit, s ny c nhn vi AX v kt qu trong DX:AX (DX:AX l mt s 32 bit, 16 bit cao trong DX v 16 bit thp trong AX). V d: MOV AL, 9 MOV BL, 2 MUL BL (Sau 3 lnh ny AL c gi tr bng 18). DIV (division: php chia): chia s khng du. DIV ngun Ngun l Reg, Mem. Lnh ny ly thanh ghi tch ly (AX) chia cho ngun. Nu ngun 8bit th ly AX chia cho ngun, kt qu t trong AL v s d t trong AH. Nu ngun l 16 bit th ly DX:AX chia cho ngun. Thng s t trong AX, s d t trong DX. V d: MOV AX, 9520 MOV BL, 100 DIV BL (Sau 3 lnh ny AL = 95 v AH = 20 v 9520 : 100 = 95 v d 20).
11.
-
Gio trnh Assembler Trong hnh trn, gi s ton hng ch l 8bit th lnh SHL ch, 1 lm bt th 7 dch sang bit CF (c), bt 6 chuyn sang bit7, bt5 sang bit6, bit0 qua bit1 v s 0 vo bit0. - SHR (logical shift right): dch phi logic. Lnh ny ging nh SHL nhng by gi dch phi. 7 0 6 Ton hng ch 0 CF
Trong hnh trn, gi s ton hng ch l 8bit th lnh SHR ch, 1 lm 0 vo bt7, bit7 sang bt 6, bit0 dch sang bit CF (c). - SAL (shift arithmetic left): dch tri s hc. Ging nh lnh SHL nhng bit0 c gi nguyn 7 CF 2 1 Ton hng ch 0
SAR (shift arithmetic right): dch phi s hc. Ging nh lnh SHL nhng bit cao nht c gi nguyn. 7 6 Ton hng ch 0 CF
ROL (rotate left): quay vng sang tri. ROL ch, 1 ; quay vng sang tri ton hng ch 1 bit (quay vng sang tri t 2 bit tr ln phi t s ln dch trong CL). ROL ch, CL ; dch tri ton hng s bit bng ni dung ca CL. 7 CF 2 1 Ton hng ch 0
ROR (rotate right): quay vng sang phi (ging nh quay vng sang tri nhng by gi sang phi). ROR ch, 1 ROL ch, CL RCL (rotate through carry left): quay vng qua bit s gi sang tri, ging nh lnh ROL nhng c s tham gia ca bit s gi. 7 CF 2 1 Ton hng ch 0
Ch bin V Thanh n
Trang 12
RCR (rotate through carry right): quay vng qua bit s gi sang phi, ging nh lnh RCL nhng sang phi.
12.
-
13.
-
Gio trnh Assembler SCASW (scan string word): qut chui tng 16 bit. LODSB (load string byte): np chui tng byte mt. LODSW (load string word): np chui tng 16 bit. STOSB (store string byte): lu chui tng byte mt. STOSW (store string word): lu chui tng 16 bit. Cch dng cc lnh ging nhau v thng phi qua cc bc sau: Bc 1: Xc nh chiu x l chui. DF = 0: chui x l theo chiu a ch tng. DF = 1: chui x l theo chiu a ch gim. Bc 2: S lng phn t cn x l c np vo thanh ghi m CX. Bc 3: a a ch ca chui vo ng v tr. a ch chui ngun a vo DS:SI. a ch chui ch a vo ES:DI. Bc 4: Chn mt vng lp thch hp REP, REPE, REPNE. Lnh REP (repeat: lp li): lp li lnh theo sau n n khi CX=0. Lnh REPE (repeat if equal: lp li nu bng nhau): lp li lnh theo sau n nu ZF=1. Lnh REPNE (repeat if not equal: lp li nu khng bng nhau): lp li lnh theo sau n nu ZF=0. Bc 5: t lnh x l chui thch hp. V d 1: Chuyn 100 byte t nh ngun n nh ch. ;DF=0, SI v DI t ng tng 1 sau mi ln lp, ;lnh ny c gii thiu phn di. LEA SI, ngun LEA DI, ch MOV CX, 50 MOVSW ; T ng chuyn 100 byte. CLD CLD ;DF=0, mun DF=1 ta dng lnh STD. PUSH DS PUSH ES MOV SI, 7000H MOV DI, F000H MOV CX, 10 CMPSB JNZ NOTEQ ;NOTEQ l mt nhn chng trnh s nhy ;ti nu xut hin 2 byte khng ging nhau. CLD MOV CX, 100 Ch bin V Thanh n ;DF=0, mun DF=1 ta dng lnh STD.
REP
REPE
Trang 14
LEA DI, chui MOV AL, 'A' REPNE SCASB JCXZ NOTE
;so snh mi byte ca chui vi k t 'A'. ;NOTE l mt nhn chng trnh s nhy ;ti nu khng tm thy 'A'. ;(jump if CX equal zero)
14.
-
Cc lnh khc
CLC (clear carry flag): xa c zero - CF. CLD (clear direction flag): xa c hng - DF. CLD (clear interrupt flag): xa c ngt - IF. CMC (complement carry flag): i ngc c CF. HLT (halt): dng, CPU ngng hot ng. INT (interrupt): gi ngt. IRET (return from interrupt): tr v chng trnh chnh t chng trnh phc v ngt. LOCK: kho bus h thng. NOP (no operation): khng c tc v. WAIT: i cho n khi c xung chn TEST ca CPU 8086.
2. nh v trc tip
a ch ca ton hng ( nh trong) nm ngay sau m tc v ca lnh. VarI DB 25H MOV AL, VarI ;a s 25H a ch ca VarI vo AL.
3. nh v thanh ghi
nh v thanh ghi ton hng nm trn thanh ghi. nh v trc tip thanh ghi. ADD AL, BL ;cng 2 thanh ghi AL v BL t kt qu trong AL. nh v gin tip thanh ghi. ADD AL, [BX] ;di chuyn s liu a ch m BX tr ti trong on DS vo thanh ghi AL. 99 di cha trong BX im bt u ca on DS
Trang 15
4. nh v nn
a ch ton hng l tng di v thanh ghi nn BX hay BP. MOV AL, [BX + 20H] Di chuyn s liu nm nh BX+20H trong on DS vo thanh ghi AL.
5. nh v ch s
a ch ca ton hng l tng di v thanh ghi ch s SI hay DI. MOV AL, [SI + 100H] Di chuyn s liu nm nh SI+100H trong on DS vo thanh ghi AL.
6. nh v ch s v nn
a ch ca ton hng l tng di vi thanh ghi ch s v thanh ghi nn. MOV AL, [BX + SI + 50H] Di chuyn s liu nm nh BX + SI + 50H trong on DS vo thanh ghi AL.
7. nh v chui
Trong nh v ny ta dng cc lnh mnh x l chui ca 8086 (MOVSB, SCASB,) dng thanh ghi SI tr ti a ch ngun trong on DS v thanh ghi DI tr ti a ch ch trong on ES. Sau mi ln thc hin lnh, thanh ghi SI v DI t ng tng (hoc gim) 1 n v - do ta qui nh c hng DF. MOVSB Lnh ny di chuyn 1 byte t v tr nh K n v tr nh H. Sau SI v DI t ng tng ln 1 n v (nu DF = 0) ch ti nh k .
nh H
di cha trong DI
im bt u ca on ES nh K
di cha trong SI
im bt u ca on DS
8. nh v ca vo ra
Nu a ch ca vo ra nm trong khong t 0 n FFH, ta c th dng php nh v trc tip. IN AL, 0F8H ;0F8H l a ch ca cng vo ra. Nu a ch ca vo ra ln hn FFH, ta c th dng php nh v gin tip thanh ghi. MOV DX, 3F8H ;3F8H l a ch ca cng vo ra. IN AL, DX
Ch bin V Thanh n
Trang 16
Chng 2 HP NG
p ng (Assembler) l chng trnh dch ra m my mt chng trnh gc vit bng t gi nh (mnemonic) ca cc lnh m my. Lc u, cc chng trnh hp ng ch lm vic n thun t nhng t gi nh sang m my, nhng dn dn cc chng trnh hp ng cho php dng cc nhn, cc k hiu bin i dng lnh, phn phi b nh, vit cc macro nhm gip cho ngi lp trnh vit cc chng trnh hp ng d dng hn. Sau y, chng ta s cp n cc c tnh tng qut ca hp ng trc khi nghin cu hp ng MASM dng cho m my.
I.
V d: BATDAU: MOV DX, 3F8H ;3F8H l cng vo ra ni tip. Cc vng c sp xp trn mt hng lnh v phn cch nhau bng du chm (:) hoc du phy (,) hoc chm phy (;) tu theo lnh ca hp ng. a. Cu trc tng qut vng tn (name) Vng tn cho php gn tn cho mt a ch hay mt d liu, lc ta c th dng tn ny thay th cho a ch hay d liu trn. Mi tn ch xut hin mt ln trong chng trnh. b. Cu trc tng qut t gi nh m lnh y l vng duy nht khng th thiu ca hng lnh. Vng ny c th cha mt t gi nh m lnh hoc mt lnh gi. Khi gp mt t gi nh m lnh, hp ng s dch n sang m my. Khi gp mt lnh gi (cn gi l hng dn: directives) th hp ng khng dch thnh m nh phn v cc lnh gi ch gip cho hp ng nh ngha k hiu, phn phi b nh, to bng d liu Thng thng, cc chng trnh hp ng thng c cc lnh gi ch yu sau: - ORG (origin: im gc): Cho bit im bt u ca mt on chng trnh hay mt on d liu no . - EQU (equate: bng nhau) hay DEFINE (define: nh ngha): Cho php t tn mt d liu no . - DS (define storage: nh ngha vng lu tr s liu) hay RM (reserve memory: dnh vng nh): Cho php dnh vng nh, lu tr s liu. Cc lnh gi DATA, DB (define byte), DW (define word) cng cho php dnh vng nh. - END: Cho bit chm dt chng trnh. c. Cu trc tng qut vng ton hng Cha cc ton hng m lnh m my cn. Trang 17
Gio trnh Assembler d. Cu trc tng qut vng ch thch C th c hoc khng, vng ny dnh cho ngi lp trnh ghi cc ghi ch, gii thch v cu lnh.
3. Tn trong hp ng MASM
Trong hp ng MASM, tn c th l nhn, bin, k hiu. Tn c chiu di l 31 k t v phi bt u l ch. - Nhn: Dng nh du mt a ch m cc lnh nh JUMP, CALL, LOOP cn n. N cng c dng n cho cc lnh gi LABEL hoc PROC hoc EXTRN. V d: NH: MOV AX, DX ;NH l nhn nh du a ch nh. FOO LABEL NEAR ;t tn cho a ch nh theo sau lnh gi. CTCON PROC FAR ;a ch bt u ca chng trnh con. EXTRN NH FAR ;cho bit NH nm ngoi chng trnh gc. - Bin: Dng lm ton hng cho cc lnh hoc cc biu thc. Bin tng trng cho a ch ni c gi tr m ta cn. V d: TWO DB 2 ;bin TWO c gi tr l 2.
Trang 19
Gio trnh Assembler K hiu: l mt tn c nh ngha thay cho biu thc, mt t gi nh lnh. K hiu c th dng lm ton hng trong biu thc, trong lnh hay trong lnh gi. V d: FOO EQU 7H TOTO = 0FH
4. T gi nh m lnh
a. Gii thiu T gi nh m lnh d c hc chng I v tp lnh b x l 8086 nn sau y chng ta ch nghin cu mt s lnh gi thng dng ca MASM. Lnh gi cn gi l lnh hng dn (directive) dng hng dn chng trnh dch hp ng v vic vo ra, v t chc b nh, v dch chng trnh vi iu kin, v iu khin in danh sch v i chiu cho, v cc nh ngha. Lnh gi c chia thnh 4 nhm v c trnh by di y. b. Nhm lnh gi lin quan n b nh - ASSUME: Lnh ny cho bit mt on no thuc loi g? V d: ASSUME DS: DATA, CS: CODE dng bo cho hp ng bit on c tn DATA l on DS v on c tn CODE l on CS. ASSUME NOTHING bo cho hp ng bit rng khng c tn on no c cho bit loi v nh vy mi ln lin h n mt nhn, bin th ta phi bo cho bit on ca chng (v d DS: NHAN cho bit NHAN thuc on DS). - COMMENT: Lnh ny cho ta ghi ch. V d: COMMENT *Day la ghi chu* (du * l k t gii hn). Cc lnh dng nh ngha bin, khi ng vng nh cho bin: - DB (define byte: nh ngha byte): dnh nh trong cha tng byte. - DW (define word: nh ngha t - 16bit): dnh nh trong cha tng t - mi t tng ng 2 byte. - DD (define double word: nh ngha tng i t): dnh nh trong cha tng i t - 4 byte. - DQ (define qualword: nh ngha tng 4 t): dnh nh trong cha tng 4 t - 8 byte. - DT (define ten byte: nh ngha 10 byte): dnh nh trong cha tng 10 byte. Ta xem cc v dv phn gii thch sau: MOTCHU DB A ;dnh mt v tr nh ch s 65. ARRAY DB 1, 2, 3, 4 ;nh ngha 4 v tr nh cha 1, 2, 3, 4. MES DB CHAO BAN! ;dnh 9 nh cha chui CHAO BAN!. BUF DB 10 DUP(?) ;dnh 10 nh m khng khi ng cc ;nh ngha l cc nh cha bt k s ;no. BUF 100 DUP(A) ;dnh 100 nh cha ton ch A. Ch bin V Thanh n Trang 20
BSIZE DW 4*128 ;dnh 2 nh cha s 512. END: chm dt chng trnh gc. EQU (equate: bng): gn tr cho tn. Ta dng lnh EQU gn tr cho tn mt ln, mun gn i li nhiu ln ta dung lnh = (bng). V d: FOO EQU 2*10 ;gn tr 20 vo FOO. Du = (bng): lnh ny ging nh EQU nhng cho php ta gn li nhiu ln. EVENT (chn): lm cho thanh ghi m chng trnh PC c ni dung l mt s chn. EXTRN (external: bn ngoi): cho bit mt tn hay mt k hiu c nh ngha bn ngoi trong mt modul khc vi modul chng trnh hin ti. V d: EXTRN TAGN: NEAR, SO: WORD TAGN l mt nhn gn (2 byte), SO l mt t my tnh nm ngoi modul hin ti. GROUP (nhm): gom cc on c tn khc nhau gn chng mt tn mi. V d: NHOM123 GROUP NHOM1, NHOM2, NHOM3 NHOM1, NHOM2, NHOM3 l tn 3 on khc nhau, chng c gom li c tn l NHOM123. INCLUDE (bao gm): Cho php xen thm mt tp tin hp ng vo tp tin hp ng hin hnh. V d: INCLUDE C:\THEM.ASM Ni dung tp tin THEM.ASM trn a C:\ c xen vo to tin hin hnh ngay lnh gi INCLUDE. LABEL (nhn): Cho php nh du mt a ch l a ch ca lnh hay s liu k . V d: NHF LABEL FAR ;nhn xa, nh du v tr NH. NH: MOV AX, DATA ;nhn gn. MOV DS, AX CHB LABEL BYTE ;nh du v tr CH c th ly tng byte. CH DW 100 DUP(0) ;chui tng t. NAME (tn): t tn cho mt modul hp ng. V d: NAME CURSR ;t tn cho modul l CURSR.
Trang 21
Gio trnh Assembler ORG (origin: im gc): n nh a ch cho on chng trnh vit sau lnh gi ORG. V d: ORG 100H MOV AX, Code PROC (procedure: th tc): Gn mt tn cho chng trnh con. V d: CTCON PROC NEAR MOV AX, CODE RET CTCON ENDP PUBLIC (public: cng cng): Dng khai bo k hiu trong modul hin hnh m cc modul khc c th s dng. V d: PUBLIC FOO, NH, TOTO RADIX: Cho php i c s, c s mc nhin l 10. V d: MOV BX, 0FFH ;tng ng vi RADIX 16. RECORD (mu tin): Cho php nh ngha mu tin. V d: FOO RECORD CAO: 7, VUA: 3, THAP: 4 Vy FOO c chiu di 16bit, 4bit thp nht c tn l THAP, 3bit k c tn VUA, 7bit k c tn l CAO. Cn 2 bt cha c nh ngha. STRUC (structure: cu trc): Ging nh lnh RECORD, ch khc l cc vng bn trong l byte. SEGMENT: Cho php nh ngha on. <Tn> SEGMENT [align] [combine] [class] <Tn> ENDS Vng [align] xc nh on bt u nh sau: Byte: on c th bt u a ch bt k. Word: on phi bt u a ch chn. Para: on phi bt u vi a ch l bi ca 16. Page: on phi bt u vi a ch l bi ca 256. Vng [combine] xc nh on kt hp vi phn on khc nh sau: Public: Cc on cng tn v cng class c ghp ni vi nhau khi lin kt. Trang 22
Ch bin V Thanh n
Common: Cc on cng tn v cng class c ph lp ln nhau khi lin kt. AT(biu thc): on c t ti mt a ch l bi ca 16 v c ghi trong biu thc. STACK: Ging nh Public, tuy nhin con tr ngn xp SP ch vo a ch u tin ca ngn xp u tin. Private hoc khng g ht cho vng combine th cc on cng tn v cng class khng c ghp vo nhau. c. Nhm lnh gi v dch (complie) c iu kin Cc lnh gi v dch c iu kin nhm bo cho hp ng dch hay khng dch mt nhm lnh no nu mt iu kin no c tha. IF [i s] [ELSE] ENDIF IF [i s] c cc hnh thc sau: - IFE <biu thc>: nu biu thc tnh ra bng 0 th on chng trnh IFE c dch, nu biu thc tnh ra khc 0 th on chng trnh sau lnh gi ELSE c dch (nu c lnh gi ELSE). - IF1: Nu hp ng ang dch ln 1 th on chng trnh sau IF1 c dch. - IF2: Nu hp ng ang dch ln 2 th on chng trnh sau IF2 c dch. - IFDEF <k hiu>: Nu k hiu khng c nh ngha th dch chng trnh sau IFDEF. - IFB <i s>: Nu i s l khong trng hoc khng c i s th dch on chng trnh sau IFB. - IFNB <i s>: Nu c i s th dch on chng trnh sau IFNB. - IFIDN <i s 1>, <i s 2>: Nu <i s 1> bng <i s 2> th on chng trnh sau IFIDN c dch. - IFDIF <i s 1>, <i s 2>: Nu <i s 1> khc <i s 2> th on chng trnh sau IFIDF c dch. - ENDIF: nh du ht on chng trnh sau IF . d. Nhm lnh gi v MACRO Lnh gi MACRO gip ta vit mt on chng trnh m ta c th xen vo bt c ni no trong chng trnh hp ng bng cch vit tn MACRO m ta mun gi.
Trang 23
Gio trnh Assembler Ta nh ngha mt MACRO nh sau: <Tn> MACRO [tham s] ENDM ;chm dt MACRO V d: Ta vit MACRO c tn l TEST nh sau: TEST MACRO X, Y, Z MOV AX, X MOV BX, Y MOV CX, Z ENDM Nh vy, trong mt chng trnh no ta gi TEST nh sau: TEST 10, 20, 30 Th cu lnh tng ng nh sau: MOV AX, 10 MOV BX, 20 MOV CX, 30 Bn trong MACRO ta c th dng cc lnh gi LOCAL, EXITM. Lnh EXITM dng thot khi MACRO trc khi c lnh chm dt MACRO. Lnh gi LOCAL cng c th dng bn trong MACRO, lnh ny gip ta nh ngha cc nhn trong MACRO m ta mun gi nhiu ln. V d: Ta thit k hm WAIT nh sau: WAIT MACRO count MOV CX, count NEXT: LOOP NEXT ENDM MACRO WAIT ch c th gi duy nht mt ln v nhn NEXT ch xut hin trong chng trnh 1 ln. Mun c th gi lnh WAIT nhiu ln, ta thit k li lnh WAIT nh sau: WAIT MACRO count LOCAL NEXT MOV CX, count NEXT: LOOP NEXT ENDM e. Nhm lnh gi v lit k (listing) Nhm ny dng iu khin lit k ln my in, xem cc ta u trang. - PAGE s hng, s ct V d: PAGE 58, 60 ;mi trang lit k c 58 hng v 60 ct. - TITLE ( ta): Cho php t ta. V d: TITLE Chuong Trinh Hop Ngu Ch bin V Thanh n Trang 24
SUBTTL (subtitle: ta con): Cho php lit k ta con mi u trang. % OUT <vn bn>: Vn bn c lit k khi hp ng dch chng trnh. XLIST: Khng cho lit k. XALL: Lit k m do MACRO to nn. LALL: Lit k ton b MACRO. SALL: Khng lit k MACRO. CREF: Cho lit k bng i chiu cho. XCREF: Khng cho php lit k bng i chiu cho.
f. Nhm lnh gi v ton hng v ton t C 3 loi ton hng: tc th, thanh ghi v nh. - Ton hng tc th c th l mt s hoc mt k hiu c gn mt s bng cc lnh gi EQU v du = (bng). V d: SL EQU 15 MOV CL, SL MOV AL, 20 - Ton hng nh tng trng mt a ch nh. N lun lun l di i vi mt a ch bt u ca on tng ng V d: FOO DW 0FEFEH MOV AX, FOO ;FOO l a ch ca s liu. MOV FOO, AX FOO+5, FOO[5], 5[FOO] l tng ng nhau v ch n a FOO cng 5. 5 [BX] [SI], [BX+5][SI], [BX] 5 [SI] l tng ng vi [BX+SI+5] trong nh dng nn + ch s. Cc ton t c th chia lm 4 loi: ton t thuc tnh (attribute), ton t s hc, ton t quan h (relational), ton t logic. i. Ton t thuc tnh - PTR (pointer: con tr): Dng thay i kiu ca cc a ch. V d: CALL Word PTR [BX+SI] [BX+SI] tr ti mt byte trong nh nhng ta mun ly 2 byte bt u ca chng trnh con nn ta dng WORD PTR. - Du : (hai chm): Dng thay i on mc nhin. V d: MOV AX, ES:[BX+SI] [BX+SI] tr ti s liu trong DS nhng ta mun ly trong on ES nn vit ES:[BX+SI]. - SHORT: Dng thay i kiu mc nhin l NEAR ca lnh JMP v bo cho hp ng bit ch nhy trong vng 128 n +127 so vi v tr lnh nhy JMP. Trang 25
Gio trnh Assembler THIS: To mt ton hng c gi tr tu thuc vo tham s ca THIS. V d: NH EQU THIS BYTE tng ng vi NH LABEL BYTE. SCH = THIS NEAR tng ng vi SCH LABEL NEAR. SEG: Cho ta gi tr ca on, ca mt nhn hay bin. V d: MOV AX, SEG TENB a vo AX gi tr ca on cha TENB. OFFSET: Cho di ca mt nhn hay bin. V d: MOV DX, OFFSET TENCHUOI a vo DX di ca bin TENCHUOI, lnh gi tng ng vi lnh gi ny l LEA DX, TENCHUOI. TYPE <bin>: Cho bit s byte m loi bin chim (BYTE=1, WORD=2, DWORD=4,). V d: MOV AX, (TYPE NH) PTR [BX+SI] Vi NH l mt nhn. LENGTH: Cho bit s phn t ca mt bin. V d: FOO DW 100 DUP(?) MOV CX, LENGTH FOO ;CX cha 100. SIZE: Cho bit s byte ca mt bin. V d: FOO DW 100 DUP(?) MOV CX, SIZE FOO ;CX cha 200.
Ton t s hc Cc ton t thng dng nh: + (cng), (tr), * (nhn), / (chia). Du tr ng trc mt s ch l s m. MOD: Chia ly s d. V d: MOV AX, 13 MOD 4 ;AX cha s 1. - SHR (shift right): dch phi. V d: MOV AX, 00011000B SHR 3 ;AX cha s 00000011B. - SHL (shift left): dch tri. V d: MOV AX, 00011000 SHL 3 ;AX cha s 11000000B. ii. iii. Ton t quan h Ton t quan h dng trong so snh hai s hng v thng c dng trong vic dch chng trnh c iu kin. - EQ (<ton hng 1> EQ <ton hng 2>): Nu ton hng 1 bng ton hng 2 th biu thc cho gi tr ng (true). - NE (not equal: khng bng nhau): Tr v TRUE nu 2 ton hng khng bng nhau. Ch bin V Thanh n Trang 26
LT (less than: nh hn): Tr v true nu ton hng bn tri LT nh hn ton hng bn phi LT. LE (less than or equal: nh hn hoc bng nhau): Ging nh LT nhng thm iu kin bng nhau. GT (greater than: ln hn): Tr v true nu ton hng bn tri LT ln hn ton hng bn phi LT. GE (greater than or equal: ln hn hoc bng nhau): Ging nh GT nhng thm iu kin bng nhau.
iv. Ton t logic Ton t logic so snh hai ton hng tng bit mt. - NOT: Tr v true nu ton hng bn tri v bn phi khc nhau. - AND: Tr v true nu c 2 ton hng u l true. - OR: Tr v true khi mt trong hai (hoc c hai) ton hng l true. - XOR: Tr v true khi hai ton hng khc nhau (ton hng true, ton hng cn li false).
Trang 27
Gio trnh Assembler Hm 1: i c mt k t t bn phm v in ra mn hnh. Khi mt phm c n th k t tng ng trong phm c lu trong thanh ghi AL. Nu phm c n l phm c bit th AL=0. Dng t hp phm CONTROL BREAK kt thc cng vic ny. Hm 2: a mt k t ra mn hnh. K t cn a ra mn hnh cha trong DL. Hm 3: c vo t cng ni tip. K t c cha trong AL. Hm 4: a k t trong DL ra cng ni tip. Hm 5: a k t trong DL ra my in. Hm 6: Hm ny c th thc hin c vo ln ra. Mun nhp, ta cho DL = FFH. Sau khi thc hin hm 6, nu c ZF = 0 th AL cha k t mi nhp vo, nu c ZF = 1 th khng c k t no c nhp vo. Nu DL cha 1 s khc FFH th k t cha trong DL c a ra mn hnh. Hm 7: Ging hm 1 nhng n khng in ra mn hnh k t va nhp vo, khng th dng CONTROL BREAK kt thc. Hm 8: Ging hm 1 nhng n khng in ra mn hnh k t va nhp ra mn hnh. Hm 9: a ra mn hnh chui k t t trong DS:DX (ngha l chui k t nm trong on DS v di ca n nm trong DX). Lu , chui k t phi kt thc bng du $. Hm 0AH: c vo vng m bn phm. Trc khi dng hm ny ta phi to ra mt vng m trong b nh. Byte u tin ca xc nh s k t ti a c th nhp vo, byte th 2 cho DOS ghi s k t thc s m ngi dng nhp vo. Cc byte k tip cha cc k t s nhp. a ch vng n t trong DS:DX. Hm 0BH: Cho trng thi bn phm. Sau khi thc hin hm nu AL=0 th khng c k t no ang i, nu AL khc 0 th c mt k t ang i CPU c vo. Tip theo hm 0BH l mt s hm thc hin cng vic FCB (file control block) li thi nn khng cn ni n. Thay vo ta dng cc hm tng ng l th tp tin (file handle). Hm 25H: i vect ngt, ta t trong DS:DX gi tr mi ca a ch vect ngt, trong AL ta s ca ngt. Hm 30H: Ly n bn (version) ca DOS. Sau khi thc hin hm ny th AL cha phn chnh, AH cha phn ph ca n bn. Hm 31H: Kt thc v li thng tr. Hm ny ging ngt INT 27H. Ta t trong thanh ghi DX s paraghaph (16 bytes) ca phn tp tin mun gi thng tr. Hm 35H: Ly gi tr ca vect ngt. Ta trong AL s ca ngt. Sau khi thc hin hm ny th ES:BX cha a ch ca vect ngt. Trang 28
Ch bin V Thanh n
Hm 3CH: To tp tin mi. Cp thanh ghi DS:DX tr ti tn ca tp tin mi. Cui chui ta phi c s 0. CX cha thuc tnh ca tp tin nh sau: 0 - bnh thng, 1 - ch c, 2 - n, 4 tp tin h thng. Sau khi thc hin th th tp tin c cha trong AX. Ta phi gi n li v mi ln truy xut tp tin ta phi cn th tp tin. Hm 3DH: M 1 tp tin c trn a. Cp thanh ghi DS:DX tr ti tn tp tin (c 0 cui chui tn). Ta t trong AL kiu truy cp ca tp tin nh sau: 0-ch c, 1-ch ghi, 2-c v ghi. Th tp tin nm trong AX. Hm 3EH: ng tp tin. Th tp tin c ng nm trong BX. Hm 3FH: c t tp tin hoc thit b, cp thanh ghi DS:DX tr n vng b nh m d liu s chuyn ti. BX cha th tp tin. Trc khi c phi m tp tin v CX cha s byte cn c. Sau khi thc hin hm th AX cha s byte c vo. Ta cng c th dng hm ny gn th cho ngoi vi v DOS cng gn th cho ngoi vi. Hm 40H: Ghi ln tp tin hoc thit b, trc ht phi m tp tin. DS:DX tr n vng cha d liu trong b nh. BX cha th tp tin. CX cha s byte cn ghi ln a. C th dng hm ny gi d liu ra ngoi vi. Hm 41H: Xo tp tin trn a. DS:DX cha n tn tp tin mun xo, ta khng th xo tp tin ang m hoc tp tin c thuc tnh ch c. Hm 43H: c hoc thay i thuc tnh tp tin. c thuc tnh: t AL = 0 DS:DX tr n tn tp tin. Sau khi thc hin hm, thuc tnh nm trong CX. i thuc tnh: t AL = 1 CX cha thuc tnh mi. DS:DX tr n tn tp tin. Hm 4CH: Kt thc chng trnh v tr v DOS (c 2 loi tp tin c ui .COM v .EXE). Hm 56H: i tn tp tin. DS:DX tr ti tn c. ES:DI tr ti tn mi.
Gio trnh Assembler PAGE 60, 132 TITLE (Tiu v tr ny) (Cc pht biu EXTRN hay PUBLIC nu c) MCR MACRO (vit macro) ENDM STACK SEGMENT PARA STACK STACK DB 64 DUP(?) STACK ENDS DSEG SEGMENT PARA PUBLIC DATA (dnh nh cho d liu y) DSEG ENDS CSEG SEMENT PARA PUBLIC CODE ASSUME CS: CSEG, DS: DSEG BATDAU: MOV AX, DSEG MOV DS, AX (chng trnh chnh) CTC PROC NEAR (vit chng trnh con) CTC ENDP CSEG ENDS END BATDAU ;Chm dt chng trnh v chn a ch bt u ca ;chng trnh l BATDAU
(program segment prefix). V th a ch bt u ca tp tin COM l t di 100H. Tt cc cc thanh ghi on u phi ch dn PSP. Dng in hnh ca tp tin COM nh sau: V d chng trnh gc HELLO.ASM
CSEG SEGMENT ASSUME CS: CSEG, DS: DSEG, ES: CSEG, SS: CSEG ORG 100H BATDAU: MOV AX, DSEG MOV DS, AX MOV AH, 09H MOV DS, offset Mess INT 21H INT 20H Mess BD Hello!$ CSEG ENDS END BATDAU
c. c im ca tp tin ui EXE - Chng trnh ln v nm nhiu on khc nhau. - C th gi cc chng trnh con dng Far. - Kch thc tp tin tu . - C Header u tp tin cha cc thng tin cn thit cho tp tin EXE. Tp tin EXE khng dng lnh ORG 100H u chng trnh. - Dng in hnh ca tp tin EXE nh sau: V d chng trnh gc HELLO.ASM
DULIEU SEGMENT THONGBAO DB 'HELLO!$' DULIEU ENDS MALENH SEGMENT ASSUME CS: MALENH, DS: DULIEU BATDAU: MOV AX, DULIEU MOV DS, AX MOV DX, Offset THONGBAO MOV AH, 09H INT 21H MOV AH, 4CH INT 21H MALENH ENDS
Trang 31
d. Cc bc bin dch chng trnh trong hp ng MASM - Dng mt chng trnh son tho (Notepad chn hn) son tho m ngun v lu li tn tp tin c phn m rng l ASM. V d Hello.asm. - Dng hp ng MASM dch Hello.asm thnh chng trnh ch Hello.obj. Nh trn, ta nh lnh: Masm Hello; (lu c du ; sau lnh bin dch). - Dng chng trnh LINK bin Hello.obj thnh chng trnh thi hnh c: Hello.exe. Nh trn, ta nh tip lnh: Link Hello; (lu c du ; sau lnh bin dch). Lc ny trn a c chng trnh Hello.exe ta c th thc thi chng trnh ny t DOS bng cch nh vo tn chng trh vo n phm Enter. Nh trn ta nh: Hello - Cho tp tin c ui COM th ngoi 2 lnh trn ta phi dng lnh ngoi tr ca DOS l EXE2BIN bin i EXE thnh COM. Nh trn ta nh: Exe2Bin Hello.exe Hello.com
Ch bin V Thanh n
Trang 32
Mc lc
Chng 1 T CHC B X L INTEL 8086 .............................................................1 I. B X L (CPU) INTEL 8086 .........................................................................1 1. T chc tng qut ............................................................................................1 2. Cc thanh ghi ca 8086 ...................................................................................2 3. T chc b nh trong ......................................................................................3 4. S phn on trong b nh trong ....................................................................3 5. a ch cc ngoi vi .........................................................................................4 6. Cc chn ca vi mch 8086 .............................................................................4 II. CC LNH THNG DNG CA CPU 8086 ...............................................6 1. Gii thiu .........................................................................................................6 2. Nhm di chuyn s liu ...................................................................................6 3. Nhm lnh chuyn a ch ...............................................................................7 4. Nhm lnh chuyn c hiu (thanh ghi trng thi) ...........................................7 5. Nhm lnh vo ra ngoi vi ..............................................................................8 6. Nhm lnh iu khin .....................................................................................8 7. Nhm lnh so snh ..........................................................................................8 8. Nhm lnh vng lp ........................................................................................9 9. Nhm lnh gi chng trnh con .....................................................................9 10. Nhm lnh tnh ton s hc .......................................................................10 11. Nhm lnh dch chuyn v quay ...............................................................11 12. Nhm lnh logic ........................................................................................13 13. Nhm lnh x l chui ..............................................................................13 14. Cc lnh khc ............................................................................................15 III. CC KIU NH V CA CPU 8086 .........................................................15 1. nh v tc th ................................................................................................15 2. nh v trc tip .............................................................................................15 3. nh v thanh ghi ...........................................................................................15 4. nh v nn ....................................................................................................16 5. nh v ch s.................................................................................................16 6. nh v ch s v nn .....................................................................................16 7. nh v chui .................................................................................................16 8. nh v ca vo ra .........................................................................................16 Chng 2 HP NG ....................................................................................................17 I. C TNH TNG QUT CA HP NG ...................................................17 1. Cu trc tng qut ca mt lnh hp ng .....................................................17 2. Cu trc tng qut ca Macro .......................................................................18 3. Cu trc tng qut ca chng trnh con ......................................................18 4. Cu trc tng qut ca bin ton cc (global), bin a phng (local) .......18 5. Cu trc tng qut ca cc bng, thng bo m hp ng cung cp cho ngi s dng ..................................................................................................................18 6. Cu trc tng qut ca hp ng cho (cross assembler) ...............................19 II. HP NG MASM - DNG CHO CPU 8086 ..................................................19 1. Gii thiu hp ng MASM ...........................................................................19 2. Cu trc ca mt hng lnh hp ng MASM ...............................................19 3. Tn trong hp ng MASM ............................................................................19 Trang 33
Gio trnh Assembler 4. III. 1. 2. 3. 4. T gi nh m lnh ....................................................................................... 20 LP TRNH DNG HP NG MASM ..................................................... 27 Gii thiu ....................................................................................................... 27 Mt s ngt thng dng trong HH MS-DOS ........................................... 27 Cu trc mt chng trnh hp ng MASM ................................................. 29 Tp tin ui COM v tp tin ui EXE ........................................................ 30
Ch bin V Thanh n
Trang 34