Lap Trinh He Thong Va Dieu Khien Thiet Bi

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 147

HC VIN CNG NGH BU CHNH VIN THNG

LP TRNH H THNG V IU KHIN THIT B


(Dng cho sinh vin h o to i hc t xa) Lu hnh ni b

H NI - 2006

HC VIN CNG NGH BU CHNH VIN THNG

LP TRNH H THNG V IU KHIN THIT B

Bin son :

THS. PHM VN CNG

LI NI U
Cun gio trnh Lp trnh hp ng v iu khin thit b c chia thnh 4 chng. Mi chng bao gm cc ni dung c bn, tm tt chng, cc cu hi v bi tp cho mi chng. Chng 1: trnh by v vn lin quan n b vi x l 8088 : kin trc, chc nng cc thnh phn v tp lnh. Ngoi ra, 1 trong cc ngt c s dng ph bin trong lp trnh h thng- ngt 21h ca h iu hnh DOS cng c gii thiu trong chng ny. Chng 2: trnh by v cc vn lin quan n lp trnh hp ng: cch thc vit v thc hin mt chng trnh, cch thc ci t cc cu trc lp trnh trong hp ng v cc vn lin quan n chng trnh con v macro. Chng 3: gii thiu v cng c g ri debug, chng trnh m phng Emu 8086. Lin kt chng trnh vit bng hp ng vi chng trnh c vit bng cc ngn ng bc cao nh C v Pascal cng c cp chng ny. Ngoi ra, chng ny c gii thiu v mt s ngt ca BIOS phc v thit b ngoi vi, chng trnh thng tr v chng trnh con ngt. Chng 4: Trnh by v lp trnh phi ghp: lp trnh modem, bn phm v mn hnh. ng thi chng ny cng gii thiu v mt mi trng RadASM pht trin cc ng dng vit bng hp ng trn Windows. Do thi gian c hn v kinh nghim cn hn ch, cun gio trnh s khng trnh khi cc sai st. Tc gi bin son rt mong nhn c kin ng gp t cc c gi. Mi kin gp xin gi v email : pcuongcntt@yahoo.com Xin chn thnh cm n! H Ni, thng 11/2006 Tc gi

Chng 1: Gii thiu

CHNG 1: GII THIU


1.1 CU TRC B VI X L
Phn ny trnh by kin trc bn trong ca b Vi x l 8088 v b Vi x l Pentium IV

1.1.1 S kin trc b Vi x l 8088

Hnh 1.1: Kin trc bn trong ca b Vi x l 8088

B vi x l 8088 c chia lm 2 khi chnh: Khi giao din bus (BIU) v khi thc hin lnh (EU). Cc thnh phn bn trong ca CPU giao tip vi nhau thng qua cc bus trong. Gia khi giao din bus v khi thc hin lnh c lin h vi nhau thng qua hng i d liu v h thng bus trong. 3

Chng 1: Gii thiu

1.1.2 Chc nng cc thnh phn


1. Thnh phn iu khin Bus (Bus Control Logic) iu khin cc loi tn hiu trn cc bus bao gm: cc tn hiu trn bus a ch (20 bit), cc tn hiu trn bus d liu (8 bit) v cc tn hiu trn bus iu khin. Ngoi ra, thnh phn ny cn lm nhim v h tr giao tip gia h thng bus trong v bus ngoi. H thng bus ngoi l h thng bus kt ni gia cc thnh phn ca h vi x l vi nhau: CPU, B nh trong v Thit b vo/ra. 2. Hng i lnh (Prefetch Queue) Cha m lnh ch c x l. Hng i lnh c kch thc 4 byte i vi 8088 v 6 byte i vi 8086. S d c iu ny l v hng i lnh phi c kch thc c th cha c t nht mt lnh c di bt k (di nht) ca b vi x l. M tp lnh ca 8086 cha cc lnh c di t 1-6 byte. Hng i lnh lm vic theo c ch FIFO (First In First Out), ngha l lnh no c a vo hng i lnh trc s c x l trc 3. Khi iu khin (Control Unit) Khi iu khin c hai chc nng chnh: gii m lnh v to xung iu khin . u vo ca khi iu khin l m lnh c c t hng i lnh v u ra l cc xung iu khin gi n cc b phn khc nhau bn trong b vi x l. Qu trnh ny c thc hin nh hai mch gii m lnh v mch to xung. 4. Khi s hc v logic (Arithmetic Logic Unit) Khi s hc v logic c chc nng thc hin cc php tnh ton nh php cng, tr hay cc php logic nh AND, OR, NOT. u vo ALU l hai thanh ghi tm thi cha d liu ca cho php tnh c ly t bus d liu. Kt qu u ra ca ALU c a tr li bus d liu v phn nh vo thanh ghi c (flag register). 5. Cc thanh ghi on (Segment registers) Ta hy th xem on chng trnh c vit bng ngn ng C 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 chng trnh trn c 2 phn: phn khai bo v phn lnh ca chng trnh. Trong phn lnh c th c li gi chng trnh con. Nh vy thc hin c mt chng trnh (dng .EXE) th ngi ta cn t nht 3 on b nh (segment). on dnh cha d liu c khai bo, on cha m chng trnh, on ngn 4

Chng 1: Gii thiu xp phc v cho cc li gi chng trnh con. Mi on c kch thc 64KB. Khi chng trnh c thc hin, mi on b nh ny c tr bi cc thanh ghi on. l: - Thanh ghi on m CS (Code Segment): tr n on b nh cha m ca chng trnh. - Thanh ghi on d liu DS (Data Segment): tr n on b nh cha cc khai bo ca chng trnh. - Thanh ghi on ngn xp SS (Stack Segment): tr n on b nh dnh cho stack. - Ngoi ra, trong nhiu trng hp ngi ta s dng thm mt on d liu ph dng trong trng hp cc d liu cn khai bo vt qu kch thc cho php ca 1 on (cc khai bo mng, file). Khi thanh ghi on d liu ph ES (Extra Segment) s tr n on ny 6. Cc thanh ghi con tr v ch s (pointers and index registers) Cc thanh ghi con tr v ch s l cc thanh ghi 16 bit. Chng thng c lu a ch lch (offset) v kt hp vi thanh ghi on tng ng to thnh cp thanh ghi cha a ch xc nh ca m lnh, mc d liu, hoc mc d liu lu trong stack. Nh vo cp thanh ghi ny, ngi ta c th tnh ia ch vt l c th theo cng thc sau: a ch vt l = a ch on * 16 + a ch lch Di y l cc thanh ghi con tr v ch s: - Thanh ghi con tr lnh IP (Instruction Pointer): tr vo lnh k tip s c thc hin nm trong on m do con tr CS tr ti. a ch y ca lnh l CS:IP. - Thanh ghi con tr c s BP (Base Pointer): tr vo mt mc d liu nm trong on ngn xp SS. a ch y ca mc d liu l CS:IP. - Thanh ghi con tr ngn xp SP (Stack Pointer): tr vo nh hin thi ngn xp nm trong on ngn xp SS. a ch y ca nh ngn xp l SS:SP. - Thanh ghi ch s ngun SI (Source Index): tr vo mt mc d liu trong on DS. a ch y ca mc d liu l DS:SI. - Thanh ghi ch s ch DI (Destination Index): tr vo mt mc d liu trong on DS. a ch y ca mc d liu l DS:DI. 7. Cc thanh ghi a nng (Multi-purposed registers) B x l 8088 c 4 thanh ghi a nng 16 bit l: AX, BX, CX v DX. Cc thanh ghi ny cng c th c tch ra thnh 2 na gm 8 bt cao (na cao) gm bt th 8 n bt th 15 v 8 bt thp (na thp) gm cc bt th 0 n 7. Cc na thanh ghi ny c th c s dng mt cch c lp cha cc d liu 8 bt. l cc na thanh ghi: AH v AL, BH v BL, CH v CL, v DH v DL. Trong AH, BH, CH, DH la cc na cao cn AL,BL, CL, DL l cc na thp. Ngoi chc nng a nng, mi thanh ghi 16 bt thng c s dng trong cc tc v c bit, ging nh tn ca chng: - AX (Accumulator) thanh cha: cc kt qu ca cc php ton thng c lu vo thanh ghi ny. Ngoi ra, AX cn l ton hng n cho 1 s php ton nh nhn (AX l tha s) hoc chia (AX l s b chia). 5

Chng 1: Gii thiu - BX (Base) thanh ghi c s: thng c dng cha cc a ch c s. - CX (Count) b m: CX thng dung cha s ln lp trong trng hp dng lnh LOOP. Ngoi ra, CL cn cha s ln dch chuyn, quay tri, quay phi ca cc ton hng. - DX (Data) thanh ghi d liu: DX thng c cha a ch offset ca xu k t khi c cc thao tc nhp vo xu hoc in xu. DX (cng vi AX) cn tham gia cha kt qu ca php nhn cc s 16 bit hoc lm s b chia cho php chia cc s 16 bit. Ngoi ra, DX cn dng cha a ch ca cc cng vo/ra trong trng hp thc hin cc lnh IN hoc OUT. 8. Thanh ghi c (flag register) Thanh ghi c l thanh ghi lu tr trng thi ca CPU ti mi thi im. Thanh ghi c c 16 bt, trong c 7 bt d tr cho tng lai (CPU 8088 cha dng n cc bt ny). Cn li 9 bt v mi bt tng ng l mt c. Kt hp cc lnh nhy c iu kin (conditional jump) vi cc c ny, ngi lp trnh d dng hn
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

OF DF IF TF SF ZF

AF

PF

CF

Hnh 1.2: Cu trc ca thanh ghi c ca CPU 8088. Cc bit c nh du x l cc c cha c dng n. - C CF (Carry Flag): c nh CF=1 khi c nh hoc tr c mn t bt c trng s cao nht (Most Significant Bit). Ngoi ra, c CF=1 trong trng hp khi thao tc vi file hoc th mc gy ra li nh cc li to, xa file v th mc. - C PF (Parity Flag): c chn l PF=1 khi tng s cc bt bng 1 trong kt qu ca php tnh l mt s chn. - C AF (Auxiliary Carry Flag): c nh ph AF =1 khi c nh t bt th 4 sang bt th 5 hoc c mn t bt 5 sang bt th 4 trong biu din BCD ca 1 s. - C ZF (Zero Flag): c Zero ZF=1 khi kt qu tnh ton bng 0. - C SF (Sign Flag): c du SF=1 khi kt qu tnh ton l mt s m. - C TF (Trap Flag): c by TF=1 khi CPU ang lm vic ch chy tng lnh. Ch ny c s dng cn thit khi tm li (defect) v g li (debug) chng trnh. - C IF (Interrupt enable Flag): c cho php ngt IF=1, cho php tc ng n yu cu ngt che c (maskable interrupts). - C DF (Direction Flag): c hng DF=1 khi CPU x l chui k t theo th t t phi sang tri. - C OF (Overflow Flag): c trn OF=1 khi kt qu l mt s b hai vt ra ngoi gii hn biu din dnh cho n. 9. H thng bus trong (Internal bus system) 6

Chng 1: Gii thiu H thng bus bn trong ca CPU 8088 bao gm 3 loi: - Bus d liu: 16 bt, cho php di chuyn 2 byte d liu ti mt thi im - Bus a ch: 20 bt, c th a ch ha c 220 bytes v v th khng gian a ch nh ca CPU 8088 l 1MB. - Bus iu khin: truyn ti cc tn hiu iu khin nh RD, WR

1.2 MT S CHC NNG CA NGT 21H


Phn ny trnh by cc hm thng dng ca ngt 21h. l cc hm thao tc vo/ra i vi k t, chui k t, file, th mc, kt thc chng trnh v tr li quyn iu khin cho H iu hnh DOS. Hm 01: c 1 k t (c hin) t bn phm Input: AH=01 Output: AL= m ASCII ca k t AL=0 nu g vo phm chc nng. Hm 02: hin 1 k t ln mn hnh Input: AH=02 DL= m ASCII ca k t cn hin th Output: Hm 08: c 1 k t (khng hin) t bn phm Input: AH=08 Output: AL= m ASCII ca k t AL=0 nu g vo phm chc nng. Hm 09: hin xu k t kt thc bi $ ln mn hnh Input: AH = 09 DX = a ch offset ca xu k t Hm 0Ah: c xu k t t bn phm Input: AH = 09 DX = a ch offset ca vng m cha xu k t Output: DX = a ch offset ca xu k t Hm 39h: to th mc Input: AH = 39h DX = a ch offset ca tn th mc Output: Nu thnh cng, th mc c to ra Nu khng thnh cng, CF=1 v AX= m li. Hm 3Ah: xa th mc Input: AH = 3Ah DX = a ch offset ca tn th mc 7

Chng 1: Gii thiu Output: Nu thnh cng, th mc c xa Nu khng thnh cng, CF=1 v AX=m li. Hm 3Ch: to file Input: AH = 3Ch DX = a ch offset ca tn file CX = thuc tnh file Output: Nu thnh cng, file c to ra, CF=0 v AX= th file (file handle) Nu khng thnh cng, CF=1 v AX= m li. Thuc tnh file c nh ngha nh sau: 00h: file bnh thng (plain old file) 01h: file ch c (Read Only) 02h: file n (Hidden from searches) 04h: file h thng (system) 08h: thuc tnh cho nhn a. 10h: thuc tnh cho th mc con. Hm 3Dh: m file Input: AH = 3Dh AL = mode Output: Nu thnh cng, file c to ra, CF=0 v AX= th file (file handle) Nu khng thnh cng, CF=1 v AX= m li. Hm 3Eh: ng file Input: AH = 3Eh BX = th file Output: Nu thnh cng, file c ng li v CF=0 Nu khng thnh cng, CF=1 v AX= m li. Hm 3Fh: c t file Input: AH = 3Fh DS:DX = a ch offset ca vng m CX = s byte cn c BX = th file Output: Nu thnh cng, CF=0 v AX= s byte c c Nu khng thnh cng, CF=1 v AX= m li. 8

Chng 1: Gii thiu Hm 40h: ghi vo file Input: AH = 40h DS:DX = a ch offset ca vng m CX = s byte cn ghi BX = th file Output: Nu thnh cng, file c ghi v CF=0. Nu khng thnh cng, CF=1 v AX= m li. Hm 41h: xa file Input: AH = 41h DX = a ch offset ca tn file Output: Nu thnh cng, file b xa Nu khng thnh cng, CF=1 v AX=m li. Hm 4Ch: kt thc chng trnh Input: AH = 4Ch Output: Kt thc chng trnh, tr li quyn iu khin cho h iu hnh.

1.3 GII THIU V TP LNH CA 8088


Phn ny gii thiu v mt s lnh thng dng ca b vi x l 8088. ngi hc lp trnh, cc lnh c chia thnh cc nhm lnh. tin dng cho

1.3.1 Nhm lnh di chuyn d liu


1. Lnh: MOV Chc nng: chuyn gi tr t ton hng ngun vo ton hng ch C php: MOV Dst,src Reg1,reg2 Reg, data Mem,reg Reg,mem Mem,data Ch : Data ch nm pha ton hng ngun Hai ton hng dst v src khng th ng thi l hai nh. 2. Lnh: PUSH Chc nng: chuyn gi tr ca ton hng ngun vo nh ngn xp 9 V d Mov AX,BX Mov AH,9Fh Mov [BX],AL Mov CL,[3456h] Mov PTR [BX], FFh

Chng 1: Gii thiu C php: PUSH Src Reg16 Mem16 Segreg Ch : V d push AX push x push DS

Ton hng ngun lun c kch thc 16 bt Ton hng ngun khng th l data (hng s)

3. Lnh: POP Chc nng: Ly gi tr ca nh ngn xp a vo ton hng ch C php: POP Dst Reg16 Mem16 Segreg V d Pop AX Pop x Pop DS

Ch : Ton hng ngun lun c kch thc 16 bt Ton hng ch khng th l data (hng s) 4. Lnh: PUSHF Chc nng: chuyn gi tr ca thanh ghi c vo nh ngn xp C php: PUSHF 5. Lnh: POPF Chc nng: ly gi tr nh ngn xp lu vo thanh ghi c. C php: POPF Ch : hai lnh PUSHF v POPF c h thng t ng gi khi chng trnh c lnh gi ngt hoc gi chng trnh con. 6. Lnh: XCHG Chc nng: Hon v gi tr gia ton hng ngun v ch 10

Chng 1: Gii thiu C php: XCHG Dst,src Reg,Reg Reg,Mem Mem,Reg 7. Lnh: IN Chc nng: c gi tr t 1 cng vo thanh ghi AL hoc AX. C php: IN IN 8. Lnh: OUT Chc nng: Chuyn gi tr 1 byte hoc 1 t t thanh ghi AL hoc AX ra cng. C php: OUT a ch cng (8 bt), AL IN a ch cng (16 bt),AX VD: OUT 2Eh,AL VD: OUT 2EBEh,AX AL, a ch cng (8 bt) AX, a ch cng (16 bt) VD: IN AL,2Eh VD: IN AX,2EBEh V d XCHG AX,BX XCHG AL,[BX] XCHG [BX],AH

1.3.2 Nhm cc lnh tnh ton s hc


Phn ny gii thiu v cc lnh lien quan n tnh ton s hc nh cc lnh: cng, tr, nhn, chia, so snh. ng thi, cng gii thch s tc ng ca cc lnh ny ln cc bit ca thanh ghi c. 1. Lnh: ADD Chc nng: cng ton hng ngun v ton hng ch, lu kt qu vo ton hng ch. C php: ADD Dst,src Reg1,reg2 Reg, data Mem,reg Reg,mem Mem,data Ch : Khng cng trc tip 2 bin nh vi nhau Ton hng ch khng th l hng s Kt qu c th tc ng n cc c: OF, SF, ZF, AF, PF, CF. 11 V d Add AX,BX Add AH,19h Add [BX],AL Add CL,[3456h] Add [BX], 1Fh

Chng 1: Gii thiu 2. Lnh: INC Chc nng: Tng gi tr ca ton hng ch ln 1. C php: INC Dst Reg Mem Ch : Ton hng ch khng th l hng s Kt qu c th tc ng n cc c: OF, SF, ZF, AF, PF, CF. 3. Lnh: SUB Chc nng: Tr ton hng ch cho ton hng ngun, lu kt qu vo ton hng ch. C php: SUB Dst,src Reg1,reg2 Reg, data Mem,reg Reg,mem Mem,data Ch : Khng tr trc tip 2 bin nh vi nhau Ton hng ch khng th l hng s Kt qu c th tc ng n cc c: OF, SF, ZF, AF, PF, CF. 4. Lnh: DEC Chc nng: Gim gi tr ca ton hng ch i 1. C php: DEC Dst Reg Mem Ch : Ton hng ch khng th l hng s Kt qu c th tc ng n cc c: OF, SF, ZF, AF, PF, CF. 5. Lnh: MUL 12 V d DEC CX DEC [BX] V d Sub AX,BX Sub AH,19h Sub [BX],AL Sub CL,[3456h] Sub [BX], 1Fh V d Inc CX Inc x

Chng 1: Gii thiu Chc nng: Nhn ni dung ca ton hng AX hoc AL vi ni dung ca ton hng ngun. Gi tr ca hai ton hng u l dng khng du. Kt qu s c ct nh sau: Nu l php nhn hai ton hng 8 bt th kt qu s c t trong thanh ghi AX. Nu l php nhn hai ton hng 16 bt th kt qu s c t trong thanh nghi DX:AX. C php: MUL Src Reg Mem Ch : Ton hng ngun khng th l hng s Kt qu c th tc ng n cc c: OF, ZF,CF. 6. Lnh: DIV Chc nng: Chia gi tr ca thanh ghi AX hoc DX:AX cho ni dung ca ton hng ngun. Gi tr ca hai ton hng u l dng khng du. Kt qu s c ct nh sau: Nu s b chia l ton hng 16 bt th phn thng s c t trong thanh ghi AL v phn d s c t trong thanh ghi AH. Nu s b chia l ton hng 32 bt th phn thng s c t trong thanh ghi AX v phn d s c t trong thanh ghi DX. C php: DIV Src Reg Mem Ch : Ton hng ngun khng th l hng s Kt qu c th tc ng n cc c: OF, CF. 7. Lnh: CMP Chc nng: So snh gi tr ca ton hng ch v ton hng ngun. Ni dung ca hai ton hng u khng thay i sau lnh ny. Thc cht, lnh ny thc hin bng cch ly ton hng ch tr i ton hng ngun. Kt qu phn nh ln thanh ghi c m khng c lu li. C php: CMP Dst,src Reg1,reg2 Reg, data Mem,reg V d Cmp AX,BX Cmp AH,9Fh Cmp [BX],AL V d DIV CL DIV [BX] V d MUL CL MUL x

13

Chng 1: Gii thiu Reg,mem Mem,data Ch : Hai ton hng ngun v ch khng th ng thi l hng s hoc nh. Kt qu c th tc ng n cc c: OF, SF,ZF,AF,PF,CF. Cmp CL,[3456h] Cmp [BX], FFh

1.3.3 Nhm cc lnh thao tc bt


Phn ny gii thiu v cc lnh lin quan n cc lnh logic, cc lnh dch chuyn bt, cc lnh quay vng cc bit. 1. Lnh: NOT Chc nng: o gi tr tng bt mt ca ton hng ch. C php: NOT Dst Reg Mem Ch : - Ton hng ch khng th l hng s 2. Lnh: AND Chc nng: Thc hin php V logic gia hai ton hng. Kt qu t trong ton hng ch. C php: AND Dst,src Reg1,reg2 Reg, data Mem,reg Reg,mem Mem,data Ch : Hai ton hng ngun v ch khng th ng thi l hng s hoc nh. Kt qu c th tc ng n cc c: SF,ZF, PF. 3. Lnh: OR Chc nng: Thc hin php HOC logic gia hai ton hng. Kt qu t trong ton hng ch. C php: 14 V d And AX,BX And AH,9Fh And [BX],AL And CL,[3456h] And [BX], FFh V d NOT CL NOT [BX]

Chng 1: Gii thiu OR Dst,src Reg1,reg2 Reg, data Mem,reg Reg,mem Mem,data Ch : - Hai ton hng ngun v ch khng th ng thi l hng s hoc nh. Kt qu c th tc ng n cc c: SF,ZF, PF. 4. Lnh: XOR Chc nng: Thc hin php EXCLUSIVE OR logic gia hai ton hng (cc bt ca kt qu c gi tr l 1 nu hai bt tng ng ca 2 ton hng l khc nhau). Kt qu t trong ton hng ch. C php: XOR Dst,src Reg1,reg2 Reg, data Mem,reg Reg,mem Mem,data Ch : - Hai ton hng ngun v ch khng th ng thi l hng s hoc nh. Kt qu c th tc ng n cc c: SF,ZF, PF. 5. Lnh: TEST Chc nng: So snh ni dung ca hai ton hng bng cch thc hin lnh AND gia hai ton hng m khng lu li kt qu. Kt qu tc ng n thanh ghi c. C php: TEST Dst,src Reg1,reg2 Reg, data Mem,reg Reg,mem Mem,data Ch : 15 V d Test AX,BX Test AH,9Fh Test [BX],AL Test CL,[3456h] Test [BX], FFh V d Xor AX,BX Xor AH,9Fh Xor [BX],AL Xor CL,[3456h] Xor [BX], FFh V d And AX,BX And AH,9Fh And [BX],AL And CL,[3456h] And [BX], FFh

Chng 1: Gii thiu - Hai ton hng ngun v ch khng th ng thi l hng s hoc nh. - Kt qu c th tc ng n cc c: SF,ZF, PF. 6. Lnh: SHL/SAL Chc nng: Dch tri cc bt ca ton hng ch i COUNT ln. Trong CL=COUNT. C php: SHL/SAL Dst,COUNT Reg Mem Ch : - Hai ton hng ngun v ch khng th ng thi l hng s hoc nh. - Khi Count=1 th c th t 1 trc tip vo ton hng, SHL/SAL Dst,1. - Kt qu c th tc ng n cc c: OF,SF,ZF, PF,CF. 7. Lnh: SHR Chc nng: Dch phi cc bt ca ton hng ch i COUNT ln. Trong CL=COUNT. C php: SHR Dst,COUNT Reg Mem Ch : - Hai ton hng ngun v ch khng th ng thi l hng s hoc nh. - Khi Count=1 th c th t 1 trc tip vo ton hng, SHR Dst,1. - Kt qu c th tc ng n cc c: OF,SF,ZF, PF,CF. 8. Lnh: ROR Chc nng: Quay vng phi cc bt ca ton hng ch i COUNT ln. Trong CL=COUNT. Trong mi ln quay, gi tr bt thp nht va chuyn vo thanh ghi c CF ng thi chuyn vo bt cao nht. C php: ROR Dst,COUNT Reg Mem Ch : - Hai ton hng ngun v ch khng th ng thi l hng s hoc nh. - Khi Count=1 th c th t 1 trc tip vo ton hng, ROR Dst,1. - Kt qu c th tc ng n cc c: OF, CF. 16 V d ROR AL,CL ROR [BX],CL V d SHR AL,CL SHR [BX],CL V d SHL AL,CL SHL [BX],CL

Chng 1: Gii thiu 9. Lnh: ROL Chc nng: Quay vng tri cc bt ca ton hng ch i COUNT ln. Trong CL=COUNT. Trong mi ln quay, gi tr bt cao nht va chuyn vo thanh ghi c CF ng thi chuyn vo bt thp nht. C php: ROL Dst,COUNT Reg Mem Ch : - Hai ton hng ngun v ch khng th ng thi l hng s hoc nh. - Khi Count=1 th c th t 1 trc tip vo ton hng, ROL Dst,1. - Kt qu c th tc ng n cc c: OF, CF. V d ROL AL,CL ROL [BX],CL

1.3.4 Nhm cc lnh lm vic vi xu k t


1. Lnh: MOVSB( hay MOVSW) Chc nng: Chuyn mt xu k t theo tng byte (hay theo tng t) t mt vng nh ngun sang vng nh ch. Trong DS:SI tr n xu k t ngun v ES:DI tr n xu k t ch. Sau mi ln chuyn 1 byte (hoc 1 t) th gi tr ca SI v DI t ng tng ln 1 (hoc 2) nu c hng DF=0, hoc gim i 1 (hoc 2) nu c hng DF=1. C php: MOVSB MOVSW 2 Lnh: CMPSB (CMPSW) Chc nng: So snh hai xu k t theo tng byte (hay theo tng t) nm hai vng nh. Trong , DS:SI v ES:DI tr n hai xu k t. Sau mi ln so snh tng byte (hoc tng t) th gi tr ca SI v DI t ng tng ln 1 (hoc 2) nu c hng DF=0, hoc gim i 1 (hoc 2) nu c hng DF=1. C php: CMPSB CMPSW - Kt qu c th tc ng n cc c: OF, SF,ZF,AF,PF, CF. 3 Lnh: LODSB (LODSW) Chc nng: Chuyn ni dung theo tng byte (hay theo tng t) ca vng nh tr bi DS:SI vo thanh ghi AL (hoc AX). Sau mi ln chuyn tng byte (hoc tng t) th gi tr ca SI t ng tng ln 1 (hoc 2) nu c hng DF=0, hoc gim i 1 (hoc 2) nu c hng DF=1. C php: LODSB Hoc 17 Hoc Hoc

Chng 1: Gii thiu LODSW 4. Lnh: STOSB (STOSW) Chc nng: Chuyn ni dung theo tng byte (hay theo tng t) ca thanh ghi AL (hoc AX) vng nh tr bi ES:DI. Sau mi ln chuyn tng byte (hoc tng t) th gi tr ca DI t ng tng ln 1 (hoc 2) nu c hng DF=0, hoc gim i 1 (hoc 2) nu c hng DF=1. C php: STOSB STOSW Hoc

1.3.5 Nhm cc lnh nhy


Nhm cc lnh nhy bao gm 4 nhm nh: cc lnh nhy khng iu kin, cc lnh nhy c iu kin, cc lnh lp v cc lnh gi ngt mm. a. Cc lnh nhy khng iu kin 1. Lnh CALL Chc nng: Gi chng trnh con C php: CALL a ch Nhn Tn chng trnh con Reg Mem 2. Lnh RET Chc nng: Quay tr v chng trnh gi chng trnh con C php: RET 3. Lnh JMP Chc nng: Lnh nhy khng iu kin C php: JMP a ch Nhn Tn chng trnh con Reg Mem Ch : Bc nhy ca lnh nhy ny nm trong mt on 64KB. b. Cc lnh nhy c iu kin 18

Chng 1: Gii thiu Chc nng: Lnh nhy khng iu kin C php: Lnh JE/JZ JNE/JNZ JL/JNGE JB/JNAE/JC JLE/JNG JBE/JNA JG/JNLE JA/JNBE JGE/JNL Ton hng Nhn Nhn Nhn Nhn Nhn Nhn Nhn Nhn Nhn Gii thch Nhy nu ZF=1 hoc 2 ton hng ca php so snh bng nhau Nhy nu ZF=0 hoc 2 ton hng ca php so snh khc nhau Nhy nu ton hng bn tri nh hn ton hng bn phi ca php so snh (CF=1) Nhy nu ton hng bn tri nh hn ton hng bn phi ca php so snh (SF<>0) Nhy nu ton hng bn tri nh hn hoc bng ton hng bn phi ca php so snh (SF<>OF hoc ZF=0) Nhy nu ton hng bn tri nh hn hoc bng ton hng bn phi ca php so snh (C CF=1 hoc SF=1) Nhy nu ton hng bn tri ln hn ton hng bn phi ca php so snh. Nhy nu ton hng bn tri ln hn hoc bng ton hng bn phi ca php so snh (C CF=0 hoc ZF=0) Nhy nu ton hng bn tri ln hn hoc bng ton hng bn phi ca php so snh (C SF=OF). Nhy nu ton hng bn tri ln hn hoc bng ton hng bn phi ca php so snh (C CF=0). Nhy nu c parity l chn (PF=1) Nhy nu c parity l l (PF=0) Nhy nu trn (OF=1) Nhy nu khng trn (OF=0) Nhy nu c du =1 (SF=1) Nhy nu c du =0 (SF=0) Nhy nu gi tr ca thanh ghi CX =0.

JAE/JNB/JNC Nhn JP/JPE JNP/JPO JO JNO JS JNS JCXZ Nhn Nhn Nhn Nhn Nhn Nhn Nhn

Ch : Cc bc nhy ca cc lnh nhy c iu kin khng vt qu 128 byte. c. Cc lnh lp Chc nng: Thc hin vng lp cho n khi iu kin tha mn. C php: 19

Chng 1: Gii thiu Lnh LOOP Ton hng Nhn Gii thch Lp khi lnh t Nhn n LOOP cho n khi gi tr ca CX=0. Sau mi ln thc hin vng lp gi tr ca CX t ng gim i 1. Lp khi lnh t Nhn n LOOPZ hoc LOOPE cho n khi gi tr ca CX=0 v c ZF=1. Sau mi ln thc hin vng lp gi tr ca CX t ng gim i 1. Lp khi lnh t Nhn n LOOPZ hoc LOOPE cho n khi gi tr ca CX<>0 v c ZF=0. Sau mi ln thc hin vng lp gi tr ca CX t ng gim i 1.

LOOPZ/LOOPE

Nhn

LOOPNZ/LOOPNE Nhn

d. Cc lnh gi ngt mm. 1. Lnh: INT Chc nng: Thc hin ngt mm. C php: INT s hiu ngt (dng hexa) Cc c b tc ng: IF, TF 2. Lnh: IRET Chc nng: Tr v chng trnh chnh (chng trnh gi n) sau khi thc hin chng trnh con phc v ngt. C php: IRET Cc c b tc ng: OF,SF,ZF,AF,PF,CF.

1.3.6 Cc lnh iu khin khc


Phn ny gii thiu v mt s lnh iu khin: thao tc vi thanh ghi c, lnh HLT v NOP. 1. Lnh: CLC Chc nng: Xa gi tr c CF v 0 (CF=0). C php: CLC Cc c b tc ng: CF. 2. Lnh: CMC Chc nng: o gi tr hin thi ca c CF. C php: CMC Cc c b tc ng: CF. 3. Lnh: STC Chc nng: t c CF=1. C php: STC Cc c b tc ng: CF. 4. Lnh: CLD Chc nng: Xo gi tr c DF v 0 (DF=0). C php: CLD 20

Chng 1: Gii thiu Cc c b tc ng: DF. 5. Lnh: STD Chc nng: t gi tr c DF bng 1 (DF=1). C php: STD Cc c b tc ng: DF. 6. Lnh: CLI Chc nng: Xo gi tr c IF v 0 (IF=0). Cm cc ngt cng hot ng, tr cc ngt khng che. C php: CLI Cc c b tc ng: IF. 7. Lnh: STI Chc nng: t gi tr c IF bng 1 (IF=1). Cm cc ngt cng hot ng. C php: STI Cc c b tc ng: IF. 8. Lnh: HLT Chc nng: dng my. C php: HLT 9 Lnh: NOP Chc nng: Khng thc hin g C php: NOP Ch : Lnh NOP rt c ngha khi CPU thc hin cc chu k i v c xen vo mt s chu k lnh trong qu trnh thc hin lnh theo c ch pipeline.

1.4 TM TT
Chng ny trang b cho sinh vin nhng kin thc c bn chun b cho cc phn k tip: Lp trnh bng Hp ng. Chng ny c ba phn chnh: - Gii thiu v cu trc b vi x l 8088. y l b vi x l kh n gin v d hiu v mt kin trc. S kin trc bao gm hai khi chnh: Khi giao din BUS v khi thc hin lnh. ng thi, phn ny cng cp chi tit chc nng ca cc thnh phn bn trong b vi x l. - Mt s chc nng ca ngt 21h. y l mt ngt quan trng nht ca h iu hnh MS DOS. Ngt 21h cung cp nhiu cc chc nng khc nhau cho cc nh lp trnh h thng. Phn ny gii thiu 14 chc nng thng dng ca ngt 21h. T cc chc nng phc v vo ra i vi k t, xu k t cho n cc chc nng phc v cho thao tc cc file v th mc. - Tp lnh ca 8088 dng hp ng. Phn ny trnh by v mt s lnh thng dng trong tp lnh ca 8088. tin li cho ngi hc lp trnh cc phn sau chng ti phn chia cc lnh ra thnh cc nhm lnh. Mi nhm lnh bao gm mt s lnh thc hin 1 s chc nng. 21

Chng 1: Gii thiu

1.5 CU HI V BI TP
Di y l cc cu hi dng la chn. Sinh vin s la chn mt v ch mt phng n tr li ng nht cho mi cu hi Cu 1: Khi giao din bus (BIU) v khi thc hin lnh (EU) giao tip vi nhau thng qua: A. Hng i lnh B. H thng bus trong C. H thng bus trong v hng i lnh D. Khng c lin h g vi nhau. Cu 2: Mt trong nhng chc nng ca thnh phn iu khin (CU) l: A. To xung iu khin B. Gii m a ch C. Cha cc thanh ghi D. Cha cc lnh sp c x l Cu 3: Cc nhm thanh ghi (16 bt) no di y c th c chia lm 2 na thanh ghi 8 bt c lp vi nhau: A. AX,BX,DS B. SP,IP,CX C. ES, SS, DS D. DX,AX,CX Cu 4: Cc nhm thanh ghi (16 bt) no di y c th c chia lm 2 na thanh ghi 8 bt c lp vi nhau: A. AX,BX,DS B. SP,IP,CX C. ES, SS, DS D. DX,AX,CX Cu 5: Cc thanh ghi on no di y tr vo cc on d liu ca cng mt chng trnh .EXE: A. DS,ES B. DS,SS C. SS, SP D. DS Cu 6: Lnh no di y l sai c php: A. Mov AL,[BX+1] B. Mov [BX+1], AL C. Mov [AL],[BX+1] D. Mov [CX], 3 Cu 7: Lnh no di y l sai c php: 22

Chng 1: Gii thiu A. Mul [BX+5] B. Div [BX+5] C. Mul AL,3 D. Mul DX Cu 8: Lnh no di y thc hin vic xa thanh ghi AX. A. AND AX,AX B. XOR AX,AX C. NOT AX D. MOV AX,[0000H] Cu 9: Lnh no di y thng c s dng trc cc lnh nhy c iu kin. A. CMP B. MOV C. INT D. RET Cu 10 *: Xt on chng trnh di y:
Mov AH,08 Int 21h Mov DL,AL Inc DL Mov AH,02 Int 21h

on chng trnh trn thc hin cng vic no di y: A. Nhp mt k t ri in k t k tip ca k t ra mn hnh B. Nhp mt k t ri in k t ra mn hnh C. Nhp mt xu k t ri in xu ra mn hnh D. Nhp 1 k t khng hin ln k t .

1.6 TI LIU THAM KHO


1. Vn Th Minh. K thut Vi x l. Nh XB Gio dc 1997. 2. ng Thnh Phu. Turbo Assembler v ng dng. NXB Khoa hc v K thut 1998. 3. Nguyn Minh San. Cm nang Lp trnh h thng (bn dch). NXB Tng cc Thng k.2001.

23

Chng 2: Lp trnh bng hp ng

CHNG 2: LP TRNH BNG HP NG


Chng ny tm hiu v cch thc lp trnh bng hp ng. Cch khai bo bin, hng, khung chng trnh, cc cu trc lp trnh, chng trnh con v macro.

2.1 VIT V THC HIN MT CHNG TRNH HP NG


2.1.1 Cu trc lnh v khai bo d liu cho chng trnh
Mt chng trnh bao gm tp hp cc lnh v cc khai bo d liu s dng trong chng trnh nhm mc ch gii quyt mt vn . Phn ny trnh by v cu trc mt dng lnh v cc qui tc khai bo bin, hng trong mt chng trnh Hp ng. b. Cu trc dng lnh Di y l mt dng lnh y ca chng trnh Hp ng,. Trn thc t, mt dng lnh cn ti thiu hai trng: trng m lnh v trng ton hng. Cc trng khc khng bt buc cn phi y . Nhn: V d: CongTiep: Add AL,[BX] ; cng tip ni dung nh do thanh ghi BX ;tr ti vo AL Cc gii thch cho cc trng: Trng Nhn M t Nhn c th l nhn dung cho lnh nhy, tn th tc hoc tn bin. Khi chy chng trnh, cc nhn ny s c chng trnh dch gn cho 1 a ch nh xc nh. Nhn c th cha t 1 n 32 k t, khng cha du cch v phi bt u bng cc k t a,b,c,z. Nhn c kt thc bng du hai chm (:) Cha lnh tht (Opcode) hoc gi lnh (Pseudo-Opcode). Vi cc lnh tht th trng ny cha m lnh gi nh (thng l dng vit ngn hoc y ca mt ng t trong ting Anh). Trong qu trnh chy chng trnh, m lnh tht s c chng trnh dch dch ra m my. i vi cc gi lnh, th chng trnh dch khng dch chng ra m my. i vi cc lnh tht th trng ny cha cc ton hng cho lnh . Lnh tht ca 8088 c th c 0,1 hoc 2 ton hng. Ton hng trong cc gi lnh ca 8088 thng cha cc thng tin khc nhau nh xc nh m hnh b nh s dng, kch thc ngn xp Trng ch gii c bt u bng du chm phy (;) ghi nhng li gii thch cc lnh ca chng trnh nhm gip cho ngi c chng trnh mt cch d hiu hn. M lnh Ton hng ; Ch gii

M lnh

Ton hng

Ch gii

24

Chng 2: Lp trnh bng hp ng Khi thc hin chng trnh, phn gii thch (sau du ; ) s b b qua. Ngoi ra, ngi ta cng dng trng ny ghi chu gii cho c mt on chng trnh, mt chng trnh con hay thm ch l li gii thiu ca bn quyn (copyright message) ca ngi lp trnh . V d: ; This program writen by X ; Last modified: 23/10/2006 ; This program is to delete a file ..

c. Khai bo bin Cc bin c th c khai bo l ba kiu d liu khc nhau l: bin kiu byte, bin kiu t (2 byte) v bin kiu t kp (4 byte). Bin kiu byte: Dng khai bo: V d: Tn bin X Y Bin kiu t: Dng khai bo: V d: Tn bin X Y Bin kiu t kp: Dng khai bo: V d: Tn bin X Y Khai bo bin kiu mng Mng l mt dy lin tip cc phn t c cng kiu byte hoc t. V d: A1 DB 1,2,3,4,5 L khai bo mt bin mng tn l A1, gm 5 byte trong b nh. Ni dung nh [A1] c gi tr l 1, [A1+1] c gi tr l 2, [A1+2] c gi tr l 3 Nu mun khai bo mt mng khng cn khi to gi tr ban u, ta khai bo nh sau: A2 DB 100 DUP(?) 25 DD DD DD ? ? ;khng c gi tr khi u 4Fh ; gi tr khi u l 4Fh DW DW DW ? ? ;khng c gi tr khi u 4 ; gi tr khi u l 4. DB DB DB ? ? ;khng c gi tr khi u 4 ;gi tr khi u l 4

Chng 2: Lp trnh bng hp ng khai bo mt mng c 100 phn t v cc phn t l kiu byte. Khai bo sau l mt mng 100 phn t kiu byte v tt c cc phn t c khi to gi tr 0. A3 DB 100 DUP(0) Khai bo bin kiu xu k t Xu k t l mt mng m mi phn t l mt k t hay m ASCII ca k t. Xu k t c kt thc bi k t $ (c m ASCII l 24h). V d: Xau1 DB Cho cc bn,$; XuongDong DB 13,10,$;xu cha cc k t xung dng v v u dng Xau2 DB 36h,40h,a,b, $ ; xu cha c m ASCII v k t. d. Khai bo hng Hng c th l kiu s hoc kiu k t. C php khai bo hng nh sau: Tn hng EQU Gi tr ca hng V d: CR EQU 0Dh ; C th s dng hng khai bo: V d: Chao EQU Cho bn LoiChao DB Chao,$

2.1.2 Khung ca chng trnh Hp ng


thc hin mt chng trnh dng m my, h iu hnh cp pht mt s vng nh dnh cho chng trnh cha cc m lnh, d liu, v ngn xp. Phn ny trnh by v cc gi lnh iu khin on dng cho chng trnh, khung ca chng trnh dng .COM, khung ca chng trnh dng .EXE, v cui cng l mt s chng trnh v d n gin. a. Cc gi lnh iu khin on (segment directives) 1. Lnh: MODEL Chc nng: Khai bo m hnh b nh cho mt module Assembler. Lnh ny thng c t sau gi lnh v khai bo loi CPU (CPU family) v c t trc tt c cc gi lnh iu khin on khc. C php: .MODEL <Kiu kch thc b nh> Trong kiu kch thc b nh l mt trong cc kiu sau: Kiu kch thc Tiny (hp) M t M lnh v d liu c gi vo cng mt on. Kiu ny thng c dng trong chng trnh. COM

26

Chng 2: Lp trnh bng hp ng Small (nh) Medium (trung bnh) Compact (nn) Large (ln) M lnh c gi vo trong mt on. D liu nm trong mt on khc M lnh c gi vo trong mt on. D liu khng gi gn trong mt on. M lnh khng gi vo trong mt on. D liu khng gi gn trong mt on. M lnh khng gi vo trong mt on. D liu khng gi gn trong mt on. Khng c mng d liu c khai bo no ln hn 64KB M lnh khng gi vo trong mt on. D liu khng gi gn trong mt on. Cc mng d liu c khai bo c th ln hn 64KB.

Huge (rt ln)

V d: .MODEL Small 2. Lnh: STACK Chc nng: Khai bo kch thc on ngn xp dng trong chng trnh. on ngn xp l mt vng nh lu cc trng thi hot ng ca chng trnh khi c chng trnh con. C php: .STACK <Kch thc ngn xp> Trong kch thc ngn xp l s byte dnh cho ngn xp. Nu khng khai bo kch thc ngn xp th chng trnh s t ng gn cho gi tr l 1024 (1 KB). S ny l kh ln, thng thng khong 256 byte hay 100h l . V d: .STACK 100h 3. Lnh: DATA Chc nng: Khai bo on d liu cho chng trnh. on d liu cha ton b cc khai bo hng, bin ca chng trnh. C php: .DATA V d: .DATA CR EQU 0Dh LF EQU 0Ah LoiChao DB Cho cc bn,$ 4. Lnh: CODE Chc nng: Khai bo on m lnh chng trnh. on m cha cc dng lnh ca chng trnh. C php: .CODE V d: .CODE Mov AH,09 Mov Dx, Offset LoiChao . 27

Chng 2: Lp trnh bng hp ng b. Khung ca chng trnh Hp ng dch ra dng .EXE Di y l khung ca mt chng trnh hp ng m sau khi c dch (compiled) v hp dch (linked) th s thnh mt file thc hin c dng .EXE. Sau khi s dng cc gi lnh iu khin on khai bo m hnh b nh, kch thc ngn xp, on d liu v bt u on m lnh. Tt nhin ngi lp trnh c th thay i m hnh b nh (c th khng phi l Small) hay kch thc ngn xp (mt s khc, khng phi l 100h) cho ph hp vi mc ch vit chng trnh. Ta dng nhn Start v End Start nh du im bt u v kt thc on m lnh dng cho chng trnh (tt nhin ngi lp trnh c th dng tn nhn khc nh du, khng bt buc phi dng nhn Start)
.MODEL Small .STACK 100h .DATA ; Cc khai bo hng, bin y .CODE Start: Mov AX,@Data Mov DS,AX ; Cc lnh ca chng trnh chnh c vit y Mov AH,4Ch Int 21h End Start ; Cc chng trnh con (nu c) s c vit y.

Hai lnh:
Mov AX,@Data Mov DS,AX

Lm nhim v cho con tr DS tr ti on cha d liu khai bo (Data). Hng s @Data l tn ca on d liu (thc cht hng s ny mang gi tr l a ch ca on b nh cp pht cho chng trnh trong qu trnh chy chng trnh ). M DS khng lm vic trc tip vi hng s (khng th chuyn gi tr hng s trc tip vo cc thanh ghi on), nn thanh ghi AX l bin trung gian a gi tr @Data vo DS. Hai lnh cui ca chng trnh:
Mov AH,4Ch Int 21h

Lm nhim v kt thc chng trnh .EXE v tr li quyn iu khin cho h iu hnh DOS. Nhc li rng khng ging nh cc h iu hnh Windows 9x, 2K,XP l cc h iu hnh a nhim. H iu hnh DOS l h iu hnh n nhim (Single-task). Ngha l, ti mt thi im, ch c mt chng trnh chim quyn iu khin v ti nguyn ca h thng. V d v mt chng trnh dng .EXE n gin, chng trnh Hello World. Chng trnh thc hin vic in ra mn hnh mt li cho Hello World
; Chng trnh ny in ra mn hnh li cho Hello World

28

Chng 2: Lp trnh bng hp ng


.MODEL Small .STACK 100h .DATA Msg db Hello World,$ .CODE Start: Mov AX,@Data Mov DS,AX ; cho DS tr n on Data Mov AH,09h ; Hm 09, in ra 1 xu k t Mov DX,Offset Msg ; Dx cha a ch offset ca xu Int 21h ; thc hin chc nng in xu Mov AH,4Ch ; Tr v v tr quyn iu khin cho DOS Int 21h End Start

c. Khung ca chng trnh Hp ng dch ra dng .COM Chng trnh .COM ngn gn v n gin hn so vi cc chng trnh .EXE. Tt c cc on ngn xp, d liu, on m c gp vo cng mt on l on m. Ngha l, chng trnh .COM c gi gn trong mt on (vic dch v thc hin i vi chng trnh .COM s nhanh hn cc chng trnh .EXE). Vi cc ng dng nh m m lnh v d liu khng vt qu 64KB, ta c th ghp lun cc on ngn xp, d liu v m lnh vo cng vi on m to ra file dng COM. dch c ra file dng .COM, chng trnh ngun phi tun th theo khung di y
.MODEL Tiny .CODE Org 100h Jmp Start ; Cc khai bo hng, bin y Start: ; Cc lnh ca chng trnh chnh c vit y Int 20h ; Cc chng trnh con (nu c) s c vit y. End Start

Khai bo m hnh kch thc s dng b nh lun l Tiny. Ngoi ra, trong khung ny khng c li khai bo on ngn xp v on d liu. Lnh u tin trong on m l gi lnh ORG 100h, dng gn a ch bt u cho chng trnh ti 100h trong on m. Vng dung lng 256 byte u tin c s dng cho on mo u chng trnh (Prefix Segment Program). K tip, ngi ta dung lnh JMP nhy qua phn b nh c dng cho khai bo. V d v mt chng trnh .COM n gin, chng trnh Hello World.
.MODEL Tiny .CODE Org 100h Jmp Start Msg db Hello World, $

29

Chng 2: Lp trnh bng hp ng


Start: Mov AH,09h ; Hm 09, in ra 1 xu k t Mov DX,Offset Msg ; Dx cha a ch offset ca xu Int 21h ; thc hin chc nng in xu Int 20h ; kt thc chng trnh, tr v DOS End Start

2.1.3 To, dch, hp dch v thc hin chng trnh Hp ng


Phn ny trnh by v cc bc to, cch dch, hp dch v thc hin mt chng trnh hp ng. Di y l cc bc phi c thc hin tun t. Ngha l, bc th i khng th c thc hin nu bc trc n (bc i-1) cha c thc hin thnh cng. Bc 1: Son chng trnh ngun Dng bt k trnh son tho no nh Nodepad, Turbo Pascal Editor, Turbo C Editor to ra file vn bn chng trnh. File chng trnh phi c phn m rng l .ASM. Bc 2: Dch Dng mt trong cc chng trnh dch: MASM (Macro Assembler) hoc TASM (Turbo Assembler) dch file .ASM thnh file .OBJ. Nu bc ny c li th ta phi quay li bc . Bc 3: Hp dch Dng chng trnh LINK hoc TLINK lin kt mt hay nhiu file OBJ li thnh mt file .EXE, file c th chy c. i vi chng trnh c cu trc l file EXE th b qua bc Bc 4: To file .COM Dng chng trnh EXE2BIN dch .EXE thnh file .COM. Bc 5. Thc hin chng trnh va to.

30

Chng 2: Lp trnh bng hp ng

(1)To file chng trnh .asm

(2)Dng TASM hoc MASM dch ra file *.obj

(3)Dng trnh lin kt LINK hoc TLINK hp dch thnh file .EXE

File .COM

(4)Dng EXE2BIN hoc TLINK dch file EXE thnh file COM

(5)Chy chng trnh

2.2 CC CU TRC LP TRNH C BN TRONG CHNG TRNH HP NG


Phn ny trnh by v cc cu trc lp trnh c bn c s dng trong vic lp trnh ni chung v lp trnh hp ng ni ring. Cc cu trc ny thng c s dng iu khin mt lnh hoc mt khi lnh. l: - Cu trc tun t - Cu trc iu kin IF-THEN - Cu trc iu kin r nhnh IF-THEN-ELSE - Cu trc CASE - Cu trc lp xc nh FOR-DO - Cu trc lp WHILE-DO - Cu trc lp REPEAT-UNTIL

31

Chng 2: Lp trnh bng hp ng

2.2.1 Cu trc tun t


Cu trc tun t c mt hu ht tt c cc ngn ng lp trnh. y l cu trc thng dng, n gin nht, trong cc lnh c sp xp k tip nhau ht lnh ny n lnh khc. Trong qu trnh thc hin chng trnh cc lnh tun t c x l theo th t ca chng. Bt u t lnh u tin cho n khi gp lnh cui cng ca cu trc th cng vic cng c hon tt. Cu trc c dng nh sau:
lnh 1 lnh 2 lnh 3 . lnh n

V d: Cn tnh tng ni dung cc nh c a ch FFFAh, FFFBh, FFFCh, FFFDh ri lu kt qu vo thanh ghi AX. thc hin vic ny ta c th s dng on chng trnh sau:
Mov BX,FFFAh ; BX tr n FFFAh Xor AX,AX Inc BX Inc BX Inc BX ; ; ; ; Tng =0 BX tr n FFFBh BX tr n FFFCh BX tr n FFFDh Add AL,[BX] ;cng ni dung nh c a ch FFFAh vo AX Add AL,[BX]; cng ni dung nh c a ch FFFBh vo AX Add AL,[BX]; cng ni dung nh c a ch FFFCh vo AX Add AL,[BX]; cng ni dung nh c a ch FFFDh vo AX Xong: ; ra khi cu trc

2.2.2 Cu trc IF THEN


y l cu trc iu kin (conditional statement) m khi lnh c thc hin nu n tha mn iu kin. C php: IF <iu kin> THEN <Khi lnh> Cu trc ny c th c minh ha bng s khi sau y:

32

Chng 2: Lp trnh bng hp ng

sai
iu kin

ng

Khi lnh

Khi lnh c th gm 1 hoc nhiu lnh. Trong hp ng, ci t cu trc IFTHEN ngi ta thng s dng lnh CMP (so snh) v i km theo sau l mt lnh nhy c iu kin. V d: Vit on chng trnh kim tra nu thanh ghi AX>BX th s tnh hiu AX-BX v lu kt qu vo thanh ghi AX. Di y l on chng trnh thc hin cng vic :
Cmp AX,BX Jb Ketthuc Sub AX,BX Ketthuc: ; so snh AX v BX ; nu AX<BX nhy n nhn Ketthuc ; AX=AX-BX

2.2.3 Cu trc IF THENELSE


y l dng phn nhnh ca cu trc c iu kin. C php: IF <iu kin> THEN <Khi lnh 1> ELSE <Khi lnh 2> Nu iu kin c tha mn th khi lnh th nht c thc hin. Ngc li, nu iu kin l sai th khi lnh th hai s c thc hin. Trong mi trng hp, mt v ch mt trong hai khi lnh c thc hin.

33

Chng 2: Lp trnh bng hp ng

ng iu kin

Sai

Khi lnh 1

Khi lnh 2

Hnh: cu trc IFTHENELSE Trong ci t ca cu trc IFTHENELSE dng hp ng, thng thng ngi ta s dng mt lnh CMP, mt lnh nhy c iu kin v mt lnh nhy khng iu kin. V d: Cho hai s c lu vo thanh ghi AX v BX, tm s ln nht v lu kt qu vo thanh ghi DX. Di y l on chng trnh thc hin cng vic .
Cmp AX,BX JG AXLonHon Mov DX,BX Jmp Ketthuc AXLonHon: Mov DX,AX Ketthuc: ;AX>BX nn DX=AX ; ; so snh AX v BX ; nu AX>BX nhy n nhn AXLonhon BX>=AX nn DX=AX ; nhy n nhn Ketthuc

2.2.4 Cu trc CASE


Cu trc CASE l cu trc la chn thc hin mt khi lnh gia nhiu khi lnh khc. C php: CASE <biu thc> Gi tr 1: Khi lnh 1 Gi tr 2: Khi lnh 2 Gi tr n: Khi lnh n END CASE

34

Chng 2: Lp trnh bng hp ng

Biu thc

Gi tr 1

Gi tr 2

Gi tr n

Khi lnh 1

Khi lnh 2

Khi lnh n

thc hin cu trc CASE trong chng trnh Hp ng, ta phai kt hp cc lnh CMP, lnh nhy c iu kin, v lnh nhy khng iu kin. V d:
Am db Nh hn 0,$ Duong db Ln hn 0,$ Khong db Bng khng,$ Sub AX,BX Sub AX,CX Cmp AX,0 Je Khong0 Jb Am0 Ja Duong0 Khong0: Mov AH,9 Mov DX,offset Khong Int 21h Jmp Ketthuc Am0: Mov AH,9 Mov DX,offset Am0 Int 21h Jmp Ketthuc Duong0: Mov AH,9 Mov DX,offset Duong0 Int 21h Ketthuc:

35

Chng 2: Lp trnh bng hp ng Tnh hiu AX-BX-CX v thng bo kt qu l m, dng hay bng khng.

2.2.5 Cu trc lp FOR-DO


y l vng lp vi s ln lp bit trc. C php nh sau:

Count=s ln lp

Khi lnh

Count=Count-1

Count=0

ng

FOR Count (=S ln lp) DO Khi lnh Khi lnh s c thc hin Count ln. ci t cu trc ny trong hp ng ngi ta dng thanh ghi CX cha Count v kt hp vi lnh LOOP duy tr vng lp. Mi ln lp xong th CX s t ng gim i 1. V d: Tnh tng S=1+2+3+.+100 Lu kt qu vo thanh ghi AX. Mi ln thc hin khi lnh ta s cng vo AX mt s. Ln thc hin th i th 100-i+1 s c cng vo AX. Nh vy s ln lp s l 100. on chng trnh c vit nh sau:
Mov CX,100 ; khi to s ln lp Xor AX,AX Cong: Add AX,CX ; Cng CX vo AX Loop Cong ; Lp cho n khi CX=0 ; ra khi vng lp, AX cha tng ; AX=0 cha tng

36

Chng 2: Lp trnh bng hp ng

2.2.6 Cu trc lp WHILE-DO


C php: WHILE iu kin DO Khi lnh Trong cu trc lp WHILEDO iu kin c kim tra trc khi thc hin khi lnh. Nu iu kin ng th khi lnh c thc hin, cn iu kin sai th vng lp s dng. S ln thc hin khi lnh cha c bit trc.

sai iu kin ng Khi lnh

ci t cu trc ny trong chng trnh hp ng, ngi ta thng dng lnh CMP kim tra iu kin v kt hp mi mt lnh nhy c iu kin thot khi vng lp. V d: Nhp vo mt s nguyn ln hn 0 v b hn 9 t bn phm. Kim tra xem c nhp ng khng?. Nu nhp sai th yu cu phi nhp li. Li gii Ta bit rng s 0 c m ASCII l 30h v s 9 c m ASCII l 39h. on chng trnh s kim tra nu k t g vo c m ASCII b hn 30h hoc ln hn 39h th s yu cu ngi dng nhp li k t khc. Di y l on chong trnh.
Mov AH,01 ; nhp vo 1 k t Nhap: Int 21h Cmp AL,30h ; k t nhp vo <0 Jb Nhap Ja Nhap ; nhp li k t nhp vo >9 ; nhp li Cmp AL,39h ;

37

Chng 2: Lp trnh bng hp ng


Xong: Sub AL,30h ; K t hp l, i ra s

2.2.7 Cu trc lp REPEAT-UNTIL


C php: REPEAT Khi lnh UNTIL iu kin Trong cu trc ny, khi lnh c thc hin t nht mt ln, sau mi kim tra iu kin. Khi lnh s c lp i lp li cho n khi iu kin tha mn.

Khi lnh

sai iu kin

ng

ci t cu trc ny trong hp ng, ngi ta thng dng mt lnh CMP i km vi vi mt lnh nhy c iu kin. V d: Tm n nh nht sao cho 1+2+3 ++n >10000, lu kt qu (s n) vo BX Li gii: Ta cng vo tng (cha trong AX) cc s 1,2, mi ln tnh tng ta u so snh tng vi 10000, ta cng cho n khi AX>10000 th ta dng, s hng cui cng ca tng chnh l s n cn tm. on chng trnh c vit nh sau:
Mov CX,1 Cong: Add AX,CX ; Cng CX vo AX Cmp AX ,10000 ; Tng > 10000 cha? Ja Xong Inc CX Jmp Cong Xong: Mov BX,CX ; lu n vo BX ; ln hn, xong ; Tng CX ln 1 ; Tip tc cng ; CX=1 Xor AX,AX ; AX=Tong=0

38

Chng 2: Lp trnh bng hp ng

2.3 CHNG TRNH CON V MACRO


2.3.1 Chng trnh con: c ch lm vic v cu trc
a. Khi nim: Chng trnh con c mt hu ht cc ngn ng lp trnh. Chng trnh con rt c ngha trong lp trnh c cu trc. N lm cho chng trnh tr ln sng sa, d bo tr hn. Bn cnh , n cn c mt ngha khc: mt chng trnh con c vit mt ln nhng c s dng (gi n) nhiu ln. Mt cch nh ngha n gin: chng trnh con l mt nhm cc lnh c gp li phc v cho vic s dng nhiu ln thng qua tn v cc tham s ca chng trnh con . V d: Mt bi ton yu cu ta tnh tng ca 3 s hng c nhp t bn phm. Thay v phi vit 3 on chng trnh (kh ging nhau) ln lt nhp tng s th ta vit 1 chng trnh con nhp vo 1 s ri gi n 3 ln. b. C ch lm vic ca chng trnh con Gi s c mt chng trnh (chnh) ang thc hin nh sau: a ch 1F00 1F02 1F04 1F06 1F09 1F0B 1F0D 1F0F Lnh Mov AX,1 Mov BX,2FFF Mov CX,2 Call TinhTong Sub AX,BX Add AX,CX SHR AX,1 Jmp Done

Chng trnh con TinhTong c lu 1 vng nh khc a ch FFD0 FFD2 FFD4 FFD6 FFD8 Lnh Mov DL,[BX] Add AL,[BX] Inc BX Add AL,[BX] Ret

39

Chng 2: Lp trnh bng hp ng Khi thc hin n lnh Call TinhTong a ch 1F06h, b x l s thc hin nh sau: - Lu a ch ca lnh k tip 1F09h vo ngn xp. - Np a ch ca lnh u tin ca chng trnh con FFD0h vo IP - Cc lnh ca chng trnh con c thc hin cho n khi gp lnh RET, chng trnh con kt thc v tr li quyn iu khin cho chng trnh chnh. - a ch 1F09h c ly ra t ngn xp ri t vo IP. Lnh ti a ch 1F09h (Sub AX,BX) ca chng trnh chnh s c thc hin. c. Cu trc ca chng trnh con Cu trc ca mt chng trnh con c dng nh sau: <Tn chng trnh con> PROC NEAR/FAR Cc lnh ca chng trnh con c vit y RET <Tn chng trnh con> ENDP Gii thch: - Lnh iu khin PROC c s dng khi ng chng trnh con. Nhn ng trc ton t PROC l tn ca th tc. Sau ton t PROC c lnh iu khin NEAR hoc FAR bo cho lnh RET ly a ch quay v chng trnh ca n trong ngn xp. - Nu l NEAR th chng trnh con c gi th a ch OFFSET (16 bt) c ly t ngn xp gn cho thanh ghi IP. Ngha l, trong trng hp ny th chng trnh con v chng trnh gi n trn cng mt on (segment) - Nu l FAR th ch ly a ch SEGMENT v OFFSET trong ngn xp c ly ra gn cho thanh ghi CS v IP. Ngha l, trong trng hp ny th chng trnh con v chng trnh gi n hai on khc nhau. lnh RET c y thng tin bit l phi np c CS:IP hay ch np IP, c hai cch sau: - Thay v s dng RET ta s dng lnh RETN (near return) hoc RETF (far return). - Dng hai lnh iu khin PROC v ENDP. Lnh ENDP s nh du kt thc chng trnh con. Nu i sau PROC l NEAR th tt c cc lnh RET trong chng trnh con nm trong PROC ENDP u l RETN nm chung mt on vi chng trnh gi n chng trnh con ny. Nu i sau PROC l FAR th tt c cc lnh RET trong chng trnh con nm trong PROC ENDP u l RETF (nm chung mt on vi chng trnh gi n chng trnh con ny). - Nu c chng trnh chnh v cc chng trnh con c kch thc nh (tt c m lnh khng vt qu 64KB) th ta nn s dng chng nh l cc th tc NEAR. V nh th chng trnh s c thc hin nhanh hn. - Khi s dng m hnh b nh, cc gi tr NEAR l FAR cng c gn ngm nh theo m hnh kch thc b nh. Chng hn: nu ta dng .MODEL Tiny hoc .MODEL Compact th chng trnh con s c t ng xc nh l NEAR. Cn nu ta dng 40

Chng 2: Lp trnh bng hp ng .MODEL Medium, .MODEL Large hoc .MODEL Huge th chng trnh con s c t ng xc nh l FAR. - Trong trng hp ta khng c khai bo NEAR hoc FAR sau lnh PROC th ngm nh l NEAR.

2.3.2 Truyn tham s


y l phn rt quan trng khi chng trnh c thit k thnh cc chng trnh con. Chng c giao tip vi nhau mt cch trong sut, l gic trong qu trnh thc hin cc chc nng ca mnh tng thm tnh ti s dng- mt tnh cht quan trng ca chng trnh con. D liu phi c trao i t chng trnh gi v chng trnh con c gi. Trong cc ngn ng bc cao khc, cu trc chng trnh con cho php ngi lp trnh khai bo danh sch tham s. Tuy nhin, nh ta thy cu trc ca mt chng trnh con hp ng ta khng thy i km vi mt danh sch tham s. Di y ta s xem xt tt cc cc vn lin quan n vic truyn tham s. a. Truyn gi tr tham s t chng trnh gi sang chng trnh c gi - Truyn tham s thng qua cc thanh ghi: y l cch thc n gin v d thc hin nht, thng c s dng i vi cc chng trnh c vit thun ty bng hp ng. thc hin cch truyn tham s ny ta ch cn t mt gi tr no vo thanh ghi chng trnh gi v sau chng trnh con c gi s s dng gi tr thanh ghi ny. - Truyn tham s thng qua cc bin ton cc: cc bin ton cc c khai bo trong chong trnh chnh c tc dng trong ton b chng trnh (c chng trnh chnh v cc chng trnh con). V vy ta c th dng n truyn gi tr gia chong trnh chnh v cc chng trnh con. Cch ny kh ph bin khi ta vit chng trnh thun ty bng hp ng hoc pht trin chng trnh hn hp bng hp ng v cc ngn ng bc cao khc. - Truyn tham s thng qua ngn xp: y l phng php kh phc tp. Tuy nhin, cch ny c s dng rt nhiu khi ta vit cc module bng hp ng v cc ngn ng bc cao khc ri cho chng lin kt (link) vi nhau trong qu trnh thc hin. Cch ny s c cp chi tit phn sau: kt ni chng trnh hp ng vi cc chng trnh ngn ng bc cao. b. Truyn gi tr tham s t chng trnh c gi ln chng trnh gi - Truyn tham s t chng trnh c gi (chng trnh con) ln chng trnh gi (chng trnh chnh) cng theo ba cch: thng qua cc thanh ghi, bin ton cc v ngn xp. Trong trng hp lin kt vi ngn ng bc cao th chng trnh con c gi (c vit bng hp ng) c th chuyn gi tr ln chng trnh gi (c vit bng ngn ng bc cao) bng gi tr tr v (returned value). lm c iu ny trong hp ng th gi tr tr v ca chng trnh con c gi phi tun th cc qui cch sau: + Nu gi tr tr v (tn hm mang gi tr tr v) l 8 bt hoc 16 bt th gi tr phi c t vo thanh ghi AX ca hm trc khi quay v chng trnh gi n. + Nu gi tr tr v (tn hm mang gi tr tr v) l 32 bt th gi tr phi c t vo thanh ghi DX:AX ca hm trc khi quay v chng trnh gi n. 41

Chng 2: Lp trnh bng hp ng - Lu rng s lng cc thanh ghi ca my tnh l c hn, nn ta khng nn dng qu nhiu thanh ghi cho vic chuyn giao cc tham s. c. Vn bo v cc thanh ghi Khc vi lp trnh vi cc ngn ng bc cao, khi lp trnh hp ng ngi lp trnh hp ng cn phi n vic bo v cc thanh ghi trong qu trnh gi cc chng trnh con. cc ngn ng bc cao, chng trnh con khng lm thay i gi tr ca cc bin ca chng trnh chnh tr khi ta ch tm lm vic . Trong cc chng trnh c vit bng hp ng th ngc li l rt hay xy ra trng hp l cc gi tr ca cc bin trong chng trnh chnh c np vo cc thanh ghi m trong khi chng trnh con cng cn cc thanh ghi ny thc hin mt cng vic no . V nh vy th chng trnh con khi s dng thanh ghi c th s xa gi tr trong thanh ghi m chng trnh chnh t vo s v sau. Do vy cc gi tr c lu vo trong thanh ghi cn phi c bo v khi cn thit. C hai cch ngi ta hay dng l: - S dng cc lnh PUSH v POP: Khi bt u mt chng trnh con, ta nn tin hnh lu cc gi tr ca cc thanh ghi m chng trnh con s dng n vo ngn xp nh lnh PUSH v trc khi ra khi chng trnh con ta phi phc hi li cc gi tr ca cc thanh ghi t ngn xp nh lnh POP. - S dng theo mt qui c nht qun (code convension): qui nh s dng mt s thanh ghi s dng cho chng trnh chnh v tt c cc chng trnh con khng c s dng n cc thanh ghi .

2.3.3 Chng trnh gm nhiu module


l chng trnh gm nhiu file, thch hp cho cc chng trnh ln v phc tp. Chng c dch mt cch c lp nhng c hp dch (link) vi nhau khi chy. Sau y l nhng u im ca vic vit chng trnh gm nhiu file: - Cho php nhiu ngi lp trnh cng tham gia pht trin mt chng trnh ln. - D dng cho vic sa li, khi dch module no pht hin ra li th ch cn sa v dch li module . - Mi module thng gii quyt mt vn ngn gn nn d tm sai st. chia x cc bin ton cc hoc cc chng trnh con c s dng chung gia cc module ngi ta s dng cc lnh iu khin PUBLIC, EXTRN v GLOBAL. a. Lnh iu khin PUBLIC Chc nng: Lnh iu khin PUBLIC ch cho chng trnh dch hp ng bit nhn no nm trong module ny c php s dng cc module khc. C php: PUBLIC tn nhn Khai bo nhn Trong tn nhn c th l: - Tn chng trnh con - Tn bin - Tn hng (theo sau bi lnh EQU) V d: 42

Chng 2: Lp trnh bng hp ng Nhn l tn bin nh


.DATA PUBLIC gTong, gSoHang, gMang, gMangLength gTong dd ? gSoHang dw ? gMangLength EQU 100 gMang db gMangLength DUP(?) Nhn l tn ca chng trnh con .CODE PUBLIC . gTinhTong ENDP ;------------------------------gTimMax PROC FAR . gTimMax ENDP ;---------------------------------gTinhTong, gTimMax gTinhTong PROC NEAR

Ch : chng trnh dch hp ng khng phn bit ch hoa hay thng trong cc nhn. Tt c cc ch u hiu nh ch hoa. Nu mun c s phn bit th: - dng ty chn /ml khi dch cho tt c mi k hiu - dng ty chon /mx khi dch cho cc nhn c khai bo PUBLIC, EXTRN, hoc GLOBAL. b. Lnh iu khin EXTRN Chc nng: Lnh iu khin EXTRN bo cho chng trnh dch hp ng bit nhn no c khai bo PUBLIC cc module khc c s dng trong module ny. Ni cch khc cc nhn c PUBLIC cc module khc s c s dng trong module ny m khng cn khai bo li nu chng c khai bo EXTRN. C php: EXTRN tn nhn: kiu Trong kiu c cc dng nh sau: Kiu ABS BYTE WORD DWORD FWORD Gii thch Gi tr tuyt i, dng khai bo cc nhn c xc nh bi EQU hoc = Gi tr nhn l 1 byte Gi tr nhn l 2 byte Gi tr nhn l 4 byte Gi tr nhn l 6 byte 43

Chng 2: Lp trnh bng hp ng QWORD TBYTE DATAPTR NEAR FAR PROC Gi tr nhn l 8 byte Gi tr nhn l 10 byte Con tr NEAR hoc FAR ph thuc vo MODEL ca b nh Ch chng trnh con dng khai bo NEAR Ch chng trnh con dng khai bo FAR Xc nh nhn l th tc; cn NEAR hoc FAR ph thuc vo lnh iu khin .MODEL

UNKNOWN Cho nhn khng bit kch c Cc kiu d liu theo sau nhn c khai bo EXTRN phi xc nh ng, nu khng s gy ra sai st. V d: module 1 c chng trnh con c khai bo nh sau:
PUBLIC TinhTong TinhTong PROC FAR Ret TinhTong ENDP

module 2 s dng chng trnh con TinhTong c khai bo trong module 1.


.CODE EXTRN TinhTong: FAR Call TinhTong

s dng EXTRN khai bo cho chng trnh dch hp ng bit nhng nhn no c khai bo PUBLIC phn trc c s dng trong module ny.
.DATA EXTRN gTong:DWORD, gSoHang:WORD, gMang:BYTE,gMangLength:ABS EXTRN TinhTong: NEAR, TimMax: FAR . Call TinhTong . Call TimMax

c. Lnh iu khin GLOBAL Lnh GLOBAL c h tr bi chng trnh dch TASM (Turbo Assembler) ca hng Borland. Lnh iu khin ny cn c th thay th hai lnh PUBLIC v EXTRN. Nu ta khai bo GLOBAL cho cc nhn c km theo khai bo dng nhn th GLOBAL trong trng hp ny s

44

Chng 2: Lp trnh bng hp ng thay th cho PUBLIC, cn khi khai bo nhn i sau GLOBAL m ch xc nh kiu nhn th GLOBAL s thay th EXTRN. V d:
.DATA GLOBAL gSoHang:WORD, gMang:BYTE Count DW ? .CODE GLOBAL TinhTong: NEAR, TimMax: FAR TimMax PROC FAR Call TinhTong

Cc nhn TinhTong, TimMax c khai bo do lnh iu khin GLOBAL i vi cc nhn ny c ngha nh PUBLIC, cn cc nhn gSoHang, gMang ch nu kiu m khng khai bo th GLOBAL i vi chng l EXTRN. Mt trng hp v cng thun li vi vic s dng lnh iu khin GLOBAL l vic s dng GLOBAL trng file INCLUDE. Gi s ta c mt tp hp cc nhn m ta mun s dng tt c cc module ca chng trnh gm nhiu module. Ta c th lm c nh vy nh vic gp tt c cc nhn vo file INCLUDE v sau a file ny vo cc module. Trong trng hp ny ta khng th s dng PUBLIC hoc EXTRN v EXTRN khng th lm vic c vi cc nhn c xc nh kch thc khai bo. Cn lnh PUBLIC ch lm vic vi cc module trong cc nhn c khai bo m khng xc nh kiu. Do vy, ch c GLOBAL l th mn c hai iu kin trn. V d v mt chng trnh nm trn hai file (hai module) khc nhau. Vi: - Module ca chng trnh chnh l main.asm c chc nng xc nh a ch OFFSET ca hai xu k t, gi chng trnh con lm nhim v ni hai xu k t li v hin th xu kt qu. - Module chng trnh con l KetNoi.ASM lm nhim v kt ni hai xu v xp vo vng nh kt qu. Di y l chng trnh chnh:
.MODEL SMALL .STACK 100h .DATA Xau1 DB Hello,0 Xau2 DB Mr Bin, 13,10,$,0 GLOBAL XauKQ:BYTE XauKQ DB 50 DUP (?) .CODE EXTRN KetNoi:PROC Start: Mov AX,@Data Mov DS,AX Mov AX,offset Xau1; AX cha OFFSET ca Xau1

45

Chng 2: Lp trnh bng hp ng


Mov BX,offset Xau2; BX cha OFFSET ca Xau2 Call KetNoi Mov AH,9 Int 21h Mov AH,4Ch ; Tr v DOS Int 21h End Start ; ni hai xu Mov DX,Offset XauKQ ; In ra mn hnh

Module ca chng trnh con KetNoi


.MODEL SMALL .STACK 100h .DATA GLOBAL XauKQ:BYTE .CODE PUBLIC KetNoi KetNoi PROC Cld Mov DI, SEG XauKQ ; ES:DI tr n xu kq Mov ES,DI Mov DI, OFFSET XauKQ Mov SI,AX; DS:SI tr n Xau1 Lap1: Lodsb ; ly 1 k t a vo AL And AL,AL ; cho ZF=1 Jz DoKetNoi Stosb Jmp Lap DoKetNoi: Mov SI,BX; DS:SI; tr n Xau2 Lap2: Lodsb ; ly k t a vo AL ; cho ZF=1 ; gi tr khc 0 th nhy Stosb ; Ct k t vo XauKQ And AL,AL Jnz Lap2 Ret KetNoi ENDP END ; Lu k t t AL vo xu

; tr v chng trnh chnh

chy hai module trn ta thc hin theo cc thao tc sau: Dch hai module mt cch tch bit
TASM Main TASM KetNoi

Sau tin hnh hp dchTLINK Main+KetNoi ta s c file Main.exe. 46

Chng 2: Lp trnh bng hp ng

2.3.4 Lin kt th tc vo mt th vin


Trong qu trnh lp trnh, c th mt s thao tc sau ta cn thc hin: a mt khi lnh vo cc ni khc nhau hoc cc module ngun Phn chia cc nhn gn (EQU) v MACRO gia cc phn khc nhau ca mt chng trnh hoc s dng li chng trong nhiu chng trnh. Vit mt chng trnh di, xong khng mun chia nh ra nhiu module v phi dch tng module ri lin kt chng vi nhau song chng trnh qu to khng th cha trong mt file.

gii quyt cc vn trn, chng trnh dch ca hp ng c lnh INCLUDE. Gi s ta mun to mt file INCLUDE cha khi lnh m ta mun cc module khc thm vo khi dch. C php: INCLUDE tn file (file cha khi lnh cn c a vo v tr m lnh INCLUDE ang ng) C ch: Khi chng trnh hp ng gp lnh INCLUDE th s tm n ng dn cha file c xc nh sau INCLUDE v a ton b khi lnh m tp ny cha xen vo v tr m lnh INCLUDE ang ng ca module chng trnh. Hay ni cch khc ni dung ca tp INCLUDE c t vo ng vng nh ca chng trnh m lnh INCLUDE ang c xc nh. V d: Gi s c mt chng trnh trong file A.ASM c ni dung nh sau:
.CODE Mov BX,10 Add AX,BX INCLUDE Sub AX,CX B.ASM

File B.ASM c ni dung nh sau:


Mov CX,3 Mov DX,4

Kt qu dch chng trnh A.ASM s nh sau:


.CODE Mov BX,10 Add AX,BX Mov CX,3 Mov DX,4 Sub AX,CX

Qua v d trn ta thy trong qu trnh dch chng trnh A.ASM, khi n dng lnh INCLUDE B.ASM

47

Chng 2: Lp trnh bng hp ng Th chng trnh dch ly tt c cc lnh ca B.ASM t vo v tr m lnh INCLUDE ang ng. ngoi ra cc lnh INCLUDE cn c tnh cht lng nhau vi nhng mc khc nhau, c ngha l trong file INCLUDE c th gi 1 file INCLUDE khc. Di y l c ch m chng trnh dch tm cc file INCLUDE: Nu trong lnh INCLUDE ch r tn a, ng dn, tn file th chng trnh dch s tm theo s xc nh trn Nu trong lnh INCLUDE ch xc nh tn file th chng trnh dch tin hnh tm file ny th mc hin thi. Trng hp khng tm thy th s tm file th mc c ch ra trong cu lnh: TASM i <ng dn n file > Nu khng tm thy file INCLUDE trong tt c cc trng hp trn th chng trnh dch s bo khng tm thy file INCLUDE.

2.3.5 Macro
Trc khi i vo tm hiu c ch hot ng, cch vit cc macro ta hy tm hiu mt s lnh thng c s dng vit cc macro. a. Cc lnh lp v iu khin iu kin khi dch Cc lnh lp c chc nng l thc hin mt khi lnh nhiu ln theo s ln lp (do ngi lp trnh t sn). Ta hy xem xt mt s lnh lp thng hay c s dng. 1. Lnh: REPT C php:
REPT <s ln lp> Khi lnh ENDM ; kt thc lnh lp

V d:
REPT 100 DB ? ENDM

Khi tin hnh dch n s thc hin khai bo nh sau:


DB ? DB ? DB ?

; 100 ln khai bo Trong trng hp ny ging nh khai bo


DB 100 Dup(?)

Tuy nhin, hai cch ny cng khng hon ton ging nhau. V d 2:
REPT 100 DB Count Count= Count+1

48

Chng 2: Lp trnh bng hp ng


ENDM

Khi dch ra s c trin khai nh sau:


DB 0 DB 1 DB 99

2.Lnh: IRP Chc nng: Lnh ny cho php lp mt khi lnh theo s lng danh sch cc tham s vi s thay i cc gi tr ca tham s trong khi lnh. C php:
IRP tn tham s <danh sch tham s> Khi lnh ENDM

V d:
IRP varX <0,2,4,6,8,10> DB varX ENDM

Khi dch khi lnh trn s c dch nh sau:


DB 0 DB 2 DB 10

3. Lnh: IF v IFE Chc nng: Lnh iu khin IF bo cho chng trnh dch hp ng bit phi thc hin vic dch khi lnh khi gi tr ca biu thc khc 0. C php:
IF <biu thc> Khi lnh ENDIF Hoc: IF <biu thc> Khi lnh 1 ELSE Khi lnh 2 ENDIF

V d:
IF is8086 ; nu CPU l 8086 th khng cho php lu vo Mov AX,EFh ; mt hng s trc tip vo ngn xp Push AX ELSE Push EFh ; nu khng phi th c th ENDIF

49

Chng 2: Lp trnh bng hp ng Lnh iu khin IFE ging IF song vic dch c tin hnh khi gi tr ca biu thc bng 0
IFE 0 Khi lnh ENDIF

Lun dch khi lnh bn trong. IFE v ENDIF 4. Lnh: IFDEF v IFNDEF Chc nng: Lnh iu khin IFDEF bo cho chng trnh dch hp ng bit phi thc hin khi lnh khi nhn c khai bo. C php:
IFDEF Nhn Khi lnh ENDIF Hoc: IF Nhn Khi lnh 1 ELSE Khi lnh 2 ENDIF

Lnh iu khin IFNDEF ging lnh trn nhng vi iu kin ngc li l chng trnh dch s thc hin khi lnh nu nhn c khai bo. V d: Trnh vic khai bo hai ln gi tr khi u ca mt bin
varX DB 1 . IF varX Display khai bo trng hp bin varX Err ELSE varX DB 10 ENDIF

5. Lnh: IFB v IFNB Chc nng: Cc lnh ny c dng kim tra vic truyn tham s cho macro. Chng bo cho chng trnh dch hp ng bit phi thc hin khi lnh nu tham s l rng. C php:
IFB Tham s Khi lnh ENDIF

Hoc:
IFB Tham s Khi lnh 1

50

Chng 2: Lp trnh bng hp ng


ELSE Khi lnh 2 ENDIF

Lnh iu khin IFNB ging lnh trn nhng vi iu kin ngc li l chng trnh dch s thc hin khi lnh nu thng s khng phi l du trng. 6. Lnh: IFDIF v IFIDN Chc nng: Lnh IFDIF bo cho chng trnh dch hp ng bit phi thc hin khi lnh nu hai tham s bng nhau. C php:
IFDIF Tham s1, Tham s 2 Khi lnh ENDIF Hoc: IFDIF Tham s1, Tham s 2 Khi lnh 1 ELSE Khi lnh 2 ENDIF

Lnh iu khin IFIDN ging lnh IFDIF nhng vi iu kin ngc li l chng trnh dch s thc hin khi lnh nu hai tham s phi l khc nhau. Ch : Tn tham s ca 2 lnh trn c phn bit ch hoa, ch thng (Case sensitive) b. C bn v Macro Macro bao gm mt tn i din v mt khi lnh. Khi chng trnh dch hp ng gp tn ny u trong chng trnh th khi lnh s c dch v t khi m lnh vo v tr m chng trnh gi tn macro. V c ch thc hin th macro ging vi file INCLUDE. Ngha l, mi ln chng trnh dch gp tn ca macro hay tn file INCLUDE th ton b khi lnh c nh ngha trong macro hay file INCLUDE s c dch v t vo v tr li gi. Tuy nhin, gia file INCLUDE v MACRO c mt s im khc nhau sau y. Nhn chung, macro mnh hn file INCLUDE v: Macro c th truyn tham s. Macro c th cha cc nhn cc b. Vic dch Macro din ra nhanh hn v macro l 1 phn ca chng trnh (khng phi l file) nn khng phi c t a ngoi. Macro cn s dng mt s lnh iu khin iu kin hoc lp khi thc hin. c. Khai bo v s dng Macro Trc khi s dng , ta phi khai bo macro theo c php sau: Tn macro MACRO cc tham s Thn macro ENDM 51

Chng 2: Lp trnh bng hp ng V d:


Cong MACRO Xor AX,AX Add AX,BX Add AX,CX Add AX,DX ENDM

s dng Macro ny ta ch cn a tn ca macro vo v tr gi.


Mov BX,10 Mov CX,100 Mov DX,1000 Cong

Ch : Chng trnh con thng c s dng khi cn tit kim vng nh v vi chng trnh con th cc m lnh c dch ra cho mt nhim v no ch c mt ln v n s c gi bt k ni no trong chng trnh khi cn n. Tuy nhin Macro c nh gi l thc hin nhanh hn v n thc hin mt nhm lnh nh 1 phn ca chng trnh gi n v khng phi s dng lnh CALL v RET. Macro linh hot hn so vi chng trnh con. Chng s dng cc lnh iu khin trao i gia tham tr v tham s hnh thc. Nu trong 1 chng trnh c nhiu on m lnh thc hin cc nhim v gn ging nhau th macro rt hiu qu. d. Trao i tham s Mt macro c th c 0,1 hoc nhiu tham s. Macro v d trn l macro khng c tham s. Ta xem xt mt s macro c tham s thng qua cc v d. V d: Dng 1 macro khai bo mt mng kiu byte, c di Length v tt c cc phn t c gn gi tr ban u l Value.
Mang MACRO Value, Length REPT Length DB Value ENDM

s dng Macro trn, ta ch vic truyn cc gi tr cho cc tham s. Chng hn, cn khi to 10 phn t v gi tr khi to l 0 th ta lm nh sau:
MangByte LABEL BYTE Mang 0,10

Cc gi tr 0 v 10 c truyn vo tham s Value v Length khi Macro c s dng. 0 v 10 l tham s thc trong khi Value v Length l tham s hnh thc. Khi macro c gi th cc tham s hnh thc c thay bi tham s thc. Ngha l:
MangByte LABEL BYTE REPT 10

52

Chng 2: Lp trnh bng hp ng


DB 0 ENDM

2.4 Chng trnh v d V d 0: Vit chng trnh in ra nhp vo mt k t nhng in ra mn hnh k t k tip. Chng hn, khi nhp vo k t a th m hnh li hin ra k t b. Bi gii Ta s dng hm 08 ca ngt 21h nhp 1 k t khng hin ln mn hnh ri sau dung hm 02 in k t k tip (tng m ASCII ln 1) ra mn hnh.
.MODEL Tiny .CODE Org 100h Jmp Start Start: Mov AH,08h ; nhp 1 k t khng hin ln mn hnh Int 21h Mov DL,AL ; chuyn m ASCII ca k t vo DL Inc DL ; DL cha k t k tip Mov AH,02h ; In ra mn hnh Int 21h ; Int 20h ; tr v DOS End Start

V d 1: Vit chng trnh in ra 256 k t ca bng m ASCII Bi gii Ta s dng mt vng lp FOR-DO v dng DL cha m ASCII ca cc k t trong bng m ASCII. CX cha s k t cn in (256). Mi k t cch nhau bi 1 du cch. Chng trnh c vit theo khung ca chng trnh COM
.MODEL Tiny .CODE Org 100h Jmp Start Start: Mov CX,256 ; s k t cn in Mov DL,0 ; k t u tin Mov AH,2 ; hm 2 ngt 21h in ra 1 k t ln mn hnh Tiep: Int 21h Mov BL,DL ; dng BL cha tm m ASCII ca k t Mov DL,32 Int 21 ; In du cch Mov DL,BL ; ly li k t in cui cng Inc DL ; sang k t tip theo Loop Tiep ; In k t k tip

53

Chng 2: Lp trnh bng hp ng


Int 20h ; tr v DOS End Start

V d 2: Vit chng trnh nhp vo mt dy cc k t ri hin th n theo th t ngc li. Bi gii Ta c th s dng ngn xp gii quyt bi ton ny. Mi khi c k t c nhp vo s c PUSH vo ngn xp, sau khi nhp xong (bng cch g Enter) th cc k t trong ngn xp s c POP ra v hin th theo th t ngc li so vi ban u.
.MODEL small .STACK 100h .DATA NhapXau db Nhap vao day ki tu: xuongdong db 13,10,$ .CODE Start: Mov AX,@Data Mov DS,AX Mov AH,9 Mov DX, offset NhapXau Int 21h ; in li mi nhp xu Xor CX,CX ; CX=0 Mov AH,1 DocVao: Int 21h Cmp AL,13 ; co phai Enter khong? JE ThoiDoc ; Neu l Enter, dung lai Push AX ; Cho vao ngan xep Inc CX ; Tang de dem so ki tu da nhap Jmp DocVao ThoiDoc: Mov AH,9 Mov DX, offset xuongdong Int 21h ;xuong dong va ve dau dong Mov DX, offset InXau Int 21h ; in li mi in xu InXau Mov AH,2 HienThi: Pop DX Int 21h Loop HienThi ; In ra cho den khi CX=0 Mov AH,4Ch ; Tro ve DOS Int 21h ; In tung ki tu trong ngan xep ; Nhap ki tu ,$ InXau db Day ki tu in ra theo thu tu nguoc lai la: ,$

54

Chng 2: Lp trnh bng hp ng


End Start

V d 3: Nhp vo hai s nguyn x v y (0<=x,y<=9), tnh hiu x-y v in kt qu ra mn hnh. Bi gii: Bi ton c chia thnh 3 phn: Nhp x v y Tnh hiu x-y In kt qu

Mt s lu : khi nhp vo bng hm 01 ca ngt 21h th AL s cha m ASCII ca k t va nhp. Chng hn, khi ta nhp vo s 3 th AL=33h (m ASCII ca 3), do vy nhn c s thc s ta phi em tr i 30h. Ngc li, khi in ra th ang dng s phi i sang m ASCII bng cch cng thm 30h. thc hin c php tr hai s. Ta tin hnh php so snh x v y, nu x>y ta ly x tr i y, ngc li ta ly y tr i x v in du tr trc kt qu.
.MODEL small .STACK 100h .DATA stringX db x= ,$ stringY db y= ,$ xuongdong db 13,10,$ Hieu db x-y = ,$ X .CODE Start: Mov AX,@Data Mov DS,AX Mov AH,9 ; in xu x = ; gi chng trnh con Nhp Mov DX, offset stringX Int 21h Call Nhap Mov x,AL Mov AH,9 ; in xu xung dng v v u dng ; in xu y = ; gi chng trnh con Nhp Mov DX, offset xuongdong Int 21h Int 21h Call Nhap Mov y, AL Mov AH,9 ; in xu xung dng v v u dng Mov DX, offset xuongdong Int 21h Mov DX, offset xuongdong db ? Y db ?

55

Chng 2: Lp trnh bng hp ng


Mov DX, offset xuongdong Int 21h Mov DL,x Sub DL,y Call Inra ; gi chng trnh con Inra Jmp Ketthuc ; nhayr Jb Behon ; nhy nu x<y Mov AL,y Sub AL,x Mov AH,2 Mov DL,- ; In du tr trc kt qu Int 21h Mov DL,AL Call Inra ; gi chng trnh con Inra Ketthuc: Mov AH,4Ch Int 21h End Start ;--------------------------------------; chng trnh con nhp, tr li s nhp c trong AL ;--------------------------------------Nhap Proc Mov AH,1 ; hm 01 nhp vo 1 k t Nhaplai: Int 21h Cmp AL,30h ; nh hn k t 0 Jb NhapLai ; nhp li Cmp AL,39h ; ln hn k t 9 Ja NhapLai ; nhp li Sub AL,30h ; i m ASCII sang s Nhap Endp ;--------------------------------------;chong trnh con In ra 1 s trong khong 0..9 trong DL ;--------------------------------------Inra Proc Mov AH,2 ; in ki t Add DL,30h ; i sang m ASCII Int 21h Inra Endp ;--------------------------------------; in xu x-y = ; DL=x

Cmp DL,y ; so snh x vi y

56

Chng 2: Lp trnh bng hp ng V d 4: Nhp vo mt xu k t ri in xu ra mn hnh Bi gii: y l mt bi tp khng kh, tuy nhin c mt s vn m ngi hc lp trnh cn bit trc khi vit chng trnh gii bi ton ny. l cu trc ca vng m (buffer) khi lu tr xu k t. Chng hn, xu Hello c lu tr trong vng m nh sau: Cha di thc ca Xu 5 H e l l o

Cha di ln nht ca xu 255

K t u tin

K t kt thc xu $

Byte u tin ca vng m cha di ln nht ca xu, byte th 2 cha di thc. Xu thc s c cha t byte th 3 tr i. Tuy nhin, thng thng th ngi dng kt thc vic nhp bng phm Enter c m ASCII l 13 nhng k t kt thc xu li l $ nn chng trnh phi x l vic ny bng cch sau: Ly a ch offset ca xu em cng vi ni dung byte th hai ri cng vi 2 th s tr n byte cui cng ca xu ang cha m ASCII ca Enter (13) ri thay th m ny bi k t kt thc xu l $. Di y l chng trnh hp ng:
.MODEL Tiny .CODE Org 100h Jmp Start XauIn db Nhap xau: ,$ XauOut db Xau vua nhap: ,$ Xuongdong db 13,10,24h Buffer db 100 dup(?) Start: Mov AH,9 Mov DX, offset XauIn Int 21h Mov AH,0Ah Mov DX, offset Buffer Mov BX,DX ; BX va DX cung tro den Buffer Mov BYTE PTR[BX],100 ; Do dai lon nhat cua Int 21h Mov AH,9 Mov DX, offset Xuongdong ; xuong dong va ve dau dong Int 21h Mov DX, offset XauOut ; Xau kq ; Khai bao buffer

57

Chng 2: Lp trnh bng hp ng


Int 21h Mov DX,BX ; BX,DX cung tro den Buffer Add BL,[BX+1] ; Cong vao do dai thuc cua xau vao BX Add BX,2 ; Tro den byte cuoi cung Mov BYTE PTR[BX],$ ; Thay the byte cuoi cung boi $ Add DX,2 ; bo qua hai byte dau Int 21h End Start ; in xau ra Int 20h ; tr v DOS

V d 5: Vit chng trnh to mt th mc vi tn th mc c nhp t bn phm. Bi lm Trc ht, ta phi nhp vo 1 xu k t tn th mc. Sau s dng hm 39h to th mc. Kt thc vic to th mc ta kim tra c Carry (CF), nu c Carry bng 1 th vic to th mc b li, ngc li l to thnh cng. Lnh JC (Jump if Carry equals to 1) thc hin vic .
.MODEL Tiny .CODE Org 100h Jmp Start TenThuMuc db Nhap ten thu muc: ,$ OK db Tao thu muc thanh cong,$ NotOK db Tao thu muc khong thanh cong,$ Xuongdong db 13,10,24h Start: Mov AH,9 Mov DX, offset TenThuMuc Int 21h Mov AH,0Ah Mov DX, offset Buffer Mov BX,DX Int 21h Mov AH,9 Mov DX, offset Xuongdong ; xuong dong va ve dau dong Int 21h Mov DX,BX Add BX,2 Add DX,2 Mov AH,39h Int 21h JC Error Mov AH,9 ; CF=1, bi loi ; BX,DX cung tro den Buffer ; Tro den byte cuoi cung ;bo qua hai byte dau, DX=ten thu muc ; ham tao thu muc Add BL,[BX+1] ; Cong vao do dai thuc cua xau vao BX Mov BYTE PTR[BX],$ ; Thay the byte cuoi cung boi $ ; BX va DX cung tro den Buffer Mov BYTE PTR[BX],100 ; Do dai lon nhat cua

58

Chng 2: Lp trnh bng hp ng


Mov DX, offset OK ; thanh cong Int 21h Jmp Ketthuc Error: Mov AH,9 Mov DX, offset NotOK ; Khong thanh cong Int 21h Ketthuc: Int 20h ; tr v DOS End Start

V d 6: Hy nh ngha trc mt mng cc s nguyn tr bi bin Mang. Hy sp xp theo chiu tng dn mng s nguyn ny ri in kt qu ln mn hnh. Bi lm y l mt bi ton hay gp khi hc cc ngn ng lp trnh. Ta s dng thut gii sp xp chn (INSERTION SORT) gii bi ton ny. tng nh sau: tm phn t ln nht ca mng ri t phn t vo cui dy, sau li tip tc qu trnh ny vi cc phn t cn li. Ti mi ln tm th mt phn t c t ng ch. bc lp th i c i phn t c t ng ch v ta ch cn tm phn t ln nht trong n-i phn t cn li. Ta t chc chng trnh ny thnh mt chng trnh chnh v mt chng trnh con. Chng trnh con Exchange s lm nhim v hon i v tr ca hai phn t ca dy.
.MODEL small .STACK 100h .DATA Thongbao db Day da sap xep: ,$ xuongdong db 13,10,$ Mang .CODE Start: Mov AX,@Data Mov DS,AX Mov AH,9 ; in thongbao ; nhay xuong dong ; BX= so phan tu cua mang Mov DX, offset Thongbao Int 21h Int 21h Mov BX,7 Mov DX, offset xuongdong db 8,4,3,1,2,5,1 Db $

Mov DX, offset Mang ; DX tro vao mang Dec BX ; so vng lp bn ngoi Lap: Mov SI,DX ; SI tr vo u mng Mov CX,BX ;S ln lp vng lp bn trong (tm max) Mov DI, SI ;gi s phn t th 1 l max

59

Chng 2: Lp trnh bng hp ng


Mov AL, [DI] ; AL= max TimMax: Inc SI ; phn t k tip Cmp [SI],AL ; phn t mi > max? JB Tiep ; khng ln hn max Mov DI,SI ; ln hn max, DI tr vo max Mov AL,[DI]; a max vo AL Tiep: Loop TimMax Call DoiCho Dec BX JNZ Lap ; In Mang Mov BX,DX ; BX tr n phn t u tin Mov CX,7 ; in c 7 phn t Mov AH,2 InMang: Mov DL,[BX] Add DL,30h Int 21h Int 21h Inc BX ; sang phn t k tip Loop InMang Ketthuc: Mov AH,4Ch Int 21h End Start ;--------------------------------------; chng trnh con DoiCho ;--------------------------------------DoiCho Proc Push AX Mov AL,[SI] XCHG AL,[DI] Pop AX Ret Nhap Endp ;--------------------------------------; in ra Mov DL,32 ; in du cch gia cc phn t cho d xem

2.5 TM TT
Chng ny trnh by cc vn c bn ca lp trnh hp ng: to v thc hin mt chng trnh hp ng, cc cu trc lp trnh c bn , chng trnh con v Macro. 60

Chng 2: Lp trnh bng hp ng Trong phn vit v thc hin mt chng trnh chng ta tm hiu cu trc y mt lnh hp ng, cch thc khai bo hng v bin. Phn ny cng trnh by khung ca chng trnh hp ng, cch to, dch v chy mt chng trnh hp ng. Cng c quan trng ca cc ngn ng lp trnh l cc cu trc lp trnh. Hp ng ch h tr cc lnh nhy (jump) v so snh (compare) cho php ngi lp trnh ci t cc cu trc ny. Phn cc cu trc lp trnh c bn trnh by c php, cch ci t cc cu trc: tun t, iu kin (IF-THEN), iu kin phn nhnh (IF-THEN-ELSE), la chn (CASE), cc cu trc lp xc nh trc (FOR-DO) v lp khng xc nh trc (WHILE-DO, REPEAT-UNTIL). Phn cui cng l cc vn lin quan n chng trnh con. Ngoi cc vn c bn lin quan n chng trnh con nh: c ch, cu trc ca chng trnh con, cch thc truyn tham s, phn ny cng cp n vic chia nh mt chng trnh ln thnh cc chng trnh con v gi chng vo cc module hay th vin nh cc lnh iu khin PUBLIC, EXTRN, GLOBAL. Ngoi ra, cng vi chng trnh con, Macro l mt la chn khi vit chng trnh hp ng. Macro khng nhng thc hin nhanh, mm do v kh hiu qu. Chng ta cng kho st v cc lnh iu khin hay c s dng trong cc Macro, cch khai bo v s dng Macro.

2.6 BI TP
Bi 1: Vit chng trnh in ra mn hnh 26 ch ci A Z. Bi 2: Vit chng trnh nhp vo 1 s nguyn n (0 n 9), tnh tng S=1+2+3++n ri in kt qu ra mn hnh. Bi 3: Vit chng trnh nhp vo hai s nguyn x v y (0 x,y 9), tnh tng x+y ri in kt qu ra mn hnh. Yu cu: Chng trnh c t chc nh sau: gm 1 chng trnh chnh, 2 chng trnh con hoc 2 macro, 1 dng nhp vo 1 s v 1 dng in kt qu . Bi 4: Vit chng trnh nhp vo t bn phm hai s nguyn a v b vi 0 a,b 256. Tnh tch ca chng v in kt qu ra mn hnh. Yu cu chng trnh phi c t chc thnh cc chng trnh con hoc macro. Bi 5: Vit chng trnh nhp vo mt tn file ri xa file . In ra mn hnh thng bo xa thnh cng hay khng. Bi 6: Vit chng trnh to mt file backup t mt file vn bn ngun. Tn ca file vn bn c nhp vo t bn phm.

2.7 TI LIU THAM KHO


1. Vn Th Minh. K thut Vi x l. Nh XB Gio dc 1997. 2. ng Thnh Phu. Turbo Assembler v ng dng. NXB Khoa hc v K thut 1998. 3. Nguyn Minh San. Cm nang Lp trnh h thng (bn dch). NXB Tng cc Thng k.2001.

61

Chng 3: Cc cng c h tr

CHNG 3. CC CNG C H TR
Phn ny trnh by v trnh tin ch Debug, chng trnh m phng Emu8086, s kt hp chng trnh hp ng vi ngn ng bc cao. Cui cng ta xem xt v cc chng trnh ngt.

3.1 B G RI DEBUG
3.1.1 Tng quan v Debug
DEBUG l mt trnh tin ch tr gip ngi lp trnh tc ng n qu trnh thc hin mt cng vic (task) no . ng thi Debug l mt chng trnh dng g li chng trnh. Debug h tr cho ngi dng cc nhm lnh sau: Thao tc vi b nh: - lnh hin th ni dung nh (lnh D) - lnh sa ni dung nh (lnh E) - in thng tin vo mt vng nh (lnh F) - chuyn ni dung t vng nh ny sang vng nh khc (lnh M). Thao tc vi cc files: - t tn file (lnh N) - np ni dung mt file vo b nh (lnh L) - chy file dang .COM hoc .EXE (lnh G) Truy cp n cc sector trn a (lnh L,W) Son tho v thc hin mt chng trnh hp ng (lnh A,G) Theo di qu trnh thc hin 1 chng trnh - xem, sa cha trng thi thanh ghi (lnh R) - chy tng bc (lnh T, lnh P) Thc hin mt s thao tc vo/ra i vi cc thit b ngoi vi (lnh I v O) Dch ngc t m my sang hp ng (lnh U) Tm kim (lnh S)

3.1.2 S dng Debug


a. Khi ng Debug Cch 1: Ti th mc DOS: C:\DOS> g debug <Enter> C:\DOS> debug <Enter> Du nhc ca Debug l du Cch 2: 62

Chng 3: Cc cng c h tr G C:\DOS> debug tenfile.exe <Enter> Khi c trnh debug v chng trnh ngi dng (tenfile.exe) u c a vo b nh RAM. b. Mt s lu - a ch ca vng nh (address): c th hin di dng SEGMENT:OFFSET, chng hn nh: DS:0300 hoc 9D0:01FF Nu on hin ti, ta c th ch cn dng a ch offset, v d: 02FFh - Khong (range): th hin a ch mt vng nh: address L value v d: DS:1FF L 10 - Mi lnh ca Debug gm 1 k t duy nht - Gia tn lnh v tham s c t nht 1 du cch - Dng du cch ging nh dng du phy (,) - Kt thc 1 lnh ang c thc hin bng Ctrl+C hoc Ctrl+Break - Lnh c thc hin nu g tn lnh v g enter

3.1.3 Cc lnh ca Debug


1. Lnh: A Chc nng: Son tho v dch trc tip cc lnh hp ng. C php: A [a ch] <Enter> Trong [a ch] l a ch offset ca nh (dng hexa) m ta cn t m lnh vo. V d:
-A 1FF0 xxxx:1FF0 xxxx:1FF2 mov AH,9 mov AH,9

- Nu cha xc nh c a ch ban u th lnh s t ng a vo a ch offset 0100h - Nu pht hin li trong mt lnh, Debug s a ra thng bo ERROR v hin li a ch nh c li ngi s dng sa li lnh cho ng - Mun tr li du nhc Debug th nhn hai ln Enter - Lnh A lun s dng a ch tuyt i, ngha l lun i km vi 1 a ch chnh xc. 2. Lnh: C Chc nng: So snh ni dung ca hai vng nh. C php: C khong,a ch <Enter> 63

Chng 3: Cc cng c h tr Trong khong bao gm a ch u tin v a ch cui cng ca mt vng nh, a ch l 1 a ch offset bt u ca 1 vng nh khc. V d: -C 100, 1FF, 500 <Enter> Hoc: -C 100 L 100, 500 <Enter>

300

3FF

100

1FF

3. Lnh: D Chc nng: Hin th ni dung ca mt vng nh. C php: D [khong |a ch] <Enter> Trong khong bao gm a ch u tin v a ch cui cng ca mt vng nh, hoc a ch l 1 a ch offset ca 1 nh khc. V d: -D 100, 1FF <Enter> Hoc: -D 100 L 11 <Enter> Nu s dng lnh: -D <address> <Enter> Th ni dung cc nh t a ch cho n 128 byte k tip s c hin ln. Nu tip tc -D <Enter> Th ni dung 128 byte k tip theo c hin ln. 4. Lnh: E Chc nng: Hin ni dung nh v cho php sa ni dung nh. C php: 64

Chng 3: Cc cng c h tr Cch 1: E <a ch> <danh sch cc gi tr> <Enter> V d: -E 01FF:0100 ABC9A <Enter> Th cc nh t 01FF:0100 n 01FF:0103 s ln lt c in cc cc gi tr l m ASCII ca A, B, C v gi tr 9A. Cch 2: E <a ch> <Enter> Th ni dung ca nh c a ch trn s hin ln, ta c th thay i gi tr mi v sau nu mun thay i ni dung ca nh k tip th nhn du cch (SPACE), cn nu mun dng li th nhn Enter tr li mn hnh debug. V d: -E 01FF:0100 9A Nu mun sa gi tr ca nh ny th a vo gi tr mi vo ri nhn Enter n hin ni dung ca nh k tip 01FF:0101 v c tip tc nh vy cho n khi nhn Enter nu mun dng. 5. Lnh: F Chc nng: Np cc gi tr trong danh sch vo mt vng nh. C php: F <khong> <danh sch cc gi tr> <Enter> V d: -F 01FF:0100 L 4,ABC9A <Enter> Th cc nh t 01FF:0100 n 01FF:0103 s ln lt c in cc cc gi tr l m ASCII ca A, B, C v gi tr 9A. 6. Lnh: G Chc nng: Cho thc hin mt chng trnh ang hiu chnh. Vic thc hin chng trnh s dng li khi t n a ch dng. Sau , hin th cc thanh ghi v dng lnh thc hin tip theo ca chng trnh C php: G [<a ch u>] [<a ch dng>] <Enter> Nu g lnh - G [<a ch u>] <Enter> Th chng trnh s c thc hin t a ch u cho n lnh cui cng ca chng trnh. Nu l chng trnh con th dng li khi gp lnh RET, nu l macro th dng li khi gp lnh ENDM. Nu g lnh - G <Enter> Th chng trnh s c thc hin t a ch c np vo cp thanh ghi CS:IP cho n lnh cui cng ca chng trnh 7. Lnh: H Chc nng: Cng v tr hai gi tr hexa v hin th kt qu ca tng v hiu ln mn hnh. C php: H <gi tr 1> <gi tr 2> <Enter> 65

Chng 3: Cc cng c h tr V d: - H 10, 0f <Enter> 1F, 01 Kt qu ca tng l 1F v ca hiu l 01 8. Lnh: I Chc nng: c v hin th gi tr ca mt cng ln mn hnh. C php: I <a ch ca cng vo> <Enter> V d: - I 1f <Enter> 26 26 l gi tr c c t cng 1F. 9. Lnh: L Chc nng: Chuyn ni dung 1 file hoc ni dung sector ca a vo vng nh. C php: Dng 1: L [<a ch>,[, a, sector, s sector]] <Enter> c s liu t sector u ca a, vi s lng sector v bt u t a ch c ch ra tham s th nht. V d 1: - L 01FA:0100 1 0A 30 <Enter> c s liu ca 48 sector (30h) bt u t sector 0A ca a B v vng nh c a ch 01FA:0100. (Cc a c k hiu nh sau: 0 l a A, 1 l a B, 2 l a C, 3 l a D). Nu tn file c t tn bi lnh N <tn file> th: - lnh L s np ni dung ca file vo vng nh mc nh CS:0100 - lnh L <a ch> s np ni dung ca file vo vng nh c a ch <a ch>. V d 2: - N cong2so <Enter> - L <Enter> Ni dung ca file cong2so s c np vo vng nh c a ch u l CS:0100 V d 3: - N cong2so <Enter> - L 03FF <Enter> Ni dung ca file cong2so s c np vo vng nh c a ch u l CS:03FF 10. Lnh: M Chc nng: Chuyn ni dung t mt vng nh sang mt vng nh khc. C php: -M <khong>,<a ch> <Enter> Nu trong khong v a ch khng xc nh on th s ly DS l a ch on.. 66

Chng 3: Cc cng c h tr V d nu s dung 1 trong 3 lnh sau: - M 01FF:0100, 010E, 01FF:0200 <Enter> - M 01FF:0100 L F, 01FF:0200 <Enter> - M 01FF:0100 010E 01FF:0200 <Enter> Th 15 byte t vng nh c a ch 01FF:0100 n 01FF:010E s c chuyn n vng nh c a ch bt u l: 01FF:0200 11. Lnh: N Chc nng: t tn cho file. Lnh ny thng c i km vi cc lnh L v W dng tn file . C php: -N <tn file>.EXE (hoc .COM) <Enter> V d: - N Tenfilemoi.exe <Enter> - L <Enter> 12. Lnh: O Chc nng: a mt byte d liu ra cng. C php: -O <a ch cng ra>, <gi tr> <Enter> V d: - O 02F, 20 <Enter> 13. Lnh: Q Chc nng: Thot khi Debug v tr v DOS. C php: -Q <Enter> 14. Lnh: R Chc nng: Hin thi v sa i ni dung cc thanh ghi. C php: -R [thanh ghi | F] <Enter> C cc trng hp sau: - R <enter> hin th v sa i ni dung cc thanh ghi. - RAX <enter> hin th ni dung ca thanh ghi AX v cho php sa ni dung , v d: AX 101A. Nu khng mun thay i gi tr th nhn Enter, cn mun sa gi tr mi th nhp gi tr mi vo ri nhn Enter. Mun hin th ni dung ca cc thanh ghi k tip (BX, CX, DX) th nhn du cch (SPACE). - R F <Enter> hin v sa ni dung ca thanh ghi c. 15. Lnh: S 67

Chng 3: Cc cng c h tr Chc nng: Tm trong vng nh xc nh bi khong cc k t trong danh sch. C php: -S <khong>,<danh sch> <Enter> Nu khong khng xc nh th on ngm nh l thanh ghi DS. V d 1: - S 01FF:0100 0110 20 <Enter> Hoc: - S 01FF:0100 L 10 20 <Enter> Th s tm cc nh c ni dung bng 20h trong vng nh t 01FF:0100 n 01FF:0110. Kt qu l tt c a ch ca cc nh c ni dung bng 20 th s c hin th, chng hn c 3 nh c ni dung bng 20 th mn hnh s lit k nh sau: 01FF:0100 01FF:0104 01FF:0105 V d 2: - S 01FF:0100 0110 ABC2E <Enter> S tm 4 lin tip cha gi tr l m ASCII ca A, B, C v 2E. 16. Lnh: T Chc nng: Thc hin mt hay nhiu lnh bt u t a ch CS:IP hoc t a ch c ch ra du = , v hin th trng thi ton b cc thanh ghi sau mi lnh. C php: -T [= a ch][, s lnh] <Enter> - a ch l a ch ca lnh u tin s thc hin - s lnh c thc hin trong ch ny. C cc trng hp sau: - T <enter> lnh ti a ch CS:IP s c thc hin. - T 10 <enter> 10 lnh bt u t a ch CS:IP s c thc hin. Trng thi ca tt c cc thanh ghi sau mi lnh s c hin ra 1 cch lin tc. - T=2FF,10 <enter> s thc hin 16 lnh bt u t lnh ti a ch CS:02FF. 17. Lnh: P Chc nng: Ging lnh T nhng thc hin c 1 chng trnh con. C php: -P [= a ch][, s lnh] <Enter> 18. Lnh: U Chc nng: Dch ngc cc lnh di dng m my nm trong vng nh sang dng hp ng v hin th a ch, m my v lnh dng gi nh ln mn hnh. C php: -U [khong][a ch]<Enter> C cc trng hp sau: 68

Chng 3: Cc cng c h tr - U <khong> <enter> cc lnh nm trong vng nh s c dch ngc. - U <a ch> <enter> dch ngc bt u t a ch cho n 128 byte k tip. - U <enter> dch ngc bt u t a ch CS:IP n 128 byte k tip. 19. Lnh: W Chc nng: Ghi d liu ln a. C php: -W [a ch [, a, sector u, s sector] <Enter> D liu trong vng nh bt u t a ch ghi ln a vo sector u tin cho n sector cui do s sector xc nh. V d: - N cong2so.exe <enter> - W 01FF:0200, 1, 2A,5 <Enter> D liu t vng nh xc nh bi 01FF:0200 c ghi vo a B t sector 2A v ghi vo 5 sector vi tn file l cong2so.exe.

3.2 CHNG TRNH M PHNG EMU8086


Hin nay, hu ht cc desktop ti cc phng thc hnh ti Vit nam chy h iu hnh 32bit nh windows XP, NT, 2000 th ngi lp trnh khng th gi ngt bng chng trnh ngi dng c. Thay v gi ngt, cc h iu hnh 32-bit cung cp mt tp cc hm giao din lp trnh ng dng gi l API (Application Progammable Interface) cho php ngi lp trnh gi hm. ngi mi hc lp trnh h thng c th lp trnh vi cc ngt m khng b gii hn bi phin bn khc nhau ca cc h iu hnh ca Microsoft th cch tt nht l hc lp trnh trn mi trng m phng Emulator 8086. Phn ny chng ti gii thiu v phn mm m phng CPU 8086 ca cng ty phn mm Emu8086 Inc., phin bn 2.58. Cc phin bn mi hn c th c download ti a ch ca trang web: www.emu8086.com.

3.2.1 Cc chc nng son tho, dch v thc hin chng trnh.
Di y l mn hnh cho php ngi s dng vit mt chng trnh hp ng hoc chy th mt v d c sn:

69

Chng 3: Cc cng c h tr

New: to mt chng trnh mi, khi ngi dng s c hi xem s to file chng trnh dng no: COM, EXE, BIN hay BOOT . Open: m mt file chng trnh ngun hp ng. Samples: Lit k cc file chng trnh mu c sn do chng trnh m phng cung cp. Save: Lu file chng trnh ngun Compile: dch file chng trnh ngun Emulate: cho php thc hin chng trnh ngun. Cc trng thi ca qu trnh thc hin chng trnh c hin th trn mn hnh m phng di y. Calculator: ngi dng c th nhp 1 vo mt biu thc vi cc s l: c du, s dng word hoc s dng byte tnh ton. Kt qu tnh ton c hin th mt trong cc dng s thp phn, nh phn, hexa hoc s bt phn (c s 8). Convertor: B chuyn i ga cc c s. Emu8086 h tr chuyn i gia cc c s 16 thnh c s 10 c du hoc khng du. Chuyn i t c s 8 thnh thnh c s 2 (nh phn). Mt m ASCII gm 2 s hexa cng c th c chuyn i thnh thp phn hoc nh phn.

3.2.2 Chc nng m phng qu trnh thc hin chng trnh.


Di y l mn hnh m phng trng thi thc hin mt chng trnh.

70

Chng 3: Cc cng c h tr

Cc chc nng chnh: Hnh: Mn hnh m phng chng trnh Load: ti chng trnh. Trc khi thc hin th chng trnh s c ti vo trong b nh. Chng trnh c th dng cc file thc hin c nh EXE, COM, BIN, BOOT hoc di dng file ngun ASM. Reload: ngi dng c th ti li 1 chng trnh. Single Step: chy chng trnh theo ch tng lnh. Vi ch ny, ngi dng c th quan st trng thi cc thanh ghi, b nh trong Run: ch chy tt c cc lnh trong chn trnh. Trn mn hnh, ngi dng c th quan st trng thi cc thanh ghi v onh b nh s dng cho on m lnh ca chng trnh. Phn registers mang ni dung ca cc thanh ghi trong cc thanh ghi AX,BX,CX v DX c chia lm 2 na. phn cao (H) v phn thp (L). Ngoi ra, ta c th xem ni dung cc thanh ghi on, con tr lnh, ngn xp Phn b nh lu tr on m chng trnh. a ch on (dng hexa) c lu trong thanh ghi CS. Danh sch a ch offset c hin th di cc dng hexa v thp phn. Ngoi ra, ngi dng c th c th xem: kt qu hin th ln m hnh (nhp chut vo nt User Screen). m ngun ca chng trnh (nhp chut vo nt Actual Source). trng thi ALU (nhp chut vo nt ALU). 71

Chng 3: Cc cng c h tr ni dung ca ngn xp (nhp chut vo nt Stack). ni dung ca thanh ghi c (nhp chut vo nt FLAG)

3.2.3 Cc chng trnh mu.


Emu8086 cung cp cho ngi dng 54 chng trnh mu. Chng rt c ch cho ngi hc lp trnh hp ng. T cc chng trnh n gin nh Hello world cho n mt s chng trnh thao tc vi mt s thit b ngoi vi in hnh nh mn hnh, my in chy th cc chng trnh mu ny, ngi dng nhp chut vo nt Samples/ More Samples chn ra mt file chng trnh chy th. Di y l cc gii thch cho 1 mt s chng trnh mu. Chng trnh Calculate SUM. Chng trnh tnh tng cc phn t trong mt mng V1 c nh ngha trc v lu kt qu vo bin V2. Di y l ni dung chng trnh (li gii thch c dch ra ting Vit):
#make_BIN# ; Tnh tng cc phn t trong mng V1 ; Lu kt qu vo bin V2. ; S phn t ca mng: MOV CX, 5 ; AL cha tng cc phn t: MOV AL, 0 ; BX l ch s ca mng: MOV BX, 0 ; Tnh tng: Tong: ADD AL, V1[BX] ; c th thay i gi tr ca mng ; t gi tr phn t bng ch s MOV V1[BX], BL ; phn t k tip: INC BX ; lp cho n khi CX=0: ; tnh tng ca tt c cc phn t LOOP Tong ; lu kt qu vo bin V2: MOV V2, AL HLT ; Khai bo bin: V1 DB 4, 3, 2, 1, 0 V2 DB 0

chng trnh trn c mt s im khc so vi cc chng trnh ta thng thy. Lnh u tin ca chng trnh l #make_BIN#. Chng trnh s c vit di dng file binary. 72

Chng 3: Cc cng c h tr Cc bin ca chng trnh c khai bo phn cui. Chng trnh tnh tnh tng hai s nguyn c nhp t bn phm nm trong khong [32768..32767] ri in kt qu ra m hnh. Cc file chng trnh lin quan: calc.asm v emu8086.inc Trong file emu8086.inc cha mt s chng trnh con v macro c gi t calc.asm. Di y l chng trnh calc vi cc li gii thch c vit li bng ting Vit.
; y l chng trnh ; Tnh tng ca chng ; ri in kt qu ra mn hnh ; chng trnh dng COM #make_COM# include 'emu8086.inc' ORG JMP num 100h bo bin, hng START DW ? ; Nhy qua on khai ; khai bo bin: START: ; Nhp vo s th nht: CALL PTHIS DB 13, 10, 'Calculation Range: [-32768..32767]', 13, 10 DB 13, 10, 'Enter first number: ', 0 ; Gi chng trnh con scan_num nhp 1 s, kt qu tr li ; l mt s c lu trong thanh ghi CX CALL MOV CALL CALL ADD JO CALL MOV CALL JMP scan_num num, CX PTHIS scan_num num, CX overflow PTHIS AX, num print_num exit ; Lu s th nht vo bin num: ; nhp vo s th 2: msg2 DB 13, 10, 'Enter second number: ', 0 ; cng cc s: nhp vo 2 s nguyn ; trong khong [-32535, 32536] t ngi dng

; In kt qu bng chng trnh con PTHIS DB 13, 10, 'The sum is: ', 0

; x l li trn: overflow:

73

Chng 3: Cc cng c h tr
PRINTN 'We have overflow!' exit: RET ;================================= ; Khai bo vic s dng cc chng trnh con ; hoc macro trong emu8086.inc ; Chng trnh con SCAN_NUM c vo 1 s ; t ngi dng v lu vo thanh ghi CX DEFINE_SCAN_NUM ; Chng trnh con PRINT_NUM in ra ; mt s c du nm trong AX ; Chng trnh con PRINT_NUM_UNS in ra ; mt s khng du nm trong AX ; do PRINT_NUM gi n DEFINE_PRINT_NUM DEFINE_PRINT_NUM_UNS ; Chng trnh con ; CALL PTHIS: DEFINE_PTHIS ;================================= END PTHIS in ra gi tr rng (NULL) ; xu c nh ngha sau lnh

Di y l cc macro v chng trnh con trong file INCLUDE emu8086.inc c gi n bi chng trnh trn.
Macro scan_num (trong cc li gii thch c vit li bng ting Vit) ;*************************************************************** ; y l macro ; nhn vo mt s nguyn c du ; v lu trong thanh ghi CX: DEFINE_SCAN_NUM MACRO

; Khai bo cc bin cc b LOCAL make_minus, ten, next_digit, set_minus LOCAL too_big, backspace_checked, too_big2 LOCAL stop_input, not_minus, skip_proc_scan_num LOCAL remove_not_digit, ok_AE_0, ok_digit, not_cr JMP SCAN_NUM PUSH PUSH PUSH MOV skip_proc_scan_num PROC DX AX SI CX, 0 NEAR

74

Chng 3: Cc cng c h tr
; reset flag: MOV next_digit: ; nhp vo 1 k t t bn phm ; t vo trong AL, dng dch v BIOS phc v bn phm MOV INT AH, 00h 16h CS:make_minus, 0

; v in ra: MOV INT AH, 0Eh 10h

; Kim tra xem c phi l du m: CMP JE AL, '-' set_minus

; phm Enter hon thnh vic nhp s CMP JNE JMP not_cr: CMP JNE MOV MOV DIV MOV PUTC PUTC JMP AL, 8 ; C nhn phm 'BACKSPACE'? backspace_checked DX, 0 AX, CX CS:ten CX, AX ' ' 8 next_digit ; xa du cch ; backspace again. ; c, th b i s cui cng ;chia ; chia cho 10. AL, 13 not_cr stop_input ; 13 l m ASCII ca phm Enter?

backspace_checked: ; ch cho php nhp vo s CMP JAE JMP ok_AE_0: CMP JBE AL, '9' ok_digit AL, '0' ok_AE_0 remove_not_digit

remove_not_digit: PUTC PUTC PUTC 8 ' ' 8 ; phm backspace. ; xa nu k t nhp c khng phi l s ; phm backspace.

75

Chng 3: Cc cng c h tr
JMP ok_digit: ; nhn CX vi 10 PUSH MOV MUL MOV POP AX AX, CX CS:ten CX, AX AX ; DX:AX = AX*10 next_digit ; i nhp vo ch s k tip.

; kim tra li nu s qu ln ; CMP JNE DX, 0 too_big

; i t m ASCII ra s thc s SUB AL, 30h

; add AL to CX: MOV MOV ADD JC JMP set_minus: MOV JMP too_big2: MOV MOV too_big: MOV DIV MOV PUTC PUTC PUTC JMP stop_input: ; kim tra c: CMP JE NEG CS:make_minus, 0 not_minus CX AX, CX CS:ten CX, AX 8 ' ' 8 ; backspace. ; xa i s nhp vo cui cng. ; backspace again. ; o li ch s cui CX, DX DX, 0 ; khi phc li gi tr c sao chp ; trc khi sao lu DX=0 CS:make_minus, 1 next_digit AH, 0 DX, CX CX, AX too_big2 next_digit ; nhy nu s qu ln ; lu li

next_digit ; ch nhn Enter hoc phm xa li.

76

Chng 3: Cc cng c h tr
not_minus: POP POP POP RET make_minus ten SCAN_NUM DB DW ENDP ? 10 ; s dng bin ny nh 1 c. ; dng nhn. SI AX DX

skip_proc_scan_num:

Di y l Macro DEFINE_PRINT_NUM in ra mt s nguyn nm trong AX (cc li gii thch c vit li bng ting Vit)
;*************************************************************** ; Trong macro ny nh ngha chng trnh con DEFINE_PRINT_NUM ; in ra mt s nguyn trong AX ; gi n chng trnh con PRINT_NUM_UNS in ra mt s c du ; chng trnh con lin quan: ; DEFINE_PRINT_NUM DEFINE_PRINT_NUM v DEFINE_PRINT_NUM_UNS !!! MACRO

; khai bo cc nhn cc b LOCAL not_zero, positive, printed, skip_proc_print_num JMP skip_proc_print_num PROC DX AX AX, 0 not_zero 1 '0' printed NEAR PUSH PUSH CMP JNZ PUTC JMP not_zero: ; Kim tra du ca AX, CMP JNS NEG PUTC positive: CALL printed: POP POP RET AX DX PRINT_NUM_UNS AX, 0 positive AX '-' PRINT_NUM

77

Chng 3: Cc cng c h tr
PRINT_NUM DEFINE_PRINT_NUM ENDP ENDM

skip_proc_print_num:

;***************************************************************

Di y l on chng trnh ca macro DEFINE_PRINT_NUM_UNS, macro cha mt chng trnh con PRINT_NUM_UNS, in ra mt s nguyn khng du.
; Macro ny nh ngha mt th tc in ra mn hnh mt s nguyn ; khng du trong AX ; vi gi tr t 0 n 65535 MACRO

DEFINE_PRINT_NUM_UNS

;khai bo cc nhn cc b LOCAL begin_print, calc, skip, print_zero, end_print, ten LOCAL skip_proc_print_num_uns JMP skip_proc_print_num_uns PROC NEAR

PRINT_NUM_UNS

; ct cc gi tr thanh ghi vo ngn xp PUSH PUSH PUSH PUSH AX BX CX DX

; C cm in s 0 trc 1 s MOV CX, 1

; kt qu ca AX/ 10000 lun nh hn 9). MOV ; AX =0? CMP JZ begin_print: ; kim tra s chia (nu l 0 th nhy n nhn end_print: CMP JZ BX,0 end_print AX, 0 print_zero BX, 10000 ; s chia.

; trnh in s 0 trc s cn in CMP JE CX, 0 calc

; nu AX<BX th kt qu ca php chia l 0:

78

Chng 3: Cc cng c h tr
CMP JB calc: MOV MOV DIV CX, 0 DX, 0 BX ; AX = DX:AX / BX (DX=s d). ; thit lp c. AX, BX skip

; in s ci cng ; AH =0, b b qua ADD PUTC MOV skip: ; tnh BX=BX/10 PUSH MOV MOV DIV MOV POP JMP print_zero: PUTC end_print: ; khi phc li gi tr thanh ghi ban u POP POP POP POP RET ten PRINT_NUM_UNS DW ENDP 10 ; nh ngha s chia. DX CX BX AX '0' AX DX, 0 AX, BX CS:ten BX, AX AX begin_print ; AX = DX:AX / 10 (DX=s d). AL, 30h AL AX, DX ; ly s d t php chia cui cng. ; chuyn sang m ASCII

skip_proc_print_num_uns: DEFINE_PRINT_NUM_UNS ENDM

;***************************************************************

79

Chng 3: Cc cng c h tr

3.3. KT NI HP NG VI CC NGN NG BC CAO


Phn ny gii thiu cch thc kt ni mt chng trnh hp ng vi cc ngn ng bc cao nh C v Pascal. Vic chuyn i mt on chng trnh t ngn ng bc cao sang dng hp ng s lm cho tc thc hin ca chng trnh s c ci thin ng k. Trong nhiu trng hp, n cn lm n gin cho ngi lp trnh khi vit cc on chng trnh lin quan n thao tc phn cng v cc thit b ngoi v thng qua cc dch v mc BIOS.

3.3.1 Ngn ng C v Hp ng
lin kt cc on chng trnh hp ng vo ngn ng C hoc Pascal th ngi ta thng s dng mt trong hai cch: s dng inline assembly hoc vit tch bit cc module. a . S dng inline assembly Chn cc khi lnh hp ng vo chng trnh c vit bng ngn ng C. y l phng php nhanh v n gin. Ngi lp trnh ch phi thm t kha asm ng trc mi lnh. Vi phng php ny, ta c th d dng a cc lnh ca hp ng vo gia cc dng lnh ca C. C php y ca mt dng lnh inline-assembly
asm [<Nhn>:] <lnh> <cc ton hng>

hoc cng c th dng c mt khi lnh hp ng c gi bn trong cp du {}. Trong nhiu trng hp dng sau c s dng thun tin hn. c bit khi c nhiu hn 1 lnh hp ng.
asm { [<Nhn 1>:] <lnh 1> <cc ton hng 1> [<Nhn 2>:] <lnh 2> <cc ton hng 2> . [<Nhn n>:] <lnh n> <cc ton hng n> }

Mi khi chng trnh dch ca C gp t kha asm trong dng lnh inline assembly th chng trnh dch s chuyn dng lnh hp ng ny vo v dch vi vic qui chiu bin C ra dng tng ng ca hp ng thc hin. Di y l mt v d minh ha c hai dng c php trn. Trong v d ny in hai xu k t c nh ngha sn ln mn hnh. Chng trnh c vit theo dng c php th nht
#include <stdio.h> #include <conio.h> void main() { char xau1 []=Hello World $; char xau2 []=Hello Vietnam $; asm mov dx,offset xau1;

80

Chng 3: Cc cng c h tr
asm mov ah,09; asm int 21h; /*xung dng */ asm mov ah,02; asm mov dl,13; asm int 21h; /*v u dng */ asm mov dl,10; asm int 21h; printf (%s, xau2); getch();/*ch ngi dng g vo 1 phm*/ }

Chng trnh c vit theo dng c php th hai


#include <stdio.h> #include <conio.h> void main() { char xau1 []=Hello World $; char xau2 []=Hello Vietnam $; asm { mov dx,offset xau mov ah,09 int 21h /*xung dng */ mov ah,02 mov dl,13 int 21h /*v u dng */ mov dl,10 int 21h } printf (%s, xau2); /* in xu 2*/ getch(); /*ch ngi dng g vo 1 phm*/ }

Ch rng: mi li gii thch s phi tun th theo cch ca chng trnh C. Chng trnh dch C khi gp t kha asm th cc bin xau1, xau2 ca C s c nh x sang cc bin tng ng ca hp ng. Ngha l, vi t kha asm ta c th t cu lnh hp ng bt k u trong on m chng trnh chng t rnh C. Qua trnh dch ca chng trnh C c cha cc dng lnh hp ng nh sau: 81

Chng 3: Cc cng c h tr Chng trnh dch C (turbo C) s dch file chng trnh ngun (phn m rng .C ) t dng .C sang dng hp ng (ui .asm). Chng trnh TASM s dch tip file .asm sang file .obj Trnh lin kt TLINK s thc hin vic lin kt to file .exe.

Trong trng hp chng trnh ch cha cc ln C m khng c inline-assembly th chng trnh dch s dch trc tip file ngun C sang file .OBJ. Cc cch truy xut bin ca ngn ng C; Truy xut trc tip: Cc bin c khai bo trong C c coi nh cc bin ton cc s dung chung cho c C v cc inline- assembly. V d chng trnh di y tnh tng 2 s nguyn x v y ri lu kt qu vo bin sum.
#include <stdio.h> #include <conio.h> void main() { int x,y, Sum; /*Nhp x v y t bn phm*/ printf (x = printf (y = asm { mov ax,x add ax,y mov Sum,ax } printf (Tong la: %d, Sum); /* in tong*/ getch(); /*ch ngi dng g vo 1 phm*/ } ); scanf(%d,&x); ); scanf(%d,&y);

Truy xut gin tip qua thanh ghi ch s:

S dng mt thanh ghi lm ch s ca mng. V d di y ta tnh tng cc phn t ca mt mng gm 6 s nguyn c khai bo trc.
#include <stdio.h> #include <conio.h> void main() { int Sum; int A[]=(3,2,1,5,6,7}; asm { mov bx,offset A /*bx ch s ca phn t u tin */ xor ax,ax /* ax cha tng */ mov cx,6 /* s phn t */

82

Chng 3: Cc cng c h tr
Cong: add al,[bx] inc bx loop Cong mov Sum,ax } printf (Tong la: %d, Sum); /* in tong*/ getch(); /*ch ngi dng g vo 1 phm*/ }

hm.

Truy xut n tham s truyn cho hm: Trong cch truy xut ny, ta c th dng bin kiu con tr (pointer) lm tham s truyn ca V d 1:

Chng trnh v d sau in ra 1 xu k t c nhp t bn phm v xu k t ny c truyn vo mt tham s ca hm InXau.


#include <stdio.h> #include <conio.h> void InXau(char *xau); /*Chng trnh con in ra mt xu k t*/ void InXau(char *xau) { asm { mov ah,9 mov dx, offset xau int 21h } } /*chng trnh chnh*/ void main() { char *s1; /*Nhp vo 1 xu t bn phm*/ printf (Nhap vao xau: /*In xau va nhp*/ InXau(s1); getch(); /*ch ngi dng g vo 1 phm*/ } ); scanf(%s,&s1);

V d 2: Vit hm di chuyn con tr mn hnh n v tr (x,y) trn mn hnh (ging lnh gotoxy(x,y) trong Pascal.
#include <stdio.h> #include <conio.h> void gotoxy(int x,int y);

83

Chng 3: Cc cng c h tr
/* Hm di chuyn con tr mn hnh n v tr x,y trn mn hnh */ void gotoxy(int x,int y) { asm{ mov ax,x /*honh lu trong dl */ mov dl,al mov ax,y /*tung lu trong dl */ mov dh,al /*t v tr con tr*/ mov ah,02 mov bh,00 int 10h } } /*chng trnh chnh*/ void main() { int x=50, y=10; gotoxy(x,y); printf ((%d,%d),x,y); getch(); /*ch ngi dng g vo 1 phm*/ } /*ngt phc v mn hnh*/

V d 3: Cc lnh nhy c th c thc hin bn trong cc hm trong C. Di y l mt hm nhn u vo l 1 k t ch, hm s kim tra k t ch c nm trong khong t [az] hay khng. Nu ch thuc khong (ng) th s i k t ch t thng sang hoa.
char upcase(char ch) { asm mov al,ch; /*lu k t trong al*/ asm cmp al,a; asm jb khongxet; asm cmp al,z; /*l k t ng sau z*/ asm ja khongxet; asm and al,5fh; khongxet: } /*l k t ng trc a*/

- Cc kt qu tr v t hm Cc kt qu tr v t hm c lit k trong bng di y: 84

Chng 3: Cc cng c h tr

Kiu char short int int unsigned int dword pointer - Lnh iu khin #pragma inline C php: #pragma inline

Thanh ghi AL AL AX AX DX:AX DX:AX

D liu (byte) 1 1 2 2 4 4

V d: vit chng trnh tm gi tr nh nht trong 2 s bng ngn ng C c xen inline assembly
#pragma inline #include <stdio.h> #include <conio.h> int min(int x, int y); /*chng trnh chnh*/ void main() { int m,n; /*Nhp vo 2 s t bn phm*/ printf (m= ); scanf(%d,&m); printf (n= ); scanf(%d,&n); /*In min*/ printf (So be la: %d, min(m,n)); getch(); /*ch ngi dng g vo 1 phm*/ } int min(int x, int y); /*Chng trnh con tm min*/ int min(int x, int y) { asm { mov ax,m cmp ax,n jb thoat mov ax,n thoat:

85

Chng 3: Cc cng c h tr
return(_ax); } }

b . Vit tch bit cc module hp ng v C Trong phng php trn th c lnh C v hp ng cng c cha trong 1 file. Phng php trn kh nhanh v hiu qu i vi cc chng trnh nh (on m chng trnh b hn 64KB). i vi cc chng trnh ln th cc module c t chc trong cc file khc nhau. Ta c th vit cc module C v hp ng hon ton tch bit, sau tin hnh dch ring r tng module sau lin kt chng vi nhau trc khi cho chy. Cui cng ta thu c mt file thc hin c (exe) bng cch trn cc file c vit bng C v hp ng. Di y l m t cho phng php thc hin ny:

File ngun C file1.C

File ngun hp ng file2.asm

Chng trnh dch C

Chng trnh dch hp ng

file1.obj

file2.obj

Trnh lin kt (Tlink)

file1.exe

86

Chng 3: Cc cng c h tr Khi ta son xong chng trnh ngun file1.C v file2.asm th ta c th dch v lin kt bng lnh: tcc file1 file2.asm Lnh dch trn s c thc hin nh sau: trnh bin dch turbo C dch file1.C thnh file1.asm trnh bin dch tcc s gi trnh bin dch tasm dch file2.asm thnh file2.obj trnh bin dch tcc s gi trnh lin kt Tlink lin kt hai file file1.obj v file2.obj thnh file1.exe.

Vic vit tch bit module ra vi nhau rt c li cho cc chng trnh c nhiu lnh hp ng. Khng nhng thun li cho vic bo tr m phg php ny cn tn dng ti a kh nng ca trnh bin dch hp ng v trnh c cc nhc im ca inline-assembly. Tuy nhin, thc hin c s lin kt theo cch ny th khi vit cc module hp ng ngi lp trnh phi bt buc tun th tt c cc qui nh ca vic lin kt vi module C. l cc vn lin quan n segment, chuyn i tham s, cch qui chiu n cc bin ca C, v bo tn cc bin thanh ghi. Cc vn cn phi gii quyt khi vit tch cc module C v module hp ng: 1. Module hp ng phi s dng s sp xp cc on b nh (segment) tng thch vi ngn ng C. y l vn lin quan n vic khai bo v s dng m hnh b nh v cc on b nh (segment). Di y l mt s lnh iu khin n gin c lin quan n cc qui nh ca C. + Lnh iu khin DOSSEG bo cho trnh bin dch TASM sp xp cc on b nh (segment) theo th t nh qui nh ca Intel. Ngn ng C v hu ht cc ngn ng bc cao khc cng phi sp xp cc on b nh theo qui cch ny. Nh vy th t sp xp cc on b nh trong module hp ng cng phi tun th theo qui cch ny. + Lnh iu khin MODEL bo cho trnh bin dch TASM bit kch thc m hnh b nh. Theo sau lnh . MODEL l cc kiu m hnh b nh (Tiny, Small, Compact, Medium, Large v Huge) ging nh vic chn cc ty chn trong mi trng C khi dch. Lnh iu khin .MODEL cn c mc nh v dng (NEAR hoc FAR) ca chng trnh con c xy dng bi lnh iu khin PROC. + Cc lnh iu khin .CODE, .DATA, .FARDATA, v .CONST ca nhm lnh iu khin segment n gin cng to c nhng segment tng thch vi C. V d: Tnh tng ca dy s nguyn sodau + (sodau+1) +(sodau+2) + +socuoi, vi socuoi>sodau. Chng trnh c t chc lm hai file. File hp ng Tong.asm cha on chng trnh tnh tng cn file ngn ng C InTong.C s cha on chng trnh in kt qu ca tng ny. Module hp ng c vit nh sau:
.MODEL Small .DATA EXTRN XTRN .CODE PUBLIC _Sum _sodau: WORD _socuoi: WORD

PUBLIC Tong dw ?

87

Chng 3: Cc cng c h tr
_Sum PROC Mov CX, _socuoi Sub CX, _sodau Inc CX ; CX cha s lng cc s Mov BX,_sodau ; TinhTong: Add AX,BX Inc BX ; BX= sk tip Loop TinhTong ; tiep tuc tinh tong neu CX<>0 Mov Tong,AX Ret _Sum ENDP END Hm _Sum s c chng trnh ca C gi t m hnh dch Small ca turbo C vi cu lnh: Sum(). Di y l module C ca file InTong.C extrn int sodau; extrn int socuoi; extrn int Sum(); void main() { printf (So dau: ); scanf(%d,&sodau); printf (So cuoi ); scanf(%d,&socuoi); printf (Tong la: %d , Sum()); } BX cha s u tin Xor AX,AX ; AX cha tng

to c file chy c (ui exe) ta thc hin lnh sau (gi s tt c cc file lin quan u cng nm trong 1 th mc vi tcc v turbo C c ci t trn C trong th mc tc).
tcc -ms Ic:\tc\include Lc:\tc\lib InTong Tong.asm

Ch : Nu mun lin kt Sum vi m hnh b nh dng khc chng hn compact th ta phi chn ty chn compact trong khi dch bng tcc v trong chng trnh Tong.asm ta phi sa lnh .Model Small thnh .Model Compact Khi mun s dng on b nh kiu FAR trong Tong.asm th ta phi s dng lnh iu khin .FARDATA. 4. Cc khai bo PUBLIC, EXTERNAL v s tng thch kiu d liu Ta tm hiu v chng trnh c t chc thnh nhiu module v c lu tr trn nhiu file khc nhau.. Chng trnh c lin kt bng cc module ca C v hp ng cng l chng trnh nhiu file, do phi tha mn cc yu cu v khai bo nhn (tn bin, tn hm) gia cc module vi nhau, c th l: Trong cc module vit bng hp ng phi:

88

Chng 3: Cc cng c h tr Khai bo PUBLIC trc nhng nhn (tn bin, tn hm) m cc file khc s s dng n bng c php:
PUBLIC _tn nhn 1, _ tn nhn 2, khai bo nhn (xc nh kch c)

V d: Vi tn nhn l bin nh:


PUBLIC _giatri1, _giatri2 giatri1 DB 10 giatri1 DW 1000

Vi tn nhn l tn hm:
PUBLIC _Sum _Sum PROC < Cc lnh trong thn hm> _Sum ENDP

Khai bo EXTRN trc nhng bin ngoi c file ny s s dng n. C php nh sau:
EXTRN _tn nhn 1: kiu nhn 1, _tn nhn 2: kiu nhn 2,

V d: Vi tn nhn l bin nh:


EXTRN _x1: BYTE, _x2: WORD

Vi tn nhn l hm:
EXTRN _Ham: PROC

+ S tng thch gia cc kiu v khai bo d liu c cho trong bng sau: Kiu khai bo d liu trong C Unsigned char Char Enum Unsigned short Short Unsigned int Int Unsigned long Long Float Double Kiu khai bo d liu trong hp ng Byte Byte Word Word Word Word Word Dword Dword Dword Qword 89

Chng 3: Cc cng c h tr Long double Near Far V d:chng trnh tnh giai tha Chng trnh c t chc thnh hai module: module C v module hp ng. Mi module c mt nhim v nh sau: Module C: c s cn tnh giai tha, gi chng trnh con thc hin vic tnh giai tha v in kt qu ra mn hnh. Module ny c lu trong file file1.C
#include <stdio.h> #include <conio.h> extern GiaiThua(); int number, ketqua; /*chng trnh chnh*/ void main() { int m,n; /*Nhp vo 1 s t bn phm*/ printf (Nhap vao 1 so: ); scanf(%d,&number); GiaiThua(); /*In min*/ printf (Ket qua la: %d, ketqua); getch(); /*ch ngi dng g vo 1 phm*/ }

Tword Word Dword

Module hp ng: tnh giai tha. Module ny c lu trong file file2.asm


.MODEL Small .DATA EXTRN .CODE PUBLIC _GiaiThua _GiaiThua PROC Mov _ketqua, 1 ; ket qua tinh giai thua Mov temp, 2 ;bat dau nhan tu 1*2 Mov CX,_number ; so cac thua so Dec CX Tinh: Mov AX,_ketqua ; AX chua ket qua Mul temp ; nhan ket qua voi s k tip Mov _ketqua, AX _number: WORD,_ketqua: WORD temp dw ?

90

Chng 3: Cc cng c h tr
Inc temp Loop Tinh ; tiep tuc tinh giai thua neu CX<>0 Ret _GiaiThua ENDP END

Sau khi son xong, c th tin hnh dch v lin kt chng trnh bng lnh:
tcc ms Ic:\tc\include Lc:\tc\lib file1 file2.asm

Sau khi sa li, chng trnh s c dc thnh file file1.exe. c . Mt s im cn lu Khi vit chng trnh C v hp ng lin kt vi nhau ta cn ch hai im: Bo v cc thanh ghi: Mt chng trnh con (hm hoc th tc) vit bng hp ng c lin kt vi chng trnh C phi bo tn cc thanh ghi on, l cc thanh ghi: BP,SP,CS,DS v SS. Gi tr ca cc thanh ghi ny phi c lu vo ngn xp bng cc lnh PUSH trc cc lnh khc trong cc chng trnh con hoc macro. phn cui cc chng trnh con (trc lnh ret) th cc lnh ny phi c khi phc li bng cc lnh POP. Gi tr tr li ca cc hm: Ging ngn ng C v cc ngn ng khc, cc hm c xy dng bng bng hp ng khi lin kt vi C cng c th tr v mt gi tr (tn hm mang mt gi tr). Xong cc gi tr tr v ca cc hm c vit bng hp ng tun th cc qui nh sau: Kiu gi tr tr v Unsigned char Char Enum Unsigned short Short Unsigned int Int Unsigned long Long Float Double Long double Near Far Ni cha gi tr tr v AX AX AX AX AX AX AX DX:AX DX:AX nh ngn xp 8087, thanh ghi ST(0) nh ngn xp 8087, thanh ghi ST(0) nh ngn xp 8087, thanh ghi ST(0) AX DX:AX

91

Chng 3: Cc cng c h tr d. Mt s v d v truyn tham s gia cc hm ca C v hp ng. V d 1: Vit chng trnh tnh giai tha vi yu cu: kt qu ca hm tnh giai tha l mt i s ra ca hm (ch khng phi l gi tr tr li ca hm [ging v d trong phn b, 2 ca mc 3.3.1 ]). Module C: c s cn tnh giai tha, gi chng trnh con thc hin vic tnh giai tha. Ly v in kt qu (t i s ca hm) ra mn hnh. Module ny c lu trong file file1.C
#include <stdio.h> #include <conio.h> extern GiaiThua(int number, int near *ketqua); /*chng trnh chnh*/ void main() { int n, kq; /*Nhp vo n t bn phm*/ printf (Nhap vao 1 so: ); scanf(%d,&n); GiaiThua(n,&kq); /*In min*/ printf (Ket qua la: } %d, ketqua); getch(); /*ch ngi dng g vo 1 phm*/

Module hp ng: tnh giai tha v lu kt qu vo i ca hm. Module ny c lu trong file file2.asm
.MODEL Small .DATA Gtri DW ? temp dw ? .CODE PUBLIC _GiaiThua _GiaiThua PROC ARG _number: WORD,_ketqua: WORD /* bao ve gia tri thanh ghi BP */ /*BP,SP tro den dau stack*/ Push BP Mov BP,SP

Mov Gtri, 1 ; ket qua tinh giai thua Mov temp, 2 ;bat dau nhan tu 1*2 Mov CX,_number ; so cac thua so Dec CX Tinh: Mov AX, Gtri ; AX chua ket qua Mul temp Inc temp Loop Tinh ; tiep tuc tinh giai thua neu CX<>0 Mov BX, _ketqua ; nhan ket qua voi s k tip Mov Gtri, AX

92

Chng 3: Cc cng c h tr
Mov [BX],AX Pop Bp Ret _GiaiThua ENDP END

Sau khi son xong, c th tin hnh dch v lin kt chng trnh bng lnh:
tcc ms Ic:\tc\include Lc:\tc\lib file1 file2.asm

Sau khi sa li, chng trnh s c dc thnh file file1.exe.

3.3.2 Ngn ng Pascal v Hp ng


V nguyn l, th lin kt gia hp ng vi Pascal ging nh vic lin kt gia hp ng vi C. tuy nhin cng c mt s qui tc ring khi thc hin lin kt gia hp ng v Pascal. Cng nh hp ng v C, c hai cch lin kt gia hp ng v Pascal l dng inline assembly v vit tch bit gia cc module hp ng v module Pascal. a . S dng inline assembly trong Pascal Phng php ny thch hp cho ngi lp trnh pht trin cc chng trnh nh. Trong phng php ny ngi lp trnh s chn mt khi lnh hp ng vo mt chng trnh c vit bng ngn ng Pascal. y l phng php kh n gin v nhanh.
asm [<Nhn 1>:] <lnh 1> <cc ton hng 1> [<Nhn 2>:] <lnh 2> <cc ton hng 2> . [<Nhn n>:] <lnh n> <cc ton hng n> end;

Khi cc chng trnh dch ca Pascal gp t kha asm trong dng lnh inline-assembly th chng trnh dch s chuyn khi lnh hp ng ny vo v dch vi vic qui chiu bin Pascal ra dng tng ng ca hp ng thc hin. Di y l mt v d n gin minh ha: V d 1: vit chng trnh tm gi tr nh nht (min) cho hai s bng ngn ng Pascal c chn cc dng lnh dng inline-assembly. Gi s file chong trnh l Min.pas
Program Min; Uses crt; Var m,n: integer; function min(int x, int y): integer; /*Chng trnh con tm min*/ begin asm mov ax,x; cmp ax,y; jb thoat; mov ax,y;

93

Chng 3: Cc cng c h tr
mov x,ax; thoat: min=x; end; end; Begin Clrscr; /*Nhp vo 2 s t bn phm*/ write (m= ); readln(m); write (n= ); readln(n); /*In min*/ write (So be la: End. , min(m,n)); readln(); /*ch ngi dng g vo 1 phm*/

thc hin chng trnh ta g lnh:


tpc Min.pas <enter>

Chng trnh s c dch ra file exe. b .Vit tch bit nhiu module hp ng v Pascal ring r Ging nh vit tch bit module v hp ng, khi vit tch bit gia Pascal v hp ng cng phi x l mt s vn tng t nh: cc lnh iu khin dch, cc vn lin kt thng tin qua cc bin, bo v v khi phc gi tr cc thanh ghi on v s tng thch v kiu d liu. Trong cc vn trn, hu ht cc vn u c gii quyt tng t nh vic i vi C v hp ng. S tng thch v kiu d liu c i cht khc bit, di y l bng tng thch kiu d liu gia hp ng v Pascal. Kiu khai bo d liu trong Pascal Byte Word Shortint Integer Real Single Double Extended Comp Pointer Kiu khai bo d liu trong hp ng Byte Word Byte Word Fword DWord QWord TByte Qword Dword

94

Chng 3: Cc cng c h tr V d: Tnh tng cc phn t trong mt dy s nguyn dng khi bit s u tin v s cc phn t cn tnh. Chng trnh c thnh hai module. Module hp ng c nhim v tnh tng ca cc phn t. Module ny c lu vo file sum.asm
.MODEL Small .DATA EXTRN .DATA ? Tong dw ? .CODE PUBLIC Sum Sum PROC Mov CX, [sophantu] Mov AX, [sodau] Mov [tong],AX TinhTong: Inc AX Add [tong],AX Loop TinhTong ; tiep tuc tinh tong neu CX<>0 Mov AX, Tong Ret Sum ENDP END _sodau: WORD,_sophantu: WORD

Module Pascal c lu trong file InTong.pas


Program Tong; Uses crt; {F+} Var Sodau: integer; Sophantu: integer; function Sum: integer; external; {$I sum.obj} {F-} Begin Clrscr; write (So dau: ); readln(sodau); ); readln(sophantu); , Sum); write (So phan tu: End.

write (Tong la:

to ra file chy (.exe) ta tin hnh qua cc bc sau: Dch module hp ng ( to file sum.obj)
Tasm sum <Enter>

95

Chng 3: Cc cng c h tr Dch module Pascal c ln kt vi file sum.obj


Tpc ml Intong <enter>

3.4 CC CHNG TRNH NGT


Ngt l mt c ch yu cu CPU tm dng cng vic (task) ang thc hin thc hin 1 cng vic khc. Ni c th hn, ngt yu cu CPU tm dng chng trnh ang thc hin thc hin mt chng trnh con phc v ngt. Ngi ta tm chia ngt ra lm hai loi: ngt cng v ngt mm. Cc ngt mm c kch hot bng lnh INT n trong n l s hiu ngt di dng mt s hexa. Ngt cng khc vi ngt mm ch khng c kch hot bng mt lnh INT n trong chng trnh m c kch hot bng cc tc ng ca cc tn hiu linh kin in t nh bn phm, a,.. Phn ny gii thiu v cc ngt v cc dch v mc BIOS v mc h iu hnh DOS v cch vit chng trnh thng tr v chng trnh con ngt.

3.4.1 ng dng cc ngt ca BIOS & DOS


My tnh c 256 ngt c nh s hiu t 00h n FFh. Trong cc ngt c s hiu t 00h n 1Fh l cc ngt ca BIOS, cn cc ngt cn li t 20h n FFh l cc ngt ca DOS. Di y ta s tm hiu cc ngt theo tng nhm ngt. a. Cc ngt ca BIOS & DOS a ch S hiu ngt Chc nng

Cc ngt phc v h thng 0-3 4-7 8-B C-F 10-13 14-17 18-1B 1C-1F 0 1 2 3 4 5 6 7 CPU: chia cho 0 CPU: chy tng bc ca DEBUG CPU: ngt NMI (hin thng bo halt) CPU: thc hin n im dng (break point) CPU: trn s (overflow) In ni dung ra m hnh Phc v lin lc D tr

Cc ngt cng 20-23 24-27 28-2B 2C-2F 96 8 9 A B IRQ0: CLK (18.2 ln/s) ni t chip 8253 IRQ1: bn phm IRQ2: u vo ca 8259 th 2 IRQ3: giao din ni tip

Chng 3: Cc cng c h tr 30-33 34-37 38-3B 3C-3F C D E F IRQ4:giao din ni tip IRQ5: thng ni vi my in ni tip IRQ6: phc v a mm IRQ5: thng ni vi my in song song

Cc ngt thc s c trng cho BIOS 40-43 44-47 48-4B 4C-4F 50-53 54-57 58-5B 5C-5F 60-63 64-67 68-6B 6C-6F 70-73 74-77 78-7B 7C-7F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F Mn hnh (I/O video) Xc nh cu hnh Cho bit kich c ca RAM Thm nhp a mm, a cng. Giao din ni tip Giao din vi cassete Kim tra bn phm Truy nhp my in song song Gi BASIC trong ROM Khi ng nng h thng (Ctrl+Alt+Del) Thng bo thi gian Qun l phm Ctrl+Break Dnh cho dng h a ch bng tham s cho mn hnh Cho bit cc tham s ca a mm a ch cc bng font cc k t m rng

Cc ngt ca DOS 80-83 84-87 88-8B 8C-8F 90-93 94-97 98-9B 9C-9F A0-A3 20 21 22 23 24 25 26 27 28 Kt thc chng trnh dng COM Cc hm ca DOS a ch kt thc chng trnh a ch th tc Ctrl+Break Bo li a c a mm, a cng Ghi a Kt thc chng trnh v thng tr Dnh cho cc hm khng c DOS cung cp d 97

Chng 3: Cc cng c h tr liu 29-3F 40 41 42-49 4A 4B-6F 70-77 78-7F 80-F0 F1-FF D tr BIOS phc v a mm a ch ca bng a cng 1 D tr Hn gi D tr Ngt cng ca 8259 th 2 D tr Dng cho b thng dch BASIC D tr

b. C ch hot ng khi mt ngt c kch hot Khi c mt yu cu ngt s hiu N n chn CPU v nu yu cu ngt ny c CPU p ng Khi CPU s thc hin cc cng vic sau: 1. Ct ni dung ca thanh ghi c (FR) vo nh ca ngn xp. (Bng vic t ng thc hin cu lnh PUSHF). 2.Cm cc ngt khc tc ng vo CPU CPU chy ch bnh thng. t cc c =0 v TF =0 bng cch thc hin cc lnh: CLI v CLT. 3. Ct a ch on (segment) ca chng trnh gi chng trnh ngt vo ngn xp bng lnh PUSH CS. 4. Ct a ch lch (offset) ca lnh k tip ca chng trnh gi chng trnh ngt vo ngn xp PUSH IP. 5. Ly a ch mi ca chng trnh con phc v ngt s hiu N trong bng vector ngt bng cch ly a ch offset v segment ca ngt N t bng vector ngt. IP=[N*4] CS=[N*4+2] 6. Khi gt lnh cui cng ca chng trnh con phc ngt (lnh IRET). B vi x l s quay li chng trnh gi ngt ti a ch tr v v khi phc cc gi tr ca cc thanh ghi t ngn xp bng cc lnh sau: POP IP POP CS POPF Gii thch cho mc 5. Ta bit rng cc a ch ca chng trnh con phc v ngt c lu vo trong mt bng c kch thc 1K t a ch 0000h n 03FFh ca b nh RAM. Bng vector ngt lu a ch ca 256 chng trnh con phc v ngt v mi a ch chim 4 byte trong 2 98

Chng 3: Cc cng c h tr byte dnh cho a ch on (segment) v 2 byte dnh cho a ch lch (offset). Nh bng trn, i ch ca chng trnh con phc v ngt 0 chim byte 0-3, ngt 1 chim byte 4-7 v chng trnh con phc v ngt th N s c a ch 4*N. Trong 2 byte [4*N] v [4*N+1] l a ch lch (offset) v 2 byte [4*N+2] v [4*N+3] l a ch on (segment). c. Cc ngt ca BIOS v DOS phc v bn phm - Ngt 16h ca BIOS Hm 0h: ngha: Ch c mt k t t bn phm (nu c k t trong vng m bn phm th s nhn c k t , cn khng th ch n khi bn phm c nhn. u vo: AH=0 Int 16h u ra: Nu AL<>0 th AL cha m ASCII ca k t AH cha m SCAN ca k t Nu AL= 0th AL cha m bn phm m rng Hm 1h: ngha: Kim tra xem trong vng m ca bn phm c k t hay khng (khng i n khi k t c trong vng m m tr ngay iu khin li cho chng trnh)?. u vo: AH=01 Int 16h u ra: Nu ZF=1 khng c k t trong vng m bn phm Nu ZF=0 th: Nu AL<>0 th: AL cha m ASCII ca k t AH cha m SCAN ca k t Nu AL= 0 th: AL cha m bn phm m rng Hm 02h: ngha: Kim tra trng thi mt s phm c bit ca bn phm (Insert, Caplock, NumLock, Scroll Lock). u vo: AH=02 Int 16h u ra: AL cha kt qu cc trng thi hay c bn phm , c ngha nh sau:

99

Chng 3: Cc cng c h tr 7 6 5 4 3 2 1 0

1: ch 1: ch 1: Num 1: Scroll 1: Alt b 1: Ctrl b 1: Shift 1: Shift n tri b n phi b Lock b Lock b n Insert Cap n n n Lock

V d: Vit chng trnh thit lp mt khu l k t A thi khi ng my


.MODEL small .STACK 100h .DATA matkhau db P,$ Saimatkhau db Sai mat khau ,$ Nhapmatkhau db Nhap mat khau: ,$ xuongdong db 13,10,$ .CODE Start: Mov AX,@Data Mov DS,AX Lap: Mov AH,9 Mov DX, offset Nhapmatkhau Int 21h ; in li mi nhp xu Mov AH,0 ; Nhap ki tu Int 16h Cmp AL,matkhau ; co phai Enter khong? JZ Done ; Neu l Enter, dung lai Mov AH,9 Mov DX, offset Saimatkhau Int 21h ;xuong dong va ve dau dong Jmp Lap Done: Mov AH,4Ch ; Tro ve DOS Int 21h End Start

Sau khi dch v hp dch chng trnh trn ta t tn chng trnh vo cuoi file autoexec.bat. Khi my khi ng thf chng trnh trn s c t dng thc hin. - Mt s hm phc v bn phm ca ngt 21h ca DOS Hm 06h: ngha: c mt k t t bn phm hoc a k t ra mn hnh. Nu c vo mt k t th u vo: AH=6 Int 21h 100

Chng 3: Cc cng c h tr DL=0FFh (nu DL<>0FFh s a ra mn hnh) u ra: Nu ZF=0 th c k t trong vng m bn phm v: AL cha m ASCII ca k t AH cha m SCAN ca k t Nu ZF= 1 th Vng m bn phm rng Hm 07h: ngha: Ch c mt k t t bn phm u vo: AH=07 Int 21h u ra: AL cha m ASCII ca k t (AL=0 s khng c k t no) AH cha m SCAN ca k t Hm 0Bh: ngha: c trng thi b m bn phm u vo: AH=0B Int 21h u ra: AL =0FFh c k t trong b m AL =00h khng c k t trong b m Hm 0Ch: ngha: xa b m bn phm, sau gi hm vo k t c s chc nng t trong AL u vo: AL =s hm ca k t. d. Ngt ca BIOS phc v mn hnh ngt 10h Mn hnh lm vic mt trong hai ch : vn bn (text) v ha (graphics). ch vn bn, cc k t c trnh by trong cc ma trn im 5x7 vi 25 dng v 80 ct. Mn hnh l hnh nh ca video RAM. Do vy ch text mt trang mn hnh cn ti thiu l 25 dng x 80 ct x 2 (1 byte m ASCII v 1 byte thuc tnh k t) =4000 bytes. Byte thuc tnh c dng nh sau: c Nhp nhy Red Mu nn Green Blue i m nht Red Mu ch Green Blue

Di y l mt s gi tr thng dng ca thuc tnh:

101

Chng 3: Cc cng c h tr

Gi tr 00 01 07 09 70 81 87 F0 Hm 00h:

V mu Khng hin th K t bnh thng K t bnh thng In m Nghch nh Nhp nhy K t bnh thng v Nhp nhy Nghch nh v Nhp nhy

Di y lit k mt s chc nng ca BIOS v ch vn bn ca mn hnh. ngha: t ch cho mn hnh u vo: AH=00 AL = ch mn hnh Int 10h Trong ch mn hnh = 0: 40 x 25 trng en. = 1: 40 x 25 16 mu.. = 2: 80 x 25 trng en (card mu). = 3: 80 x 25 16 mu. = 7: 80 x 25 trng en (card mono). Hm 01h: ngha: t kch thc con tr u vo: AH=01 CH = ta hng CL = ta ct Int 10h Hm 02h: ngha: t v tr con tr u vo: AH=02 BH = s trang mn hnh DH=s dng DL = s ct Int 10h Hm 03h: 102

Chng 3: Cc cng c h tr ngha: c v tr con tr u vo: AH=03 BH = s trang mn hnh Int 10h u ra: DH=s dng DL = s ct CH= ta hng ca con tr CL = ta ct ca con tr Hm 05h: ngha: t trang mn hnh hot ng u vo: AH=05 BL = s trang mn hnh Int 10h Hm 06h: ngha: Cun mn hnh ln (dng xc lp vng ca s vn bn hnh ch nht) u vo: AH=06 AL=s trang trng ho dng cun (AL=0 trng ton mn hnh) (CH,CL) = ta trn bn tri mn hnh (DH,DL) = ta di bn phi mn hnh BH= thuc tnh ca vng trng ca mn hnh. Int 10h Hm 07h: ngha: Cun mn hnh xung u vo: AH=07 AL=s trang trng ho dng cun (AL=0 trng ton mn hnh) (CH,CL) = ta trn bn tri mn hnh (DH,DL) = ta di bn phi mn hnh BH= thuc tnh ca vng trng ca mn hnh. Int 10h Hm 08h: ngha: c k t v thuc tnh ca n ti v tr con tr u vo: AH=08 BH=s trang Int 10h u ra: AL =m ASCII ca k t BL= thuc tnh ca k t. Hm 09h: 103

Chng 3: Cc cng c h tr ngha: Vit cc k t v thuc tnh vo v tr con tr ang ng (v tr con tr khng i). a k t ra, t mu cho k t. u vo: AH=09 BH= s trang mn hnh CX = s ln k t c a ra mn hnh AL = m ASCII ca k t BL= thuc tnh ca k t. Int 10h Hm 0Ah: ngha: Vit cc k t khng c thuc tnh vo v tr con tr ang ng (v tr con tr chuyn sang phi). Khng t mu cho k t. u vo: AH=0Ah BH=s trang mn hnh CX = s ln k t c a ra mn hnh AL =m ASCII ca k t Int 10h Hm 0Eh: ngha: Vit cc k t theo kiu teletype ra mn hnh (v tr con tr chuyn sang phi). u vo: AH=0Eh BH=s trang mn hnh BL = mu ca k t AL =m ASCII ca k t Int 10h Hm 0Fh: ngha: Ly kiu mn hnh hin hnh. u vo: AH=0Fh Int 10h u ra: AH=s ct ca mn hnh BH = s trang AL =ch hin thi ca mn hnh Hm 13h: ngha: Hin th mt dy k t. u vo: AH=13h BH=s trang mn hnh DL= DH= 104 s ct bt u hin th s dng bt u hin th

Chng 3: Cc cng c h tr ES:BP =a ch u ca vng nh cha dy k t cn hin th CX= di ca dy k t. Int 10h ch ha c thm mt s hm sau: Hm 0h: ngha: Chn kiu mn hnh. u vo: AH=00h AL = 0Dh: 320 x 200, 16 mu = 0Eh: 640 x 200 16 mu.. = 0Fh: 640 x 350, trng en. = 10h: 640 x 350 16 mu. = 11h: 640 x 480 2 mu. = 12h: 640 x 480 16 mu. = 13h: 320 x 200 256 mu. (ch vi card VGA) Int 10h Hm 0Bh: ngha: Chn b mu. u vo: AH=0Bh BH=0: chn mu cho nn BL=0-15 =1: chn b mu cho im. Int 10h Hm 0Ch: ngha: Hin th mt im. u vo: AH=0Ch DX=s hng CX=s ct AL = s mu ca im. BH=s trang mn hnh Int 10h Hm 0Dh: ngha: c thng tin ca mt im. u vo: AH=0Ch DX=s hng CX=s ct BH=s trang mn hnh Int 10h 105

Chng 3: Cc cng c h tr u ra: AL = s mu ca im.

d. Ngt ca BIOS v DOS phc v a ngt 13h Mi sector trn a s cha cc c trng (directory) ca cc file. Mi c trng ca mt file gm 32 byte cha cc thng tin sau: Byte 0h-7h 8h-0Ah 0Bh 0Ch-15h 16h-17h 18h-19h 1Ah-1Bh 1Ch-20h Ni dung Tn file Phn m rng Thuc tnh ca file Cha dng n Gi ca ln thay i cui cng Ngy ca ln thay i cui cng Cha s ca bng FAT Cha kch thc file

Byte thuc tnh c cu trc nh sau: Bit 7 Bit 6 Bit 5 =1: tr Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 =1: c ch

lu =1: th =1: tn =1: h =1: mc con nhn thng thuc tnh n

Di y l cc chc nng ca ngt 13h, ngt ca BIOS phc v a. Hm 0h: ngha: Reset li a mm, ch nn gi hm ny khi gp li trong khi truy cp a bng 1 trong 6 chc nng ca ngt 13h. u vo: AH=0h Int 13h u ra: Hm 01: ngha: Cho bit trng thi a u vo: AH=01h DL=s a Int 13h u ra: AH= trng thi. Hm 02 ngha: c mt hay nhiu sector u vo: AH=02h 106 AH= trng thi li

Chng 3: Cc cng c h tr DL=s a (0-3) DH=mt a (0: mt trn -1:mt di) CL=sector u cn c CH=rnh cha sector u tin cn c. AL=s lng sector cn c ES:BX =a ch vng nh cha thng tin c c. Int 13h u ra: Nu c CF=1 th AH= m li. Nu c CF=0 th AL= s sector c c. Hm 03: ngha: Ghi d liu ln a u vo: AH=03h DL=s a (0-3) DH=mt a (0: mt trn -1:mt di) CL=sector u cn c CH=rnh cha sector u tin cn c. AL=s lng sector cn c ES:BX =a ch vng nh cn ghi ln a. Int 13h u ra: Nu c CF=1 th AH= m li. Nu c CF=0 th AL= s sector ghi thnh cng. Hm 04: ngha: Kim tra CRC (kim tra d tha vng); khng so snh d liu trn a vi d liu trong vng nh m ch kim tra CRC. u vo: AH=04h DL=s a (0-3) DH=mt a (0: mt trn -1:mt di) CL=sector u cn c CH=rnh cha sector u tin cn c. AL=s lng sector cn c Int 13h u ra: Nu c CF=1 th AH= m li. Nu c CF=0 th thnh cng. Hm 05: ngha: To khun dng (format) cho a . u vo: AH=05h AL=s lng sector cn to trn 1 rnh. 107

Chng 3: Cc cng c h tr CH=s th t ca rnh cn to (0-39 hoc 0-79). DH=s th t ca mt a (0,1). ES:BX =tr n mt bng cha cc tham s sau: Byte 1: rnh cn to khun. Byte 2: mt a (0-trc, 1-sau). Byte 3: s th t ca sector. Byte 4: s byte ca sector. Ngoi ra, phi thm thng tin nm trn bng tham s a mm gm 11 byte. Int 13h u ra: Nu c CF=1 th AH= m li. Hm 15h: ngha: Xc nh loi a. u vo: AH=15h DL=s a (0-3) Int 13h u ra: AH=kiu a = 0: khng c a = 1: a khng pht hin c s thay i a = 2: a pht hin c s thay i a = 3: a cng Hm 16h: ngha: Kim tra c s thay i a hay khng. u vo: AH=16h DL=s a (0-3) u ra: AH= kt qu = 0: a cha thay i = 6: a thay i sau ln truy cp cui cng.

3.4.2 Chng trnh thng tr v chng trnh ngt


a. Chng trnh thng tr Khi nim v chng trnh thng tr Chng trnh thng tr (Terminate and Stay Resident- TSR) l chng trnh c th chy sau chng trnh khc, h tr kh nng kch hot, kh nng nm li b nh sau khi chy xong. Sau khi ta chy mt chng trnh khc vi mt iu kin no n s c kch hot hot ng tr li. 108

Chng 3: Cc cng c h tr Vi chng trnh bnh thng khi chy s c mt chng trnh ti (Program Loader trong command.com) np vo vng nh do DOS cp pht. Khi chng trnh thc hin xong th vng nh cp pht cho n c gii phng v DOS s nh du li vng nh ny cp pht cho chng trnh khc. Vi chng trnh thng tr th bc cui cng khng xy ra, chng trnh thng tr lm cho DOS nh du li min dnh cho DOS v vng b n chim, do vy sau ny DOS s khng cp pht vng nh ny cho chng trnh khc, v nh vy n c bo v chng b vit bi chng trnh khc, bng cch ny th chng trnh thng tr tr thnh mt b phn ca DOS. Ch c file dng COM vi cu trc nm gn trong mt on mi d dng tr thnh chng trnh thng tr. Ngoi hp ng, ngi ta c th vit chng trnh thng tr trn cc ngn ng lp trnh bc cao khc nh ngn ng C, Pascal Vit chng trnh thng tr Chng trnh thng tr c vit ging nh chng trnh thng thng v thm mt on m ca chng trnh thng tr vo vng nh dnh cho DOS, on m s khng c kch hot nu khng c trao iu khin. Vic thm mt on m tip dau vng dnh cho DOS c thc hin bng cc chng tnh con phc v ngt. l ngt s 27H hoc hm 31H ca ngt 21H. C hai cch lm cho chng trnh thng tr c kch hot l: dng ngt v n mt t hp phm (hot-key). Cc chng trnh thng tr thng sa ni dung ca vector ngt trong bng vector ngt lm cho n tr n a ch ca mnh trong b nh, nh th mi khi ngt tng ng c gi th chng trnh thng tr li c trao iu khin. vic lm ny c gi l chn vector ngt. Chng hn, nhiu chng trnh POP-UP thng sa ngt bn phm (vector ngt bn phm (s 9) nm ti a ch: 0:0024h) lm cho n tr n a ch ca mnh v ct a ch ca INT 9h cho n lm nhim v khi cn thit. Cc bc vit chng trnh thng tr Bc 1: Ly v t li vector ngt bng cc dch v ca DOS Ta lun cn n cc chng trnh con phc v ngt c ca h thng khng phi vit li trong chng trnh ca mnh on chng trnh c, v vy cn ly ni dung ca vector ngt c ct vo min d liu ca chng trnh thng tr, khi no cn s tr li gi tr ny cho vector ngt m chng trnh thng tr thay i. Gi tr ca mt vector ngt l 2 t tng ng vi a ch on (CS) v a ch lch (IP) ca chng trnh con phc v ngt tng ng. + Ly vector ngt (Get Interrupt Vector) Hm 35h: ngha: Ly a ch ca mt ngt t bng vector ngt. u vo: AH=35h AL=s hiu vector ngt Int 21h u ra: ES:BX = gi tr ca vector ngt. V d: on chng trnh sau ly vector ngt ca bn phm (INT 9h)
MODEL Tiny .CODE

109

Chng 3: Cc cng c h tr
Org 100h Jmp Load_Prog ; vng d liu SohieuNgat EQU 9h NgatCu DW 2 DUP(0); luu dia chi ngat cu Load_Prog PROC Mov AH,35 Mov AL, SohieuNgat Int 21h Mov NgatCu,BX ; lay dia chi . Load_Prog ENDP lech Mov NgatCu[2],ES ; lay dia chi doan

+ t gi tr cho mt vector ngt (Set Interrupt Vector) ngha: t li a ch ca vector ngt . u vo: AH=25h AL=a ch vector ngt Int 21h DS:DX = a ch ca chong trnh ngt. V d: on chng trnh sau t li i ch ca vector ngt.
MODEL Tiny .CODE Org 100h Jmp Load_Prog ; vng d liu SohieuNgat EQU 9h NgatCu DW 2 DUP(0); luu dia chi ngat cu Load_Prog PROC Mov AH,35h Mov AL, SohieuNgat Int 21h Mov NgatCu,BX ; lay dia chi Mov AH,25 Mov DX,offset Prog ; Dat vector ngat moi, tro vao PROG Int 21h . Load_Prog ENDP lech Mov NgatCu[2],ES ; lay dia chi doan

Sau , mi ln ngt bn phm c kch hot th chng trnh PROG ca ta s c thc hin. Tt nhin sau khi thc hin chng trnh PROG ny th ta phi t t li ic ch ca vector ngt bn phm. Bc 2: Lm cho chng trnh li thng tr 110

Chng 3: Cc cng c h tr C th lm cho chng trnh li thng tr bng cch s dng INT 27H hoc dch v 31H ca INT 21H. Trong phn ny ta ch xem xt vic s dng INT 27H. Ni chung tt c cc chng trnh thng tr u t np ns vo b nh sau t loi b phn ui ca mnh- l on m thc hin np chng trnh vo b nh hay cn c gi l phn tm tr. Di y l khung ca chng trnh thng tr bng cch chn ngt.
MODEL Tiny .CODE Org 100h Jmp Load_Prog ; vng d liu PROG PROC ; cc lnh ca chng trnh c vit y PROG ENDP Load_PROG PROC ; cc lnh ca phn thng tr ca chng trnh c vit y Mov, DX, offset Load_Prog Int 21h Load_PROG ENDP

b. Chng trnh con phc v ngt V c bn chng trnh con phc v ngt ( cho ngn gn ta gi l chng trnh ngt) ging nh mt chng trnh dng COM m ta tm hiu t cc phn trc. Tuy nhin, c mt s im lu khi ta mun vit mt chong trnh con phc v ngt l: Bo v cc thng tin trng thi v khi phc li khi kt thc chng trnh ngt Lnh cui cng ca chng trnh ngt l lnh IRET

Do vy, di y l khung ca mt chng trnh ngt, n c s dng khi vit mt chng trnh ngt.
MODEL Tiny .CODE Org 100h ; vng d liu SohieuNgat EQU 9h NgatCu DW 2 DUP(0); luu dia chi ngat cu Jmp Load_Prog Start: TenCTN PROC Push AX Push BX Push CX Push DX Push DI Push SI

111

Chng 3: Cc cng c h tr
Push DS Push ES ; Thn chng trnh thng tr Pop ES Pop DS Pop SI Pop DI Pop DX Pop CX Pop BX Pop AX IRET TenCTN ENDP ;-----------------------------Load_Prog PROC Mov AH,35 Mov AL, SohieuNgat Int 21h Mov NgatCu,BX ; lay dia chi Mov AH,25 Mov DX,offset TenCTN ; vao PROG Int 21h Exit: Mov DX,offset Load_Prog ; gi li cho thng tr Int 27h Load_Prog ENDP End Start lech Mov NgatCu[2],ES ; lay dia chi doan

3.5 TM TT
Chng ny trnh by v cc cng c lp trnh h tr lp trnh bng hp ng. Ta tm hiu v b g ri Debug-mt cng c quan trng gip ngi lp trnh h thng g li cho chng trnh. Trong phn Debug ta cp hai vn ch yu: cch s dng trnh tin ch Debug v tm hiu cc lnh do Debug cung cp. Tip n l tm hiu mt chng trnh m phng cho b x l 8086 l Emu8086. Chng trnh m phng ny khng nhng cung cp cho ngi hc cc c ch x l lnh, cc trng thi trong qu trnh thc hin mt chng trnhm cn cung cp cho ngi hc lp trnh h thng mt mi trng pht trin cc chng trnh hp ng n gin v 52 chng trnh mu theo nhiu dng khc nhau. Phn kt ni chng trnh hp ng vi cc ngn ng bc cao ta i su vo tm hiu co ch kt ni gia C v hp ng v cc vn lin quan. Trn thc t vic kt hp c hai ngn ng C v hp ng pht trin cc chng trnh h thng l rt thng dng. Ngoi ra, ta cng tham kho c ch kt hp tng t gia hp ngx v Pascal.

112

Chng 3: Cc cng c h tr Cui cng ta tm hiu v chng trnh ngt v chng trnh thng tr. Cc dch v ca BIOS v DOS. Trong ta tm hiu k v hai dch v in hnh l: phc v cho mn hnh v bn phm. Cui cng ta tm hiu v c ch hot ng v cch thc vit mt chng trnh thng tr v chng trnh con phc v ngt.

3.6 BI TP
3.6.1 Cu hi trc nghim
1. so snh ni dung ca hai vng nh, ta dng lnh no di y ca Debug A. Lnh A B. Lnh C C. Lnh D D. Lnh E 2. cho thc hin mt chong trnh , ta dng lnh no di y ca Debug A. Lnh G B.Lnh L C. Lnh T D. Lnh P 3. Pht biu no di y ng v y nht v chng trnh m phng Emu8086. A. L mt h son tho chong trnh B. H tr cho ngi lp trnh vit cc chng trnh con v Macro C. M phng qu trnh thc hin chng trnh D. Cung cp mi trng cho ngi lp trnh vit cc chng trnh hp ng v M phng qu trnh thc hin chng trnh 4. Pht biu no sau y l ng nht cho vic kt hp gia hp ng v C bng cch s dng inline assembly: A. inline assembly ch cha cc lnh MOV, INC, DEC, ADD,SUB B. Cc lnh inline assembly c vit cng vi cc lnh C trong file chng trnh C C. Cc lnh inline assembly c vit cng vi cc lnh C trong file chng trnh hp ng. D. Trong cng mt chong trnh C, cc inline assembly phi c vit tch bit vi cc lnh ca C. 5. Pht biu no sau y l ng nht cho vic kt hp gia hp ng v C bng cch s dng vit tch bit module hp ng v C: A. Trong cc module C ch cha cc lnh C. B. Trong module hp ng khng th gi c cc hm vit t C C. Trong module C c th gi cc hm t module hp ng v trong module hp ng cng c th gi cc hm t module C. D. Cc module C v hp ng c dch v thc hin c lp vi nhau. 113

Chng 3: Cc cng c h tr 6. Pht biu no sau y l sai i vi vic tng thch kiu gia module hp ng v module C: A. Kiu unsigned char ca C khng tng thch vi kiu byte ca hp ng. B. Kiu char ca C khng tng thch vi kiu word ca hp ng C. Kiu short ca C tng thch vi kiu word ca hp ng D. Kiu far * ca C tng thch vi kiu dword ca hp ng. 7. Pht biu no sau y l sai i vi kiu gi tr tr li ca hm v ni t gi tr tr li trong module hp ng: A. Kiu gi tr unsigned long c t vo DX:AX. B. Kiu gi tr enum c t vo AX C. Kiu gi tr float c t vo nh ngn xp 8087 thanh ghi ST(0) D. Kiu gi tr unsigned long c t vo AX 8. Khi mt ngt c p ng yu cu, cc lnh s c thc hin theo thc t sau: A. PUSHF, CLI, PUSH CS, PUSH IP. B. PUSH IP, PUSH CS, PUSH IP, CLI,. C. PUSH CS, PUSH IP, CLI, PUSHF . D. CLI, PUSH CS, PUSH IP, PUSHF 9. Pht biu no sau y l ng nht i chng trnh thng tr: A. C th vit chng trnh thng tr s dng khung ca chng trnh .EXE. B. H tr kh nng kch hot v nm li b nh sau khi chy xong. C. c kch hot bi mt t hp phm nng (hot-key). D. Hot ng ging nh cc chng trnh bnh thng khc. 10. Pht biu no sau y l ng nht i chng trnh thng tr: A. Vng nh cp pht cho chng trnh thng tr khng c gii phng cp pht cho chng trnh khc khi n thc hin xong . B. Vng nh cp pht cho chng trnh thng tr c gii phng cp pht cho chng trnh khc khi n thc hin xong C. Khi thc hin ln u tin n khng cn chng trnh ti (program loader) ti vo vng nh cp pht cho n. D. Mi ln thc hin chng trnh thng tr s c ti vo vng nh c cp pht cho n.

3.6.2 Bi tp
1. Dng trnh tin ch Debug chy v g li chng trnh v d 1 phn 2.4 2. Vit chng trnh nhp vo mt s nguyn N (0<N<256), hy in ra N di cc dng: thp phn, nh phn v hexa. Yu cu chng trnh c t chc nh sau: a. Dng inline-assembly v C b. Vit tch bit module C v hp ng c. Vit tch bit module Pascal v hp ng 114

Chng 3: Cc cng c h tr 3. Vit chng trnh nhp vo t phn phm hai s nguyn dng (0<x,y<256), hy tnh tng hiu, tch thng ca chng ri in ra mn hnh. Yu cu chng trnh c t chc nh sau: a. Dng inline-assembly v C b. Vit tch bit module C v hp ng 4. Lp chng trnh thc hin nhim v copy mt file c kch thc ty . Tn file ngun v ch nhn vo t bn phm. Thng bo li ra mn hnh. Yu cu chng trnh c t chc nh sau: a. Dng inline-assembly v C b. Vit tch bit module C v hp ng

3.7 TI LIU THAM KHO


1. ng Thnh Phu. Turbo Assembler v ng dng. Nh XB Khoa hc v K thut. 1998. 2. Nguyn Minh San. Cm nang Lp trnh H thng (tp 2). Bn dch. Nh XB Ti chnh Thng K. 1996. 3. Nguyn nh Vit. Gio Trnh nhp mn Hp ng v Lp trnh H thng. H ni. 1998. 4. Website: www.emu8086.com

115

Chng 4: Lp trnh phi ghp

CHNG 4: LP TRNH PHI GHP


Phn ny ta s tm hiu v truyn tin ni tip v lp trnh phi ghp vi cc thit b UART 8250A, bn phm, mn hnh v mt cng c h tr ngi lp trnh h thng trn windowsRadASM.

4.1 TRUYN THNG TIN NI TIP VI B IU HP UART


Vic truyn thng tin gia cc thnh phn nm gn nhau nh cc b phn ca mt h vi x l a cng, mn hnh, CPUc th thc hin thng qua bus song song m rng hoc qua cc mch phi ghp song song. Trong mt nhm bt (8, 16 , 32 hoc 64) c truen t b phn ny sang b phn khc trn 1 tp cc ng truyn tn hiu cp. Ngc li, trong trng hp phi truyn tn hiu gia cc i tng xa nhau th khng th dng nhiu dy tn hiu ng thi v l do kinh t. Phng thc truyn tin ni tip ph hp vi yu cu thc t ny. Trong phng thc truyn tin ni tip th u pht, d liu di dng song song c chuyn thnh d liu dng ni tip, tn hiu ni tip sau c truyn i lin tip theo tng bit trn mt ng dy n u thu. Ti u thu, tn hiu ni tip s c bin i ngc li thnh dng song song truyn cho cc thnh phn ng gn nhau.

4.1.1 C bn v truyn tin ni tip


C hai kiu truyn thng ni tip: ng b v d b. Trong phng thc ng b th d liu c truyn i theo tng bn tin (mt on vn bn) vi mt tc xc nh. Ty theo giao thc truyn thng m mi bn tin truyn i c cc cu trc khc nhau. Chng hn, nu dng giao thc truyn thng tin h 2 ng b (BISYNC: Binary Synchronous Communication Protocol) th cu trc mt bn tin nh sau: SYN SYN SOH HEADER STX phn header Bt u phn ni dung TEXT Phn ni dung bn tin ETX Kt thc phn ni dung BCC K t kim tra khi

K t K t Bt u ng ng phn b b header

Ngc li, trong phng thc truyn khng ng b, d liu c truyn i theo tng k t. K t cn truyn i c gn thm bit nh du u nh du bt u k t. 1 hoc 2 bt cui cng nh du kt thc k t. V mi k t c nhn dng ring bit nn n c th truyn i bt c khi no. Di y l cu trc ca mt khung truyn (frame) theo phng php khng ng b.

116

Chng 4: Lp trnh phi ghp

Start

D0

D1

D2

D3

D4

D5

D6

Parity Stop

Stop

M k t cn truyn Ty theo loi m ta s dng m ha k t (baudot, ASCII, EBCDIC) m di cho m k t c th l 5,6,7,8 bit. Ty theo h thng struyn tin, bn cch cc bt m d liu cn c th c bit parity dng kim tra li khi truyn. Vic truyn tin d b c thc hin nh mt UART (Universal Asynchronous Receiver Transmitter) u pht v mt UART u thu. Khi c k t pht, mch 8251A s to ra khung cho k t bng cch thm vo cc bit start, parity v stop, ri gi lin tip tng bt ra ng truyn. Bn pha thu, mt mch 8251A khc s nhn k t, tho b khung truyn, kim tra parity, ri chuyn sang dng song song CPU c.

4.1.2 Cc thanh ghi ca UART 8250A/16450


Mch 8250A l mt mch thu pht d b vn nng (UART) c s dng rt ph bin phi ghp vi cng thng tin ni tip nh cng COM theo chun RS 232C. Di y ta tm hiu v cc thanh ghi bn trong ca UART 8250A. Di y l bng lit k t hp chn tn hiu c th chn racc thanh ghi bn trong ca UART 8250A. DLA A2 0 0 1 1 X X X X X X 0 0 0 0 0 0 1 1 1 1 A1 0 0 0 0 1 1 0 0 1 1 A0 0 1 0 1 0 1 0 1 0 1 Chn ra thanh ghi Thanh ghi m thu (RBR), thanh ghi gi pht (THR) Thanh ghi cho php to yu cu ngt (IER) Thanh ghi cho s chia phn thp (LSB) Thanh ghi cho s chia phn cao (MSB) Thanh ghi nhn dng ngun gc yu cu ngt (HR) Thanh ghi iu khin ng truyn (LCR) Thanh ghi iu khin modem (MCR) Thanh ghi trng thi ng dy (LSR) Thanh ghi trng thi modem (MSR) Thanh ghi nhp

Thanh ghi iu khin ng truyn (Line Control Register) Thanh ghi ny cn c tn khc l thanh ghi nh khun dng d liu v n quyt nh khun dng d liu trn ng truyn. Cu trc ca thanh ghi LCR c biu din nh sau:

117

Chng 4: Lp trnh phi ghp D7 DLAB D6 SBCB D5 SP D4 EPS D3 PEN D2 STB D1 WLS1 D0 WLS1

Bt D7 (DLAB): Bit truy nhp s chia 1: truy nhp s chia 0: truy nhp IER,THR v RBR

Bt D6 (SBCB): Bit iu khin gin on 1: buc Sout =0 0: khng hot ng

Bt D5 (SP): o parity 1: parity chn 0: khng hot ng

Bt D4 (ESP): chn to/kim tra parity chn 1: parity chn 0: parity l

Bt D3 (PEN): cho php to/kim tra parity 1: cho php 0: cm

Bt D2 (STB): s bit stop 1: 1,5 hoc 2 bt 0: 1bt

Bt D1, D0 (WLS1, WLS0): Chn di t 00: 5 bt 01: 6 bt 10: 7 bt 11: 8 bt Thanh ghi m gi pht (Transmitter Holding Register- THR)

K t cn pht i phi c ghi t CPU vo thanh ghi ny trong khi bit DLAB=0. Sau khi truyn 8250A ly k t t y, ng khung cho n nh nh v a tng bt ra chn Sout Thanh ghi m thu (Receiver Buffer Register- RBR) Khi 8250A nhn c mt k t qua chn Sin , n tho b khung truyn cho k t v gia k t ti thanh ghi m thu ch CPU c vo. CPU ch c c k t trong thanh ghi ny khi bt DLAB=0. Thanh ghi cho php to yu cu ngt (Interrupt Enable Register- IER) Thanh ghi ny dng cho php/ cm cc nguyn nhn gy ra ngt rkhc nhau. Trong khi mch 8250A hot ng c th tc ng cti CPU thng qua chn INTRPT ca UART. Mi bt 118

Chng 4: Lp trnh phi ghp trong cc bt D3,D2,D1,D0 mc cao cho php cc hin tng tng ng vi bt c a ra yu cu ngt i vi CPU. Di y l cu trc ca thanh ghi cho php to yu cu ngt. D7 0 D6 0 D5 0 D4 0 D3 D2 D1 D0

MODEM RLINE TxEMPTY RxRDY

Bt D3 (MODEM) = 1: cho php cc thay i trng thi ca modem gy ra ngt. Bt D2 (RLINE) = 1: cho php cc tn hiu trng thi ng truyn thu gy ra ngt. Bt D1 (TxEMPTY) = 1: cho php gy ra ngt khi m gi pht rng. Bt D0 (RxRDY) = 1: ho php gy ra ngt khi m thu y.. Thanh ghi nhn dng ngun yu cu ngt (Interrupt Identification Register- IIR)

Thanh ghi nhn dng ngt (ch c ra) cha m mc u tin cao nht ca yu cu ngt ti chn INTRPT ca 8250A ang ch phc v. Do vy khi cn x l cc yu cu ngt theo kiu thm d, CPU cn c bt ID0 ca thanh ghi ny bit l c yu cu ngt v kim tra cc bt ID2- ID1 xc nh c ngun gc ca yu cu ngt. Mi ln UART c reset th ch c yu cu ngt mc u tin s 1 s c phc v. iu ny c th thay i bng cch dng mt n che i cc yu cu ngt no bng cch ghi vo thanh ghi IER cc bt thch hp. Di y l cu trc ca thanh ghi nhn dng ngun yu cu ngt. D7 0 D6 0 D5 0 D4 0 D3 0 D2 ID2 D1 ID1 D0 ID0

Bt D2, D1 (ID2, ID1): m ha cc yu cu ngt c mc u tin cao nht ang ch c phc v. Bt D0 (ID0) = 0: c yu cu ngt = 1: khng c. Thanh ghi iu khin modem (Modem Control Register- MCR) y l thanh ghi iu khin cc tn hiu ra ca modem thng qua vic iu khin cc tn hiu ti chn DTR v RTS ca mnh UART. Cu trc ca thanh ghi iu khin modem nh sau: D7 0 D6 0 D5 0 D4 LOOP D3 OUT2 D2 OUT1 D1 RTS D0 DTR

119

Chng 4: Lp trnh phi ghp

Bt D4 (LOOP) = 1: Ni vng cc b = 0: bnh thng. Bt D3, D2 (OUT2, OUT1) = 1: a OUTi=1 = 0: a OUTi=0. Bt D1 (RTS) = 1: a RTS=1 = 0: a RTS=0. Bt D0 (DTR) = 1: a RTS=1 = 0: a RTS=0.

Khi thit lp D0=DTR=1 ta c th iu khin tn hiu ti chn DTR ca mch 8250A t mc tch cc thp bo UART sn sng lm vic. Tng t, D1=RTS=1 ta c th iu khin tn hiu ti chn RTS ca mch 8250A t mc tch cc thp bo UART sn sng truyn pht k t. Ngoi ra, ta c th iu khin c cc u ra ph OUT1 v OUT2. Bng cc bt D2=OUT1=1 v D3=OUT2=1 iu khin tn hiu ti cc ch ny sao cho OUT1=1 v OUT2=1. Bt D4=1 cho php iu khin mch 8250A lm vic ch ni vng cc b kim tra chc nng ca UART. Khi D4=1 th cu hnh sau c thit lp: Sout =1 Sin =1: khng ni vi bn ngoi Cc thanh ghi dch ca phn pht vi phn thu c ni vng vi nhau Cc chn iu khin vo ca modem khng c ni ra ngoi m c ni bn trong mch vi cc chn iu khin ra ca modem.. Thanh ghi trng thi modem (Modem Status Register- MSR) Thanh ghi ny cn c gi l thanh ghi trng thi vo t cng ni tip RS232C v n cho bit trng thi hin thi ca cc tn hiu iu khin modem t ng truyn. Di y l cu trc ca thanh ghi trng thi modem: D7 RLSD D6 R1 D5 DSR D4 CTS D3 RLSD* D2 RI* D1 DSR* D0 CTS*

Bt D7,D6,D5, D4 (RLSD,RI,DSR,CTS): C gi tr cc bt OUT2, OUT1, DTR, RTS trong MCR khi bt LOOP=1. Bt D3 (RLSD) = 1: nu c s thay i ca cc tn hiu tng ng so vi ln c trc. Bt D2 (RI) = 1: Nu RI c bin i t mc thp ln mc cao 120

Chng 4: Lp trnh phi ghp Du * ng trc cc chan tn hiu ch ra rng trong khi 8250A hot ng, nu c s thay i ca cc tn hiu th cc bt tng ng s c lp. Vi tn hiu RI th l s bin i t mc thp ln mc cao. Thanh ghi trng ng truyn (Line Status Register- LSR) Thanh ghi trng thi ng truyn cho ta bit c trng thi ca vic truyn tn hiu trn ng truyn. Di y l cu trc ca thanh ghi trng thi ng truyn: D7 0 D6 TSRE D5 THRE D4 BI D3 FE D2 PE D1 OE D0 RxDR

Bt D6 (TSRE): thanh ghi dch pht rng. =1: khi 1 k t c pht i, bt ny b xa khi c mt k t chuyn t

THR sang TSR Bt D5 (THRE): thanh ghi gi pht rng. =1: khi k t c chuyn t THR sang TSR, bt ny b xa khi CPU a k t ti thanh ghi THR. Bt D4 (BI): ngt gy ra s gin on khi truyn.

=1: khi tn hiu u vo phn thu mc thp lu hn thi gian dnh cho mt k t, bit ny b xa khi CPU c thanh ghi LSR. Bt D3 (FE): li khung truyn. =1: bo c li v khung truyn, bit ny b xa khi CPU c thanh ghi LSR. Bt D2 (PE): li parity. =1: bo c li parity, bit ny b xa khi CPU c thanh ghi LSR. Bt D1 (OR): li do nhn tn d liu b ghi .

=1: c hin tng ghi do CPU cha kip c thanh ghi m thu, bit ny b xa khi CPU c thanh ghi LSR. Bt D0 (RxDR): sn sng nhn d liu. =1: nhn c mt k t v th n trong thanh ghi m thu (RBR), bit ny b xa khi CPU c thanh ghi RBR.

4.1.3 Lp trnh cho UART 8250A/16450


Nh ta bit truyn thng ni tip gia hai my tnh c tc hin qua cng COM v theo chun RS 232C. Phn ny s gii thiu v lp trnh truyn thng qua cc cng COM v ngt BIOS phc v vo/ra ca cc cng COM. 121

Chng 4: Lp trnh phi ghp a. a ch cc cng COM v ngt 14h-dch v BIOS cho cng COM Bng a ch cng COM: Cng COM1 COM2 COM3 COM4 a ch I/O 3F8-3FF 2F8-2FF 338-33F 238-23F Yu cu ngt IRQ 4 IRQ 3 IRQ 5 IRQ 5

Cc cng COM3 v COM4 c th khng cn s dng mc ngt nh trn. Chng c th s dng cc mc ngt IRQ2, IRQ5, IRQ7 hoc IRQ9. Di y ta s tm hiu v cc chc nng ca ngt 14h dch v BIOS dnh cho cc cng COM. Hm 0h: ngha: Khi to cng COM. u vo: AH=0 DX=s hiu cng COM (0-3) AL= tham s khi to trong nh dng ca AL nh sau:

D7

D6

D5

D4 Bit chn /l x0: chn l 01: l 11: chn

D3 khng di stop 1 bt

D2 bit t: 0: 1: 2 bt

D1

D0

Tc truyn (bits/giy) 000: 110 bits/ giy 001: 150 bits/ giy 010: 300 bits/ giy 011: 600 bits/ giy 100: 1200 bits/ giy 101: 2400 bits/ giy 110: 4800 bits/ giy 111: 9600 bits/ giy

di m k 00: 5 k t 01: 6 k t 10: 7 k t 11: 8 k t

Int 14h u ra: AH = trng thi ca cng va khi to.

122

Chng 4: Lp trnh phi ghp Hm 1h: ngha: Ghi mt k t ra cng COM u vo: AH=1 DX=s hiu cng COM (0-3) AL= M ASCII ca k t Int 14h u ra: AH = trng thi li ca cng. Bt 7=1: c li, bt 7=0 khng c li. Hm 2h: ngha: Nhn mt k t ra cng COM u vo: AH=2 DX=s hiu cng COM (0-3) u ra: AL= M ASCII ca k t nhn c. AH = trng thi li ca cng. Bt 7=1: c li, bt 7=0 khng c li. Hm 3h: ngha: c trng thi cng COM u vo: AH=3 DX=s hiu cng COM (0-3) u ra: AH = trng thi cng COM v AL-= trng thi modem. Chi tit nh sau. Dng thc ca AH: Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Li qua thi gian (timeout) Thanh ghi pht rng Thanh ghi nhn rng Cho php ngt Li khung truyn Li parity Li ng truyn D liu c trong b m

Dng thc ca AL: Bit 7 Bit 6 Bit 5 Pht hin vt mang d liu (Data Carrier Detect) Ch th chung (Ringing Indicator) Sn sng thit lp d liu (Data Set Ready) 123

Chng 4: Lp trnh phi ghp Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Xa gi (Clear To Send) Pht hin sng mang d liu Delta( Delta Data Carrier Detect) Ch th chung ui (Tailing Edge Ring Indicator) Sn sng thit lp d liu Delta (Delta Data Set Ready) Xa gi Delta (Delta Data Set Ready)

b. Lp trnh cho UART 8250A V d 1: Khi to ch lm vic cho cng COM3 vi cc thng s: 6 bt m k t truyn , tc truyn 2400 bits/ giy, parity chn, mt bt stop. Dng thc ca AL D7 D6 D5 D4 11: chn D3 D2 D1 D0

101: 2400 bits/ giy

Bit chn /l

di di m k t: bit 01: 6 k t stop 0: 1 bt

AL=1011 1001=B9h on m chng trnh s c vit nh sau:


Mov AH,0 ; khi to Mov DX,2 ; cng COM3 c s hiu 2 Mov AL,B9h Int 14h

V d 2: Khi to ch lm vic cho cng COM1 vi cc thng s: 7 bt m k t truyn , tc truyn 4800 bits/ giy, parity chn, mt bt stop khng iu khin gn on Sout. a ch cng ca thanh ghi iu khin ng truyn l 3FB (tnh t a ch c s 3F8) Gi tr ca ca thanh ghi iu khin ng truyn l: D7 0 D6 0 D5 0 D4 1 D3 1 D2 0 D1 1 D0 0

Gi tr ny bng 1AH a ch cng ca thanh ghi s chia LSB l 3F8 vi DLAB=1 a ch cng ca thanh ghi s chia MSB l 3F9 vi DLAB=1 Gi thit dng xung ng h tn s 1,8432 Mhz u vo ca UART v ta mun c tc truyn 4.800 bits/giy, ta cn tnh s chia ghi gi tr s chia vo thanh ghi s chia 124

Chng 4: Lp trnh phi ghp S chia = 1.843200/(4.800x16)=24 on m chng trnh s c vit nh sau:
Mov AL,80 ; a vo LCR to ra DLAB=1 Mov DX,3FBH ; a ch LCR Out DX,AL Mov AL,24 ; a vo LSB ca s chia Out DX,AL Mov AL,0 ; a vo MSB ca s chia Mov DX,3F9H ; a ch MSB ca s chia Out DX,AL Mov AL,1AH ; qui nh khun dng d liu Mov DX,3FBH ; a ch LCR Out DX,AL

4.2 MT S LP TRNH PHI GHP C BN


Phn ny gii thiu v mt s lp trnh phi ghp c bn vi bn phm, mn hnh. Chng ta s s dng nhng chc nng v dch v do BIOS v DOS cung cp lp trnh vi cc thit b ny. Chi tit v cc chc nng c trnh by phn 3.4.1.

4.2.1 Lp trnh phi ghp vi bn phm


a. C bn v bn phm Trong s cc thit b thu nhn tn hiu: bn phm, chut, cn iu khin, bt quang, mn hnh cm bin, bng v vector, thit b qut, my nh s, thit b nhn dng nh, ting ni th bn phm l mt trong nhng thit b vo thng dng nht. Bn phm bao gm mt tp hp cc phm m mi phm hot ng nh mt cng tc cm bin lc chuyn lc nhn thnh mt i lng in. B vi iu khin 8042 ca my tnh v b vi iu khin ca bn phm lin lc vi nhau tun t v ng b qua hai u dy dn: dy d liu v dy ng h. hai vi iu khin ny lm vic vic vi nhau theo nguyn tc ch/t (master/slaver) trong 8042 l chu cn 8048 l t. Khi c mt thao tc phm, bn phm pht ra mt tn hiu in (IRQ1) gi n CPU. CPU s tm dng cng vic v gi ngt Int 9 c cng bn phm (a ch 60H) nhn m Scan ca tc ng phm va xy ra. Ngoi ra, n s c c bn phm l mt word a ch 40:0017 kt hp vi m scan sinh ra m ASCII tng ng vi tc ng phm trn. Cp hai byte gm m Scan v m ASCII s c Int 9h a vo vng m bn phm theo th t m ASCII ng trc m Scan. Chng nm cho ti khi c ngt 16h phc v. Trong trng hp ngt 9h pht hin thy t cng 60H cc m Scan ng vi t hp phm c bit, v d Cltr_Alt_Del, PrintScreen, Ctrl_Numlock, Ctrl_Break, SysReq th n s hiu y l cc lnh khin ROM-BIOS phi thc hin ngay ch khng lu li cc t hp phm ny trong b m bn phm . Khi gp Cltr_Alt_Del, ROM BIOS gi ngt 19h (Boot strap loader) Khi gp PrtScr, ROM BIOS gi ngt 5h (hard copy)

125

Chng 4: Lp trnh phi ghp Khi gp Cltr_Numlock, ROM BIOS thi hnh mt vng lp v hn cho n khi mt phm khc c nhn. Khi gp Cltr_Break, ROM BIOS gi ngt 1Bh kt thc chng trnh ang thc hin, tr iu khin li cho DOS. Khi gp SysReq, ROM BIOS gi ngt 15h vi gi tr 8500H trong AX, khi nh phm ny int 15h cng c gi nhng vi AX=8501. Dch v 85H ca ngt 15H ch cha mt lnh IRET, khng gy tc ng g.

b. B m bn phm v cc thao tc Mi phm trn bn phm c b x l ca bn phm gn cho mt m Scan c trng cho v tr ca phm trn bn phm v cho trng thi ca phm (nhn, khng nhn, nhn cha nh..). B m bn phm (Keyboard buffer) l mt min nh 16 word trong RAM. Thuc vng d liu ca BIOS. Di y l mt phn vng d liu ca BIOS (DTA) lin quan n b m v trng thi bn phm: a ch 40:0000-40:0006 40:0008-40:000F 40:0010 40:0012 40:0013 40:0015 40:0017 40:0019 40:001A 40:001C 40:001E-40:003D Ni dung a ch cc b phi ghp RS232 (1-4) a ch cc b phi ghp my in (1-4) C thit b (do ngt 11h tr li) Du hiu kim tra ca nh sn xut Dung lng nh tnh theo n v KB B nh ca knh vo/ra C bn phm Cc s vo bng phm alt V tr Head ca vng m V tr Tail ca vng m B m bn phm

Vng m bn phm c t chc theo mt hng i quay vng (circular queue) trong thao tc c v ghi vo b m l c lp vi nhau, iu ny lm cho vic ghi tc ng phm vo v c ra theo kiu m phm (ASCII+Scan) no c a vo b m trc th s c ly ra trc. Con tr Head lu tr a ch dnh cho thao tc c, l v tr s c k t tip theo ra khi b m bn phm. Sau mi thao tc c Head c tng ln 1 word. Word ti a ch 40:001A trong vng DTA cha a ch ca Head. Con tr Tail lu tr a ch s ghi tc ng phm tip theo vo b m bn phm. Sau mi thao tc ghi Tail c tng ln 1. Word ti a ch 40:001C cha a ch ca Tail. Khi c Head v Tail cng tr ti word cui cng ca b m v nu c mt tc ng phm na xy ra th c Head va Tail cng tr ti u vng m (40:001E) 126

Chng 4: Lp trnh phi ghp C mi phm c c ra th Head li tin gn n Tail, khi tt c vng m c c ht th Head s ui kip Tail v c hai cng tr ti cng mt a ch, lc b m l rng. Khi c li gi ngt int 9 th chng trnh ca ta chim quyn iu khin, n s gi n chng trnh x l ngt bn phm c nhn tc ng phm v t cp byte m ASCII v Scan vo b m bn phm. ng thi gn cho DS a ch on ca vng d liu BIOS v kim tra xem Tail c trong b m bn phm khng, word nm trc Tail s tng ng vi phm va mi nhn vo. c byte m Scan vo thanh ghi DH v byte m ASCII vo DL. Sau , kim tra word trong DX c phi l hot-key hay khng, nu khng phi s nhy n kt thc. c. Phng php lp trnh bn phm v mt s chng trnh mu C hai cch lp trnh bn phm: Lp trnh h thng, truy nhp lp trnh qua cc b vi iu khin 8042, 8044 qua cc cng 60H, 61H v 64H. Lp trnh ng dng, dng cc hm BIOS (int 9h, Int 16H) hoc cc hm 0Ah, 0Bh, 0Ch ca int 21h.

Cng 60H l cng A ca 8255A v l ni CPU v bn phm trao i thng tin bao gm cc lnh (thng l ca chng trnh con ngt) iu khin bn phm hoc k t t bn phm vo. i vi ngi lp trnh th cng 60H c coi nh thanh ghi m lnh ca bn phm. M lnh EDH l m lnh tt, bt n V d 1: Vit chng trnh t ng bt phm CapLock (sau khi chy chng trnh ny phm Caplock s c bt ln). Ta hy xem cu trc ca c bn phm (chi tit xem phn 3.4.1): 7 6 5 4 3 2 1 0

1: ch 1: ch 1: Num 1: Scroll 1: Alt b 1: Ctrl b 1: Shift 1: Shift n tri b n phi b Lock b Lock b n Insert Cap n n n Lock

C bn phm l byte ti a ch 40:0017 trong vng m bn phm. n ca phm CapLock l ON th gi tr ca c bn phm c t bng: 01000000 =40h. ta ch cn gn gi tr 40h vo byte c a ch 40:0017 l xong.
.MODEL Tiny .CODE Org 100h Jmp Start Start: Mov AX,40h ; AX cha a ch on d liu DTA Mov DS, AX ; cho DS tr ti vng DTA Mov BX,0017h ; DS:BX cha a ch ca byte cha c ; trng thi bn phm Mov byte PTR[BX] ,40h ; t c bn phm bng 40h

127

Chng 4: Lp trnh phi ghp


Int 20h ; tr v DOS End Start

V d 2: Vit chng trnh t ng bt phm CapLock , NumLock, ScollLock (sau khi chy chng trnh ny phm Caplock, NumLock, ScollLock s c bt ln). Yu cu chng trnh thc hin qua cc cng 60H, 61H v 64H. Chng trnh s kim tra trng thi nhn phm hay cha. Cu trc ca byte iu khin cc n LED trn bn phm nh sau: 7 6 5 4 3 2 Cap Lock 1 Num Lock 0 Scroll Lock

cc n Caplock, NumLock, ScollLock s c bt ln th ta phi gi gi tr 00000111 =07h ra cng 60H.


.MODEL Tiny .CODE Org 100h Jmp Start Start: Mov AL,EDHh ; lnh tt/bt n Out 60H, AL ; a ra cng bn phm Kiemtra: In AL,64h ;Kim tra trng thi bn phm Test AL,02h ; Nu b m bn phm bng y Jnz Kiemtra ; kim tra li Mov Al,07 ; Nu b m trng s bt n Out 60H, AL ; a ra m bt n ra cng bn phm Int 20h ; tr v DOS End Start

V d 3: Vit chng trnh cm bn phm hot ng. Bit rng lnh kha ADH l lnh cm bn phm. Kim tra trng thi bn phm trc khi cm.
.MODEL Tiny .CODE Org 100h Jmp Start Start: Kiemtra: In AL,64H ; c trng thi Test AL,02h ; Nu b m bn phm bng y Jnz Kiemtra ; kim tra li

128

Chng 4: Lp trnh phi ghp


Mov Al,ADh ; Nu b m trng s bt n Out 64H, AL ; a ra cm bn phm ra cng 64h Int 20h ; tr v DOS End Start

V d 4: Vit chng trnh x l bn phm n gin. Chng trnh kim tra cc phm ch ci v phn bit ch hoa, ch thng.
.MODEL small .STACK 100h .DATA Table db db db db 16 dup(0) qwertyuiop,0,0,0,0 ; hang tren

asdfghjkl,0,0,0,0 ; hang giua zxcvbnm; hang duoi

db 16 dup(0) ; vung danh cho chu hoa db QERTYUIOP,0,0,0,0 ; chu hoa cho hang tren db ASDFGHJKL,0,0,0,0,0 ; chu hoa cho hang giua db ZXCVBNM; chu hoa cho hang duoi .CODE Start: Mov AX,@Data Mov DS,AX Cli; xoa ngat Push DS ; Mov AX, seg TryKB ; DS:AX tro den Checkbanphim Mov DS,AX Mov DX, offset TryKB ; Checkbanphim Mov Al,9 Mov Ah,25H Int 21h Pop DS Sti ; cho phep ngat ;--------------------------------;--------Push AX Push BX Push CX Push DI Push ES ; nhan ma Scan va tra loi ban phim In Al,60h ; nhan ma Scan Mov AH,AL ; chuyen vao AH Push AX ; dua vao stack Chuong trinh xu ly ngat ban phim-------TryKB proc far ; dat lai dia chi vector ngat

129

Chng 4: Lp trnh phi ghp


In AL,61h ; doc cong PB cua 8255A Or AL,10000000b ; dua bit 7 len bit 1 Out 61h,AL ; dua ra cong PB ; Cho ES tro den doan du lieu Mov AX,40H ; dua AX den cuoi bo nho Mov ES,AX Pop AX ; AL= ma scan ; kiem tra phim shift Cmp Al,42 ; co nhan phim shift ko? Jnz checkkey ; neu khong thi kiem tra tiep Mov BL,1 Or ES:[17h],BL at bit 1 ca byte trang thai =1 Jmp Thoat ; thoat khoi PhimKetiep: Test AL,10000000b; ma nha phim Jnz Thoat Mov BL,ES:[17h] ; neu ko doc dc trang thai phim shift Test BL,00000011b; nhan phim shift? Jz DoiMa ; neu ko doi lai ma Add AL,100 ;doi ra ki tu hoa(dia chi 100 byte ke tiep) DoiMa: Mov BX, offset table ; Xlat table ; doi ma scan sang ma ASCII Cmp Al,0 ; tra ve 0? Jz Thoat ; Kiem tra do dem ban phim da day cua? Mov BX, 1AH ; nap con tro bo dem ban phim Mov CX,ES:[BX] Mov DI,ES:[BX]+2 Cmp CX,60 Jz Tieptuc Add, CX,2 Cmp CX,DI Jz Thoat ; Bo dem chua day, nap the ki tu vao Tieptuc: Mov ES:[DI],AL Cmp DI,60H Jnz Naptiep Mov DI,28 ; dua dia chi hien tai ve 28+2=30 Naptiep: Add DI,2 Mov ES:[BX],DI ; ket thuc

130

Chng 4: Lp trnh phi ghp


Thoat: Pop ES Pop DI Pop CX Pop BX Pop AX Mov AL,20h ; tra lai ngat Out 20h,AL IRET TryKB endp ;----------------------------------------------End Start

4.2.2 Lp trnh phi ghp vi mn hnh


a. C bn v mn hnh B nh Video Mn hnh ca my tnh hin i ngy nay u s dng b nh video (b nh mn hnh) cha ni dung hnh nh c hin th v cc thng tin lin quan. B nh video cn c gi l b m khung (frame buffer). T th h Pentium, b vi x l cn c cng ga tc ha AGP (Accelerated Graphics Port) Cng ny cho phpb vi x l d ha truy cp trc tip vo b nh h thng cho cc php tnh ha nhng vn c b nh video ring lu tr ni dung cc im nh mn hnh. Phng php ny cho php s dng b nh h thng mm do hn m khng lm nh hng ti tc my tnh. Cng AGP ngy nay tr thnh chun trong cc my tnh hin i. Di y l bng dung lng b nh video v kh nng hin th mn hnh. Dung lng b Kch thc mn hnh nh 1MB 2MB 1024x768 800x600 1024x768 800x600 1280x1024 4MB 6MB 8MB 1024x768 1280x1024 1600x1200 Chiu su mu 8-bit 16-bit 8-bit 16-bit 24-bit 24-bit 24-bit 32-bit S mu 256 65,536 256 65,536 16.7 million 16.7 million 16.7 million 16.7 million

B chuyn i s/tng t Tn hiu ra mn hnh khng phi dng s m l dng tn hiu tng t. Tn hiu ra phi i qua mt b bin i b nh tng t/ s (RAMDAC- RAM Digital Analog Converter) c ni dung b nh video ri chuyn sang tn hiu tng t. Qua trnh ny lp li theo tn s lm ti mn hnh. B x l Video 131

Chng 4: Lp trnh phi ghp B x l video bin dch v thc hin lnh ha thnh tng im nh c th a ra RAMDAC. B vi x l video c cu trc hon chnh v phc tp nh mt b vi x l thc s. Nh c b x l video nn gim tnh ton cho tng im nh hin th i vi b x l. Thay vo CPU ch cn truyn tham s cn bn ca i tng cn hin th sang b x l video. B x l video s tnh tng im nh cn hin th t cc tham s nhn c, gii phng CPU khi nhim v ny. ha ba chiu phn mm bt kp c vi phn cng trong qu trnh pht trin ca hin th ha ba chiu, cc h iu hnh cung cp mt th vin giao din lp trnh ng dng (Application Programming Interface). Ging nh BIOS, API cung cp cc lnh ha chun ra cc chng trnh x l video thay v lp trnh trc tip n. Phn mm iu khin s phi bin dch tip nhng lnh ny sang lnh my. b. V d v Lp trnh phi ghp mn hnh Di y l mt s v d v lp trnh mn hnh c s dng cc chc nng v dch v do BIOS cung cp trnh by phn 3.4.1. V d 1: In ra mn hnh 256 k t ca bng m ASCII, mi k t c mt thuc tnh khc nhau trong ch text.
.MODEL Tiny .CODE Org 100h Jmp Start Start: Mov AL,0 Mov BL,0 ; thuoc tnh 0 vi ki tu co ma ASCII =0 Mov DL,0 ; DL= so cot, bat dau tu cot 0 Mov DH,4 ; Bat dau tu hang thu 4 Mov CX, 255 ; in 256 k t InTiep: Push AX Mov AH,2 Int 10h Pop AX Mov AH,9 ; in ki tu trong AL voi thuoc ; thuoc tinh trong BL Push AX Push CX Mov CX,1 ; in 1 ki tu Int 10h Pop CX Pop AX Inc AL ; ki tu ke tiep Inc BL ; thuoc tinh ke tiep Inc DL ; sang cot ben canh ; dat vi tri con tro

132

Chng 4: Lp trnh phi ghp


Cmp DL,79 ; Cot cuoi cung? Jb TiepTuc Mov Dl,0 ; xuong dong ke tiep Inc DH TiepTuc: Loop InTiep Int 20h End Start

V d 2: V mt hnh ch nht trong ch ha VGA


.MODEL Tiny .CODE Org 100h Jmp Start TopRow dw 100 TopCol dw 100 BotRow dw 400 BotCol dw 600 Color db 4 ; mau do Start: Mov AH,0h ; thiet lap che do do hoa Mov AL,12h ; VGA mode Int 10h Mov CX, BotCol Sub CX,TopCol Mov SI,TopRow Mov DI,TopCol ; Ve cach tren TopSide: Call DrawPixel Inc DI ; Loop TopSide Mov CX, BotRow Sub CX, TopRow Mov SI, TopRow ; Ve cach Side: Mov DI, TopCol Call DrawPixel Call DrawPixel Inc SI Loop Side Mov CX, BotCol ; goi chuong trinh con ve diem anh ; goi chuong trinh con ve diem anh Mov DI, BotCol 2 canh ben ; goi chuong trinh con ve diem anh

133

Chng 4: Lp trnh phi ghp


Sub CX,TopCol Mov SI, BotRow Mov DI, TopCol ; Ve cach duoi BotSide: Call DrawPixel Inc DI ; Loop BotSide Mov AH, 1 ; Cho 1 phim go vao Int 21h Mov AH,0 Mov AL,2 Int 10h Int 20h ; chuong trinh con ve 1 diem anh DrawPixel Proc Push AX Push CX Push DX Mov DX, SI Mov CX,DI Mov AL, Color Mov AH,0CH Int 10h Pop DX Pop CX Pop AX Ret DrawPixel Endp End Start ; goi chuong trinh con ve diem anh

V d 3: Vit mt im nh trc tip vo b nh hin th (khng thng qua RAM). y l cch nhanh nht, tuy nhin th tc vit vo b nh hin th ph thuc vo loai card iu khin mn hnh c th. Chng trnh sau c thc hin trong ch ha (640x200x2).
VeDiemAnh Proc Near ; DX=hng, CX= ct ; ES=B800H ; Gi s ch ha c khi to nh sau: ; AH=0, AL=6, Int 10h Xor BX,BX ; BX=0 SHR DX,1 ; kiem ta xem diem anh o dong chan hay le Add BX, 8*1024 ; o dong chan

134

Chng 4: Lp trnh phi ghp


TinhTiep: Mov AX,DX ; DX =so hang Mov CL,2 SHL DX,CX ; DX=DX*4 Add DX,AX ; DX=5*DX Mov AX,CX Mov CL,4 SHL DX,CL ; DX=DX*16 Add BX,DX ; BX=offset cua dong chua diem anh Mov DX,AX AND DX,7 ; DX=DX Mod 8 = vi tri byte tren dong Mov CL,3 ; no chua diem anh SHR AX,CL; AX=AX div 8= vi tri byte tren dong Add, BX,AX ; [BX] la byte chua diem anh NEG DL Add DL,7 Mov CL,DL Mov AL,1 SHL AL,CL OR ES:[BX], AL Ret VeDiemAnh Endp

4.3 LP TRNH HP NG TRONG WINDOWS


Phn ny gii thiu v hp ng mc cao (High-Level Assembly) hay HLA v cc cng c s dng lp trnh trn windows.

4.3.1 Cng c h tr lp trnh hp ng trn windows


Di y l cng c h tr ngi lp trnh vit chng trnh bng hp ng bc cao (HLA) trn windows. Ngn ng HLA Th vin chun HLA RadASM: mi trng pht trin ng dng cho HLA. B cng c g ri OllyDbg (Olly Debugger) Chng trnh x l u ra output ra cc file PE/COFF (nh MASM, FASM) Mt b lin kt (linker) c th kt ni c cc file output t b dch.(MS link) Mt trnh bin dch ti nguyn (resource compiler) nh rc.exe ca Microsoft. Mt s tin ch cho php xy dng ng dng (nh nmake ca Microsoft hoc make ca Borland) Cc module th vin Win32.

135

Chng 4: Lp trnh phi ghp

4.3.2 S dng cng c pht trin RadASM


Khi khi ng, ca s chnh mn hnh RadASM nh sau:

N bao gm menu chnh, mt ca s dnh cho cc file thuc v mt d n va ca s thuc tnh ca cc file/ cc i tng ca d n. thc hin to mt Project mi, ngi dng vo menu File, chn new project. Khi mn hnh thng tin ca project mi s c hin ra nh hnh sau:

136

Chng 4: Lp trnh phi ghp

Ngi lp trnh c th chn mt trong s cc mu ng dng ca project c sn l mt trong bn loi: ng dng Console (input v output ca chng trnh u hin th trn ca s console), ng dng kiu hp thoi (chng trnh [input v output] v ngi dng tng tc vi nhau qua cc hp thoi), ng dng windows thng thng, to cc hm dch ra th vin lin kt ng (DLL) Tip n, ngi lp trnh a vo tn project, cc m t ca project, th mc cha project v template s dng cho project. Sau khi son xong chng trnh th ngi lp trnh tin hnh dch, debug ri chy chng trnh. Ca s di y gip ngi lp trnh thc hin vic :

137

Chng 4: Lp trnh phi ghp

Ty theo tng giai on pht trin ng dng Ngi lp trnh ca th thc hin cc thao tc sau dch, km tra li hoc thc hin chng trnh.

4.4 TM TT
Chng ny trnh by v phng thc truyn thng tin ni tip vi b iu hp UART 8250A. Trong phn ny, ta tm hiu v c ch truyn thng tin ni tip kiu ng b, d b, cc thanh ghi bn trong ca UART 8250A v lp trnh cho UART 8250A. Tip theo l phn lp trnh phi ghp cho bn phm: nguyn tc hot ng ca bn phm, b m bn phm, vng d liu, s dng cc dch v ca BIOS lp trnh iu khin bn phm thng qua mt s v d n gin mang tnh minh ha. Tng t, ta cng tm hiu v cch lp trnh iu khin mn hnh thng qua hai phng php: s dng dch v ca BIOS v truy nhp trc tip vo b nh mn hnh. Tuy nhin, cch th hai tng i kh vi n ph thuc vo loi card iu khin mn hinh v ngi lp trnh phi ci t mt nh x t b nh RAM sang b nh mn hnh, nn cch ny c xem nh mt s tham kho cho ngi lp trnh h thng. Phn cui cng l phn gii thiu trnh hp ng trong Windows thng qua cng c RadASM. Ngoi mt s i tng, chc nng c mi trng pht trin cho ng dng RadASM cung cp di dng cc th vin, vic vit cc ng dng bng hp ng trn windows cng kh ging mi trng khc. Nn tc gi khng cp k cun sch ny. y l phn ch mang tnh cht gii thiu cho c gi. 138

Chng 4: Lp trnh phi ghp

4.5 BI TP
4.5.1 Cu hi trc nghim
1. L do chnh ca vic truyn thng ni tip gia hai i tng cn truyn tin cho nhau l: A. Truyn thng ni tip l cng ngh mi B. Truyn thng gia hai i tng truyn/nhn thong tin khong cch xa nhau. C. Truyn thng ni tip l nhanh hn truyn thng song song D. Truyn thng ni tip chnh xc hn song song. 2. Pht biu no sau y l ng nht: A. Truyn tin d b truyn theo tng k t cn truyn ng b truyn theo nhiu k t. B. Truyn tin d b l kiu truyn tin song song cn truyn ng b l truyn tin ni tip. C. Truyn tin ng b l truyn song song cn truyn tin d b l kiu truyn tin ni tip D. Cch m ha k t trong hai kiu truyn tin ng b v d b lun lun khc nhau.. 3. Thanh ghi no di y quyt nh khun dng d liu khi truyn: A. Thanh ghi trng thi modem. B. Thanh ghi trng thi ng truyn. C. Thanh ghi nhp D. Thanh ghi iu khin ng truyn.. 4. Pht biu no sau y l ng nht cho mt khung truyn kiu d b: A. Dnh ra t nht l 6 bt m ha d liu. B. Dnh ra t nht l 7 bt m ha d liu. C. C t nht 1 bt Start D. C t nht l 2 bt Stop. 5. Pht biu no sau y l ng nht v bt parity trong khung truyn kiu d b: A. Trong mt khung truyn c t nht 1 bt parity. B Trong mt khung truyn c th khng c bt parity no. C. Trong mt khung truyn c nhiu nht 2 bt parity. D. Bt parity lu trng.thi ca khung truyn. 6. Khi ngi dng nhn phm Ctrl_NumLock, th my tnh s: A. Lu m Scan ca hai phm Ctrl v NumLock vo b m bn phm. B Thc hin mt vng lp m khng lu li g vo trong vng m bn phm. C. Lu m ASCII ca hai phm Ctrl v NumLock vo b m bn phm. D. Lu c m Scan v m ASCII ca hai phm Ctrl v NumLock vo b m bn phm. 7. Ti mt thi im, b m bn phm c th cha c ti a: A. 16 m phm. B 8 m phm C. 32 m phm 139

Chng 4: Lp trnh phi ghp D. 24 m phm 8. Nu con tr Head bng con tr Tail th: A. B m bn phm y. B C 8 m phm C. C 16 m phm D. B m bn phm rng

4.5.2 Bi tp Lp trnh
1. Hy vit chng trnh hp ng t ng bt t hp cc phm CapLock, Insert, NumLock 2. hy lp trnh khi to ch lm vic mt mch UART 8250A cho cng COM2 vi cc thng s: a. 6 bt m k t truyn , tc truyn 1200 bits/ giy, parity l, hai bt stop. b. 7 bt m k t truyn , tc truyn 9600 bits/ giy, parity chn 1.5 bt stop. 3. S dng cc dch v ngt ca BIOS phc v cho mn hnh (ngt 10h) trong ch d ha v ra mn hnh cc hnh sau: a. Tam gic b. Hnh vung c. Hnh trn d. Hnh Parabol

4.6 TI LIU THAM KHO


1. Nguyn Nam Trung. Cu trc my Vi tnh v Thit b ngoi vi. Nh XB Khoa hc K thut.2000. 2. H Khnh Lm. Gio trnh K thut Vi x l Tp 1&2. Nh XB Bu in. 2006. 3. ng Thnh Phu. Turbo Assembler v ng dng. Nh XB Khoa hc v K thut. 1998. 4.Nguyn Minh San. Cm nang Lp trnh H thng (tp 2). Bn dch. Nh XB Ti chnh Thng K. 1996. 5.Nguyn nh Vit. Gio Trnh nhp mn Hp ng v Lp trnh H thng. H ni. 1998.

140

Ti liu tham kho

TI LIU THAM KHO

1. ng Thnh Phu. Turbo Assembler v ng dng. Nh XB Khoa hc v K thut. 1998. 2. Nguyn Nam Trung. Cu trc my Vi tnh v Thit b ngoi vi. Nh XB Khoa hc K thut.2000. 3. H Khnh Lm. Gio trnh K thut Vi x l Tp 1&2. Nh XB Bu in. 2006. 4.Nguyn Minh San. Cm nang Lp trnh H thng (tp 1&2)- bn dch. Nh XB Ti chnh Thng K. 1996. 5.Nguyn nh Vit. Gio Trnh nhp mn Hp ng v Lp trnh H thng. H ni. 1998. 6. webstie : www.emu8086.com 7. Randall Hyde. Entire Windows Assembly Programming. University California Riverside, USA. 2003. 8. Vn Th Minh. K thut Vi x l. Nh XB Gio dc. 1997.

141

Mc lc

MC LC
LI NI U.........................................................................................................................1 CHNG 1: GII THIU ....................................................................................................3 1.1 CU TRC B VI X L..........................................................................................3 1.1.1 S kin trc b Vi x l 8088 ...........................................................................3 1.1.2 Chc nng cc thnh phn .....................................................................................4 1.2 MT S CHC NNG CA NGT 21H..................................................................7 1.3 GII THIU V TP LNH CA 8088 ....................................................................9 1.3.1 Nhm lnh di chuyn d liu .................................................................................9 1.3.2 Nhm cc lnh tnh ton s hc ...........................................................................11 1.3.3 Nhm cc lnh thao tc bt...................................................................................14 1.3.4 Nhm cc lnh lm vic vi xu k t..................................................................17 1.3.5 Nhm cc lnh nhy.............................................................................................18 1.3.6 Cc lnh iu khin khc .....................................................................................20 1.4 TM TT ...................................................................................................................21 1.5 CU HI V BI TP .............................................................................................22 1.6 TI LIU THAM KHO...........................................................................................23 CHNG 2: LP TRNH BNG HP NG.....................................................................24 2.1 VIT V THC HIN MT CHNG TRNH HP NG ..................................24 2.1.1 Cu trc lnh v khai bo d liu cho chng trnh ............................................24 2.1.2 Khung ca chng trnh Hp ng........................................................................26 2.1.3 To, dch, hp dch v thc hin chng trnh Hp ng .....................................30 2.2 CC CU TRC LP TRNH C BN TRONG CHNG TRNH HP NG.31 2.2.1 Cu trc tun t....................................................................................................32 2.2.2 Cu trc IF THEN............................................................................................32 2.2.3 Cu trc IF THENELSE ..............................................................................33 2.2.4 Cu trc CASE.....................................................................................................34 2.2.5 Cu trc lp FOR-DO ..........................................................................................36 2.2.6 Cu trc lp WHILE-DO .....................................................................................37 2.2.7 Cu trc lp REPEAT-UNTIL.............................................................................38 2.3 CHNG TRNH CON V MACRO ......................................................................39 2.3.1 Chng trnh con: c ch lm vic v cu trc....................................................39 2.3.2 Truyn tham s.....................................................................................................41 2.3.3 Chng trnh gm nhiu module .........................................................................42 2.3.4 Lin kt th tc vo mt th vin ........................................................................47 142

Mc lc 2.3.5 Macro .................................................................................................................. 48 2.4 Chng trnh v d .................................................................................................... 53 2.5 TM TT ................................................................................................................. 60 2.6 BI TP..................................................................................................................... 61 2.7 TI LIU THAM KHO .......................................................................................... 61 CHNG 3. CC CNG C H TR ............................................................................. 62 3.1 B G RI DEBUG ................................................................................................ 62 3.1.1 Tng quan v Debug ........................................................................................... 62 3.1.2 S dng Debug.................................................................................................... 62 3.1.3 Cc lnh ca Debug............................................................................................. 63 3.2 CHNG TRNH M PHNG EMU8086 ............................................................ 69 3.2.1 Cc chc nng son tho, dch v thc hin chng trnh.................................. 69 3.2.2 Chc nng m phng qu trnh thc hin chng trnh...................................... 70 3.2.3 Cc chng trnh mu. ........................................................................................ 72 3.3. KT NI HP NG VI CC NGN NG BC CAO ...................................... 80 3.3.1 Ngn ng C v Hp ng ..................................................................................... 80 3.3.2 Ngn ng Pascal v Hp ng.............................................................................. 93 3.4 CC CHNG TRNH NGT ................................................................................ 96 3.4.1 ng dng cc ngt ca BIOS & DOS................................................................. 96 3.4.2 Chng trnh thng tr v chng trnh ngt ................................................. 108 3.5 TM TT ................................................................................................................ 112 3.6 BI TP................................................................................................................... 113 3.6.1 Cu hi trc nghim .......................................................................................... 113 3.6.2 Bi tp ............................................................................................................... 114 3.7 TI LIU THAM KHO ........................................................................................ 115 CHNG 4: LP TRNH PHI GHP ........................................................................... 116 4.1 TRUYN THNG TIN NI TIP VI B IU HP UART............................ 116 4.1.1 C bn v truyn tin ni tip ............................................................................. 116 4.1.2 Cc thanh ghi ca UART 8250A/16450 ........................................................... 117 4.1.3 Lp trnh cho UART 8250A/16450 ................................................................. 121 4.2 MT S LP TRNH PHI GHP C BN........................................................ 125 4.2.1 Lp trnh phi ghp vi bn phm ..................................................................... 125 4.2.2 Lp trnh phi ghp vi mn hnh ..................................................................... 131 4.3 LP TRNH HP NG TRONG WINDOWS....................................................... 135 4.3.1 Cng c h tr lp trnh hp ng trn windows................................................ 135 4.3.2 S dng cng c pht trin RadASM................................................................ 136 4.4 TM TT ................................................................................................................ 138 143

Mc lc 4.5 BI TP ...................................................................................................................139 4.5.1 Cu hi trc nghim ...........................................................................................139 4.5.2 Bi tp Lp trnh ................................................................................................140 4.6 TI LIU THAM KHO.........................................................................................140 TI LIU THAM KHO ...................................................................................................141 MC LC...........................................................................................................................142

144

LP TRNH H THNG V IU KHIN THIT B


M s: 492LHD350
Chu trch nhim bn tho TRUNG TM O TO BU CHNH VIN THNG 1

You might also like