You are on page 1of 94

B mn Cng ngh iu khin t ng

Gio trnh hp ng

MC LC
Chng 1. NGN NG ASM V CCH LP TRNH ..............................................1 1.1. M u .................................................................................................................3 1.2. Ci t chng trnh dch TASM.........................................................................3 1.3. Cc bc thc hin mt chng trnh Assember trn my PC : .........................4 1.4. S h tr ca h thng cho vic lp trnh Assember ...........................................4 1.4.1 Cu trc cc thanh ghi ...................................................................................4 1.4.2 Cch th hin a ch nh (ROM hoc RAM): dng lgc v dng vt l .7 1.4.3 Cc ngt hay dng h tr cho lp trnh Assembler........................................7 1.5. H lnh Assembler ...............................................................................................7 1.5.1. C php ca mt dng lnh ASM................................................................7 1.5.2. Tp lnh Mnemonic .....................................................................................8 1.5.3 Cc lnh iu khin khi dch chng trnh (directive) ................................21 1.6. Chng trnh con................................................................................................34 1.6.1. ngha ca chng trnh con.....................................................................34 1.6.2. C ch khi mt chng trnh con b gi ....................................................34 1.6.3. C php mt chng trnh con ASM.........................................................34 1.7. MACRO .............................................................................................................37 1.7.1. ngha........................................................................................................37 1.7.2. Khai bo (xc lp) MACRO .......................................................................37 1.7.3 Cch dng MACRO c xc lp ..........................................................38 1.8. Directive INCLUDE ..........................................................................................38 1.8.1. ngha........................................................................................................38 1.8.2 C php chn................................................................................................38 1.8.3. C ch khi chng trnh dch TASM gp directive INCLUDE.................39 1.9. Chng trnh a tp............................................................................................48 1.9.1. ngha........................................................................................................48 1.9.2. Directive PUBLIC ......................................................................................48 1.9.3. Directive EXTRN .......................................................................................48 1.9.4. Cch dch v lin kt..................................................................................50 1.10. Bin hn hp : Directive STRUC, RECORD v UNION ...............................51 1.10.1 Cu trc STRUC ........................................................................................51 1.10.2 Directive UNION.......................................................................................51 1.11. Xy dng chng trnh Assembly c tp thc hin dng .COM............51 1.11.1 S khc nhau chng trnh dng COM v EXE........................................51 1.11.2 Lm th no c c chng trnh dng .COM ...................................51 1.11.3 Cc vn cn lu ..................................................................................52 1.11.4 Dng thng thy 1 chng trnh ASM c dng COM ...................52 Chng 2: LIN KT CC NGN NG BC CAO VI ASM...............................57 2.1 Lin kt Pascal vi ASM ....................................................................................57 2.1.1 Inline ASM..................................................................................................57 2.1.2 Vit tch bit tp ngn ng Pascal v tp ASM .........................................58 2.2 Lin kt c/c++ vi ASM...................................................................................67 2.2.1. Inline Assembly.......................................................................................67 2.2.2 Vit tch bit C/C++ v tp ASM.............................................................68

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Chng 3: LP TRNH H THNG...........................................................................77 3.1. Cc bc khi my tnh khi ng......................................................................77 3.2 Phn loi ngt v khi nim ...............................................................................78 3.3 C ch khi mt ngt c kch hot ..................................................................79 3.4. Cc bc xc lp ngt ........................................................................................79 3.4.1. Vit chng trnh con phc v ngt theo yu cu ca thut ton ..............79 3.4.2. Ly a ch u ca chng trnh con phc v ngt...................................79 3.5 Vng d liu ROM BIOS ...................................................................................82 3.6 Cc ngt hay dng trong h thng ......................................................................87 3.6.1. Ngt bn phm .........................................................................................87 3.6.2 Cc ngt vi mn hnh.................................................................................90

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Chng 1. NGN NG ASM V CCH LP TRNH


1.1. M u Gii thiu Ngn ng Asembler l ngn ng bc thp. u im : V ngn ng Assembler rt gn gi vi ngn ng my nn chng trnh + Chy nhanh. + Tit kim b nh. + C th lp trnh truy cp qua cc giao din vo ra nhng hin nay cc ngn ng bc cao cng c th lm c. Nhc im + Kh vit bi v yu cu ngi lp trnh rt am hiu v phn cng. + Kh tm sai: bao gm sai v c php (syntax) v sai v thut ton (Algorithm). Chng trnh dch s thng bo sai ta s dng debug ca DOS kim tra. + Khng chuyn chng trnh Assembler cho cc my tnh c cu trc khc nhau. ng dng + Vit li ca h iu hnh. + Cc chng trnh tr chi ( ngy trc). + To virus. + Cc chng trnh o v iu khin s dng trong cng nghip, ngy nay cc vi iu khin c s dng mt cch rng ri. 1.2. Ci t chng trnh dch TASM Hin nay c hai chng trnh dch rt ph bin l MASM (ca hng Microsoft) v TASM (ca hng Borland) v c bn l hai chng dch ny rt ging nhau nhng khc nhau ch: khi vit lnh push Nu vit : push ax push bx push cx th c hai chng trnh u bin dch c. ( cch vit ny theo MASM). Cn trong TASM th cho php vit push ax bx cx Ci t chng trnh dch TASM: Cch 1: Mua a bn quyn nu l a mm th c 5 a hoc l 1 a CD Run cmd A:\ install

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Cch 2: + To th mc: C:\TASM + Copy 4 tp li t my khc ci t theo cch 1 v th mc to trc.. 1.3. Cc bc thc hin mt chng trnh Assember trn my PC : (son tho chng trnh, dch chng trnh, lin kt, chy th v cch tm sai bng DEBUG ca DOS v TD (Turbo Debug) ca Borland) Bao gm 4 bc: + Bc 1: Dng chng trnh son tho bt k (Edit, NC, TC, .) son tho chng trnh. Sau khi son tho xong phi ct tp c ui l .ASM. + Bc 2: Dch chng trnh gc c ui .ASM thnh tp c ui l .OBJ C php: C:\BT> tasm ten tep[.ASM] ten tep.OBJ Ch : khi chng trnh dch c li th khng sinh ra tp c ui l .OBJ Cch khai bo sai ** Error**ten tep.asm[10] Illegal Instruction dng th bao nhiu li g + Bc 3: Lin kt chuyn tn tp c ui .OBJ sang tp .EXE hay .COM C php: C:\BT> tlink ten tep[.OBJ] ten tep.EXE hay ten tep.COM + Bc 4: Chy th chng trnh Khi chy nu c li th dng debug kim tra. 1.4. S h tr ca h thng cho vic lp trnh Assember
1.4.1 Cu trc cc thanh ghi

a) Thanh ghi l g? Thanh ghi l mt vng nh c bit dng RAM nm CPU, vic thm nhp cc thanh ghi c thc hin bng tn hu (tn thanh ghi). + Ngi lp trnh ASM hay dng thanh ghi lm ton hng thay cho bin nh v vy lm cho chng trnh chy

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

nhanh hn. + Gii thch: v cc thanh ghi nm CPU nn d liu ly ra nhanh hn. + Vng nh cache l vng nh nm trong CPU. b) Phn loi thanh ghi + My tnh 16 bit c 14 thanh ghi. + My tnh 32 bit c 16 thanh ghi. Cu trc thanh ghi ca my tnh 16 bit + Nhm 1: Thanh ghi c Ngi lp trnh ASM hay dng trng thi cc bit c lm iu kin cho cc lnh nhy c iu kin. x x x x O D I T S Z x A x P x C + x: khng c nh ngha. 6 bit c trng thi th hin cc trng thi khc nhau ca kt qu sau mt thao tc no , trong 5 bit c u thuc byte thp ca thanh c l cc c ging nh ca b vi x l 8 bit 8085 ca Intel. + C hoc CT (Carry flag): c nh. CF = 1 khi c nh hoc mn t MSB. + P hoc PF (Parity flag): c parity. PF phn nh tnh chn l (parity) ca tng s bit c trong kt qu. PF = 1 khi tng s bit 1 trong kt qu l chn. + A hoc AF (Auxiliary carry flag): c nh ph, rt c ngha khi ta lm vic vi cc s BCD. AF = 1 khi c nh hoc mn t mt s BCD thp (4 bit thp) sang mt s BCD cao (4 bit cao). + Z hoc ZF ( Zero flag): c rng, ZF = 1 khi kt qu bng 0. + S hoc SF (Sign flag): c du, SF = 1 khi kt qu m. + O hoc 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. Ngoi ra b vi x l 8088 cn c cc c iu khin sau y: + T hoc TF (Trap flag): c by, TF = 1 th CPU lm vic ch chy tng lnh( ch ny cn dng khi cn tm li trong mt chng trnh). + I hoc IF (Interrupt enable flag): c cho php ngt, IF = 1 th CPU cho php cc yu cu ngt c tc ng. + D hoc DF (Direction flag): c hng, DF = 1 khi CPU lm vic vi chui k t theo th t t tri sang phi (hay cn gi D l c li). + Nhm 2: Thanh ghi a nng: gm 8 thanh ghi 16 bits. AX AH AL BX BH BL CX CH CL DX DH DL SI DI BP SP + Trong H(high) th hin cc bit cao, L(low) th hin cc bit thp. + Trong 4 thanh ghi AX, BX, CX v DX c 3 cch truy cp: truy cp theo 8 bit cao hoc theo 8 bit thp hoc theo c 16 bit. Cc thanh ghi cn li ch c mt cch truy cp.
Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

+ AX (Accumulator, Acc): thanh cha. Cc kt qu ca cc thao tc thng c cha y (kt qu ca php nhn, chia). Nu kt qu l 8 bit th thanh ghi AL c coi l Acc. + BX (Base): thanh ghi c s, thng cha a ch c s ca mt bng dng trong lnh XLAT. + CX (Count): b m, CX thng c dng cha s ln lp trong trng hp cc lnh LOOP, cn CL thng cha s ln dch hoc quay trong cc lnh dch hay quay thanh ghi. + DX (Data): thanh ghi d liu, DX cng AX tham gia vo cc thao tc ca php nhn hoc chia cc s 16 bit. DX cn dng cha a ch ca cc cng trong cc lnh vo ra trc tip (IN/OUT). + SI (Source index): ch s gc hay ngun, SI ch vo d liu trong on d liu DS m a ch c th y tng ng vi DS : SI. + DI (Destination index): ch s ch, DI ch vo d liu trong on d liu DS m a ch c th y tng ng vi DS : DI. + BP (Base pointer) : con tr c s, BP lun tr vo mt d liu nm trong on ngn xp SS. a ch y ca mt phn t trong on ngn xp ng vi SS : BP. + SP (Stack pointer): con tr ngn xp, SP lun tr vo nh hin thi ca ngn xp SS. a ch y ca nh ngn xp ng vi SS:SP. Ngi lp trnh ch dng 7 thanh ghi sau: AX, BX, CX, DX, SI, DI, BP. + Nhm 3: Thanh ghi con tr lnh IP (Instruction pointer) hay PC(ProgRAM pointer) IP (Instruction pointer) 15 0 Ni dung trong thanh ghi IP cho bit a ch offset ca vng nh cha m lnh. + Nhm 4: Thanh ghi Segmnet ( phn on): 4 thanh ghi 16 bits. CS 0 DS ES SS Cc thanh ghi segment cho bit a ch segment. + CS (Code segment): m my. + DS, ES: d liu. + SS: ngn xp Cu trc thanh ghi ca my tnh 32 bit + Nhm 1+ nhm 2 + nhm 3 l cc thanh ghi 32 bit v vi ch E u (v d: EAX hay EBX) EAX 31 15

15

AX

+ Nhm 4 vn l cc thanh ghi 16 bit v thm hai thanh ghi GS v FS

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

1.4.2 Cch th hin a ch nh (ROM hoc RAM): dng lgc v dng vt l

Mt thanh ghi 16 bit th tr c 64k nhng vng nh ca my tnh hin nay rt ln do vy pha dng 2thanh ghi th hin a ch ca mt nh. V vng nh c chia thnh nhiu phn, mi phn 64k. a) Dng Logic a ch 1 nh = segment : offset + Thanh ghi th nht cho bit nh nm 64k th my (a ch segment). + Thanh ghi th hai cho bit khong cch t u segment n v tr nh (a ch offset). V d: 2: 100 tc l a ch ca nh nm v tr 100 tnh t trn nh ca segment th hai. b) Dng vt l a ch nh = seg*16 + offset + Cch nh a ch ny hay c dng.
1.4.3 Cc ngt hay dng h tr cho lp trnh Assembler

+ Hm 1: Ch 1 k t mov ah,1 ; gn ah = 1 al cha m ASCII ; al = 0 khi k t g vo l cc phm chc nng. int 21h + Hm 2: Hin 1 k t ln mn hnh t v tr con tr ang ng. Cch 1: mov al, m ASCII mov ah,0eh int 10h Cch 2: mov dl, m ASCII ; dl = m ASCII ca k t cn hin th mov ah,2 int 21h + Hm 3: Hin xu k t kt thc $ ln mn hnh. lea dx, tn bin xu ; mov dx,offset tn bin xu mov ah,9 int 21h + Hm 4: Tr v DOS mov ah,4ch int 21h 1.5. H lnh Assembler + Tp lnh MNEMONIC sinh m my chy chng trnh. + Cc DIRECTIVE iu khin khi dch chng trnh.
1.5.1. C php ca mt dng lnh ASM

+ Mi mt dng ch c vit mt lnh. + [Label] [Directive/Mnemonic] [Operands] [;Commnet] [Nhn] [Loi lnh] [Ton hng] [Ghi ch] T ; cho n ht dng l ghi ch v n c hiu lc ch trn 1 dng.

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

V d: 1) X1 EQU 10

; gn 10 cho X1 [Ton hng] [Ghi ch]

[Nhn] [Lnh Directive] 2) L1: 3) mov ax,bx [Lnh Mnemonic][Ton hng]


1.5.2. Tp lnh Mnemonic

- Tp lnh Mnemonic l g? l lnh ca ASM c th hin bng vit tt ca ting Anh cho d hiu. Ting Anh Lnh dng Mnemonic Move mov Addition add Multiplication mul - Cc quy c v ton hng + SRC: Ton hng ngun. + DST: Ton hng ch. + REG(reg8/reg16: Ton hng l thanh ghi + Data: Ton hng l hng s. + Mem: Ton hng l bin nh. + Segreg: Ton hng l thanh ghi segment. - Tp lnh MNEMONIC gm c 6 nhm + Nhm 1: Cc lnh di chuyn d liu + Nhm 2: Cc lnh s hc. + Nhm 3: Cc lnh thao tc bit + Nhm 4: Cc lnh thao tc xu k t. + Nhm 5: Cc lnh r nhnh + Nhm 6: Cc h thng c a) Nhm 1: Cc lnh di chuyn d liu Tt c lnh trong nhm ny khi thc hin khng lm thay i trng thi ca cc bit c. - Lnh mov Chc nng: a ni dung t SRC n DST C php: mov DST, SRC reg1 reg2 mov ax, bx reg data mov cx,100 reg mem mov dx,value mem reg mov value,dx mem data mov value,100 segreg reg16 mov ds,ax reg16 segreg mov bx,cs segreg mem16 mov cs,value mem16 segreg mov value,cs Ch : + Khng c di chuyn gia hai bin nh (mov mem1,mem2). Thc hin gin tip:

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

mov reg,mem2 mov mem1,reg + Khng a trc tip d liu vo thanh ghi segment (mov seg,data). Thc hin gin tip: mov reg16,data mov segreg,reg16 + S khc nhau khi s dng cc ch a ch ( mov ax,bx khc vi mov ax,[bx] ; a ni dung m bx tr n vo ax) mov ax,[bx] tng ng vi mov ax, ds:[bx] (SI,DI hay BP) Lnh push Chc nng: ct 2 byte ca SRC vo nh ngn xp(stack). C php: PUSH SRC reg16 mem16 V d: push ax Ton hng gc c th tm c theo cc ch a ch khc nhau: c th l thanh ghi a nng, thanh ghi on hay l nh. Lnh ny thng c dng vi lnh POP nh l mt cp i ngu x l cc d liu v trng thi ca chng trnh chnh(CTC) khi vo ra chng trnh con(ctc). Lnh POP Chc nng: ly 2 byte (1 t) nh ngn xp (stack) vo ton hng ch. C php: POP DST reg16 mem16 V d: push ax push bx push cx on Chng trnh

pop cx pop bx pop ax Ch : - C ch PUSH/POP l LIPO( last in first out) - Cch vit trn ch c s dng trong MASM cn trong TASM c vit nh sau: push ax bx cx - Lnh PUSHF Chc nng; ct gi tr thanh ghi c vo nh ngn xp C php: PUSHF D liu ti ngn xp khng thay i, SS khng thay i. - Lnh POPF Chc nng: Ly 2 byte t nh ngn xp ri a vo thanh ghi c. C php: POPF

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Sau lnh ny d liu ti ngn xp khng thay i, SS khng thay i. - Lnh XCHG (Exchange 2 Operands) Tro ni dung 2 ton hng Chc nng: Tro ni dung 2 ton hng DST SRC C php XCHG DST SRC reg1 reg2 reg mem Trong ton hng ch c th tm theo ch a ch khc nhau nhng phi cha d liu c cng di v khng c php ng thi l 2 nh v cng khng c l thanh ghi on. Sau lnh XCHG ton hng cha ni dung c ca ton hng kia v ngc li. Lnh ny khng tc ng n c. - Lnh IN Chc nng: c d liu t cng vo thanh ghi AL/AX C php: IN AL/AX, a ch cng Ch : + Nu a ch cng <256 th s a ch ng trc tip trong lnh IN V d: a ch cng l 1fh IN AL,1fh ; ni dung cng 1fh a vo AL. + Nu a ch cng 256 th phi nh n thanh ghi DX V d: a ch COM1 = 378h mov dx,378h in al,dx - Lnh OUT Chc nng: a d liu t thanh ghi AL/AX ra cng C php: OUT a ch cng,AL/AX Ch : + Nu a ch cng <256 th s a ch ng trc tip trong lnh OUT V d: a ch cng l 1fh OUT 1fh,AL ; ni dung cng 1fh a vo AL. + Nu a ch cng 256 th phi nh n thanh ghi DX V d: a ch COM1 = 378h mov dx,378h out dx,al Lnh ny khng tc ng n c. - Lnh LEA (load Efective address) Chc nng: ly phn a ch offset ca bin a vo thanh ghi 16 bit C php: lea reg16, mem V d: lea bx, Value hay mov bx, OFFSET Value ch thng l cc thanh ghi: BX, CX, DX, BP, SI, DI. Ngun l tn bin trong on DS c ch r trong lnh hay nh c th. V d: lea dx, msg; Np a ch offset ca bn tin msg vo dx. DX xx:yy value

10

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Lnh LES (Load register and ES with words from memory) Chc nng: chuyn gi tr ca 1 t t mt vng nh vo thanh ghi ch v gi tr ca t tip theo sau ca vng nh vo thanh ghi ES. C php: les reg, mem Trong : ch l mt trong cc thanh ghi AX, BX,CX, DX, SP, BP, SI, DI. Gc l nh trong on DS c ch r trong lnh BX xx:yy value ES

Lnh LDS (Load resgister and DS with words from memory) Chc nng: Np mt t t b nh vo thanh ghi cho trong lnh v 1 t tip theo vo DS. C php: lds reg, mem BX xx:yy value DS

b) Nhm 2: Cc lnh s hc b1) S c du v s khng du - S khng du: Nu nhn vo ton hng ( ln cc ton hng l 1 byte hay l l 2 byte) vi s khng du th bit cao nht mang gi tr ti v tr . V d: 1 1 1 1 1 1 1 1 255 - S c du: Nu nhn vo ton hng ca s c du th bit cao nht s mang ngha v du: 1 ton hng l s m, 0 ton hng l s dng. 1 1 1 1 1 1 1 1 Nu s khng du th l 1.27 = 128 Nu s c du th l 1 b2) Cch th hin mt s m ca my tnh My tnh th hin s m bng cch b 2 gi tr tuyt i ca s . V d: mov ax, - 1 1= 0000 0000 0000 0001 b 1: 1111 1111 1111 1110 + 1 b 2: 1111 1111 1111 1111 mov ax, - 100 100 = 0000 0000 0110 0100 1111 1111 1001 1011 + 1 b 2: 1111 1111 1001 1100 Hu ht cc lnh trong nhm ny khi thc hin c th lm thay i cc k t. - Lnh ADD(addition) Chc nng: DST DST + SRC

Chng 1- Ngn ng ASM v cch lp trnh

11

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Cng hai ton hng: ly ton hng ch cng vi ton hng ngun ri a vo ton hng ch. C php: add DST, SRC reg1 reg2 add ax, bx reg data add cx,100 reg mem add dx,value mem reg add value,dx mem data add value,100 Tc ng n c: C, P, A, Z, S, O. Lnh ADC(Add with carry) Chc nng: cng c nh, DST DST + SRC + CF C php: adc DST, SRC Tc ng n c: C, P, A, Z, S, O. V d: adc ax, bx

Lnh INC(Increment Destination Register or Memory) Chc nng: Tng ton hng ch thm 1. DST DST + 1 C php: inc DST Tc ng n c: C, P, Z, S, O. V d: reg inc ax mem inc value Lnh SUB (Substraction) Chc nng: Tr hai ton hng, DST DST SRC sub DST, SRC C php: V d: sub ax, bx Tc ng n c: C, P, A, Z, S, O. Ch : ch a ch khng c ng thi l 2 nh hay l thanh ghi on. Lnh SBB (Substraction with borrow) Chc nng: Tr c mn, DST DST SRC CF C php: sbb DST, SRC V d: sbb ax, bx Tc ng n c: C, P, A, Z, S, O.

12

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Lnh MUL/ IMUL (Multiply Unsigned Byte or Word/ Integer Multiplication ) Chc nng: Nhn 2 ton hng vi s khng du (MUL), s c du (IMUL) C php: MUL(IMUL) SRC reg mem C hai trng hp t chc php nhn + 8 bits * 8 bits S b nhn phi l s 8 bit trong AL Sau khi nhn: al*SRC AX + 16 bits * 16 bits S b nhn phi l s 16 bit trong AX Sau khi nhn: ax*SRC dx:ax Tc ng n c: C, O. Ch : al = 1111 1111 bl = 0000 0010 mul bl ax = al*bl (255*2 = 510) imul bl ax = al*bl (- 1*2 = -2 ) Trong php chia th ax, bx, dx (al,bl,dx) l n Lnh DIV/IDIV(Unsigned Divide/Integer Division) Chc nng: Chia hai ton hng vi s khng du/ s c du C php: DIV (IDIV) SRC reg mem Hai trng hp t chc php chia + Nu s 16 bits chia cho s 8 bits

+ Nu s 32 bits chia cho s 16 bits

Trong php chia th ax, bx, dx (al,bl,dx) l n V d:

Chng 1- Ngn ng ASM v cch lp trnh

13

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Lnh DEC (Decrement Destination Register or Memory) Chc nng: Gim ton hng ch i 1, DST DST 1 C php: dec DST reg dec ax mem dec value Tc ng n c: C, P, Z, S, O. Lnh NEG (Negate a Operand) Chc nng: ly b hai ca mt ton hng, o du ca mt ton hng DST - DST C php: neg DST reg neg ax mem neg value Tc ng n c: C, P, A, Z, S, O. Lnh CMP (Compare Byte or Word) Chc nng: So snh ni dung ca hai ton hng v dng c. Sau khi thc hin lnh ny ni dung ca hai ton hng khng thay i. C php: cmp DST, SRC Tc ng n c: C, P, Z, S, O. Cch dng c: cmp DST, SRC + Nu DST < SRC th CF = 1. + Nu DST SRC th CF = 0. + Nu DST = SRC th ZF = 1. + Nu DST SRC th ZF = 0.

c) Nhm 3: Cc lnh thao tc bit Ch : tt c cc lnh trong nhm ny khi thc hin c th lm thay i trng thi cc bit c. - Lnh AND Chc nng: Thc hin php v logic, bit ca kt qu bng 1 khi 2 bit tng ng u bng 1. DST DST SRC V d: al = 1010 1010 bl = 1100 1100 and al,bl = 1000 1000 C php: and DST, SRC Cch hay dng: + Tch bit:

14

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

al = xxxx xxxx 0001 0000 and al, 10h = 000x 0000 Khi dng php AND che i/ gi li mt vi bit no ca mt ton hng th bng cch nhn logic ton hng vi ton hng tc th c cc bit0/1 cc ch cn che/ gi nguyn tng ng. + Dng c and DST,DST V d: and ax, ax Nu ax < 0 th SF = 1. Nu ax 0 th SF = 0. Nu ax = 0 th ZF = 1. Nu ax 0 th ZF = 0. Lnh OR Chc nng: thc hin php hoc logic, Bit ca kt qu = 1 khi 1 trong 2 bit l 1. DST DST V SRC V d: al = 1010 1010 bl = 1100 1100 or al,bl = 1110 1110 C php: or DST, SRC Tc ng n c: C = O = 0, P, Z, S. Lnh XOR Chc nng: Thc hin php hoc loi tr 2 ton hng, bit ca kt qu bng 1 khi 2 bit tng ng khc nhau. V d: al = 1010 1010 bl = 1100 1100 xor al,bl = 0110 0110 C php: xor DST, SRC Cch hay dng: + Tch bit: al = xxxx xxxx 0001 0000 and al, 10h = 000x 0000 Tc ng n c: C = O = 0, P, Z, S. V d: Thc hin ax = 0 1. mov ax,0 3 byte 2. and ax,0 3. sub ax,ax 2 byte 4. xor ax,ax Lnh SHL (Shift Left) Chc nng: dch tri cc bit ca ton hng ch i mt s ln no (s ln dch c ct trong thanh ghi CL). C php: SHL DST, CL (reg, mem)

Chng 1- Ngn ng ASM v cch lp trnh

15

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Tc ng n c: C, P, Z, S, O. Mi mt ln dch MSB s a qua c CF v a 0 vo LSB. CL cha s ln dch mong mun. Nu dch mt ln th ta c th vit trc tip. VD: shl ax,1 Nu s ln dch 2 th phi nh n CL/CX shl ax, 4 mov cl/cx, 4 shl ax, cl/cx ngha: Dch tri 1 ln l nhn 2 vi s nguyn dng. - Lnh SHR (Shift Right) Chc nng: dch phi logic cc bit ca ton hng ch i mt s ln no (s ln dch c ct trong thanh ghi CL). C php: SHR DST, CL (reg, mem)

Tc ng n c: C, P, Z, S, O. Mi mt ln dch LSB s a qua c CF v a 0 vo MSB. CL cha s ln dch mong mun. Nu dch mt ln th ta c th vit trc tip. VD: shr ax,1 Nu s ln dch 2th phi nh n CL/CX shr ax, 4 mov cl/cx, 4 shr ax, cl/cx ngha: Dch phi 1 ln l chia i v lm trn di vi s nguyn dng - Lnh SAR ( Shift Arithmetically Right) Chc nng: dch phi s hc cc bit ca ton hng ch i mt s ln no (s ln dch c ct trong thanh ghi CL). C php: SAR DST, CL (reg, mem)

Tc ng n c: C, P, Z, S, O. Mi mt ln MSB c gi li ( nu ta hiu y l bit du ca mt s no th du lun khng i sau php dch phi s hc) cn LSB c a vo c CF. CL cha sn s ln dch mong mun. Nu dch mt ln th ta c th vit trc tip.

16

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

VD:sar ax,1 Nu s ln dch 2th phi nh n CL/CX sar ax, 4 mov cl/cx, 4 sar ax, cl/cx ngha: Dch phi 1 ln l chia i v lm trn di vi s c du. Lnh ROL( Rotate All Bits to the Left) Chc nng: quay vng sang tri cc bit ca ton hng ch i mt s ln no (s ln dch c ct trong thanh ghi CL). Trong mi ln quay gi tr bit cao nht va chuyn vo thanh ghi c CF ng thi chuyn vo bit thp nht C php: ROL DST, CL (reg, mem)

Tc ng n c: C, O. . Nu dch mt ln th ta c th vit trc tip. VD:rol ax,1 Lnh ROR Chc nng: quay vng sang phi cc bit ca ton hng ch i mt s ln no (s ln dch c ct trong thanh ghi CL). Trong mi ln quay gi tr bit thp LSB nht va chuyn vo thanh ghi c CF ng thi chuyn vo bit cao nht MSB.

C php: ROR

DST, CL (reg, mem)

Tc ng n c: C, O. . Nu dch mt ln th ta c th vit trc tip. VD:ror ax,1 d) Nhm 4: Cc lnh lm vic vi xu Ch : Ch c 2 lnh trong nhm ny khi thc hin lm thay i cc bit c. - Lnh MOVSB/MOVSW (Move String Byte or String Word) Chc nng: Chuyn mt xu k t theo tng byte(MOVSB) hay theo tng t (MOVSW) t vng nh tr bi DS:SI sang vng nh tr bi ES:DI. Sau mi ln dch chuyn th gi tr ca SI, DI t ng tng ln 1 hoc 2 khi c hng DF = 0 hoc gim i 1 hoc 2 khi DF = 1.

Chng 1- Ngn ng ASM v cch lp trnh

17

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Phn t ca Chui ch C php: MOVSB hoc MOVSW

Phn t ca Chui gc

Chun b trc ds:si con tr n u xu SRC, es:di con tr n u xu DST Lnh ny khng tc ng n c. Lnh LODSB/LODSW (Load String Byte or Word into AL/AX Chc nng: Chuyn cc k t theo tng byte (LODSB) hay theo tng t (LODSW) t vng nh tr bi DS:SI vo AL/AX. C php: LODSB hoc LODSW Chun b trc ds:si con tr u xu, df = 0 hay df = 1. Lnh ny khng tc ng n c. Lnh STOSB/STOSW (Store AL/AX in String Byte/Word) Chc nng: Chuyn cc k t nm AL(STOSB) /AX (STOSW) vo vng nh tr bi ES:DI. C php: STOSB hoc STOSW hoc STOS Chui ch. Xc lp trc ES:DI tr n u vng nh, df = 0 hay df = 1. Lnh ny khng tc ng n c. Nhn xt 1. movsb = lodsb + stosb 2. movsw = lodsw + stosw Lnh CMPSB/CMPSW Chc nng: So snh hai xu k t theo tng byte (CMPSB) / theo tng t (CMPSW) gia hai vng nh tr bi DS:SI v ES:DI. Lnh ny ch to c, khng lu li kt qu so snh, sau khi so snh cc ton hng khng b thay i. C php: CMPSB hoc CMPSW hoc STOS Chui ch. Xc lp trc DS:SI tr n u xu 1, ES:DI tr n u xu 2, df = 0 hay df = 1. Tc ng n c: ZF = 1 khi hai xu bng nhau, ZF = 0 khi hai xu khc nhau. Tin t REP (Repeat String Instruction until CX = 0). Chc nng: Lp i lp lai lnh lm vic vi xu k t ng sau n cho n khi cx = 0. Sau mi ln thc hin cx t ng gim i 1 C php: mov cx, s ln rep lnh lm vic vi xu ; rep movsb

18

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Thut ton 1. DS:SI 2. ES:DI 3. D = 0 4. CX = 5 5. rep movsb; sau mi ln cx = cx 1 cho n khi cx = 0. e) Nhm 5: Cc lnh r nhnh - Lnh Call Chc nng: Gi chng trnh con C php Call Addr (seg:offset) Label Tn chng trnh con reg mem Lnh RET Chc nng: quay v chng trnh gi chng trnh con C php: RET (nm cui chng trnh con) Lnh INT Chc nng: Kch hot mt ngt (chuyn sang chy chng trnh con phc v ngt) (Ngt mm). C php: int n (s ngt vit theo s hexa) V du: int 21h = int 33 Lnh IRET Chc nng: quay v chng trnh kch hot n t chng trnh con phc ngt. C php: IRET Lnh JMP (go to) Chc nng: nhy khng iu kin C php: jmp Addr (seg:offset) Label Tn chng trnh con reg mem Ch : Bc nhy ca lnh jump < 64k

Chng 1- Ngn ng ASM v cch lp trnh

19

B mn Cng ngh iu khin t ng

Gio trnh hp ng

- Lnh nhy c iu kin Vi s khng c du Vi s c du (Below/above) (Less/ greater)


Cmp Jb/jnae DST, SRC KhiDST di SRC Khi DST di SRC hoc = Khi DST= SRC Khi DST SRC Khi DST trn SRC Khi DST trn /=SRC Cmp Jl/jnge DST, SRC Khi DST<SRC Khi DSTSRC Khi DST= SRC Khi DST SRC Khi DST > SRC Khi DST SRC Nhn a ch Jbe/jna Nhn a ch Je Nhn a ch Jne Nhn a ch Ja/jnbe Nhn a ch Jae/jnb Nhn a ch Nhn a ch Jle/jng Nhn a ch Je Nhn a ch Jne Nhn a ch Jg/jnle Nhn a ch Jge/jnl Nhn a ch

Nhy theo trng thi cc bit c


jc Nhn a ch jnc Nhn a ch jz Nhn a ch jnz Nhn a ch js Nhn a ch jns Nhn a ch Khi CF=1 Khi CF=0 Khi ZF=1 Khi ZF=0 Khi SF=1 Khi SF=0

Ch : Bc nhy cc lnh nhy c iu kin phi nh hn hoc bng 128 byte Lnh LOOP (for ca ASM) Chc nng: lp i lp li khi lnh ASM nm gia nhn v loop cho n khi cx = 0. Mi khi thc hin mt vng lp gi tr ca CX gim i 1. C php: mov cx, s ln lp; s ln lp 1 Nhan: Khi lnh ASM

Loop Nhan f) Nhm 6: Cc lnh thao tc vi c - Lnh CLC (Clear CF) Chc nng: Xo gi tr c CF v 0, CF = 0 C php: CLC C C = 0 - Lnh STC Chc nng: a gi tr c CF ln 1, CF = 1 C php: STC C C = 1 - Lnh CMC Chc nng: o gi tr hin thi ca c CF. C php: CMC Tc ng n c C. - Lnh CLI Chc nng: Xo gi tr ca c IF v 0(IF = 0). Cm ton b cc ngt cng tr ngt MNI. C php: CLI C IF = 0. - Lnh STI Chc nng: a gi tr ca c IF ln1 (IF = 1). Cho php ngt cng.

20

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

C php: STI C IF = 1. Lnh CLD Chc nng: Xo gi tr ca c DF v 0 (DF = 0). C php: CLD C DF = 0, dng c. Lnh STD Chc nng: a gi tr ca c DF ln1 (DF = 1). C php: STD C DF = 1. Lnh HLT Chc nng: dng my C php: HLT Lnh NOP Chc nng: lnh ny khng thc hin g c C php: NOP (4s) ngha: To tr (delay)

To vng ch v tn ch ngt. L1: nop jmp L1


1.5.3 Cc lnh iu khin khi dch chng trnh (directive)

1.5.3.1. Cc directive iu khin segment: dng n gin (.MODEL, .STACK, .DATA, .CODE, ...) a) Directive .MODEL Chc nng: cho php ngi lp trnh xc lp vng nh RAM thch hp cho chng trnh. C php . Model Kiu Tiny Small Compact Medium Large Huge b) Directive .STACK

Code + data 64k Code 64k; data 64k Code 64k; data 64k Code 64k; data 64k Code 64k; data 64k 1 array 64k Code 64k; data 64k 1 array 64k

Chng 1- Ngn ng ASM v cch lp trnh

21

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Chc nng: bo cho chng trnh dch ca ASM bit xc lp 1 vng nh RAM cho Stack. Vi lnh iu khin ny th DOS s xc lp a ch u ca ngn xp v gi tr c a vo thanh ghi segment SS. C php: . stack di (tnh theo byte) V d: . stack 100h Nu khng c khai bo . stack th ly di mc nh default. c) Directive . DATA Chc nng: bo cho chng trnh dch ca ASM bit xc lp 1 vng nh RAM cho d liu chng trnh. C php: .DATA Khai bo bin Bin trong ASM c ba loi: bin s, bin xu k t v bin trng s - Khai bo bin s . DATA Tn bin Kiu Gi tr ban u/? db ( 1 byte) dw ( 2 byte) dd ( 4 byte) dp ( 6 byte) dq ( 8 byte) dt ( 10 byte) trong 2 bin db v dw hay dng. V d: .DATA Value dw ? Value db 10 - Khai bo bin xu k t . DATA Tn bin db Cc k t cch nhau bi du phy , ln dup (1 k t/ ?) V d: .DATA xau1 db H,e,l,l,l,o xau2 db 100h dup(A) xau2 db 100 dup(?) - Khai bo bin trng s .DATA Tn trng s kiu ca thnh phn (Cc s cch nhau bi du,) ln dup( 1 s/?) V d: .DATA array1 db 100,2,21,31 array2 dw 100h dup(-100)

22

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

array3 dd 100 dup(?) Ch : Nu chng trnh c khai bo bin (tc l c .DATA) th ngi lp trnh ASM phi a phn a ch segment ca vng nh d liu vo trong DS nh 2 lnh sau: mov reg16, @data mov ds,reg16 V d: mov ax, @data mov ds,ax d) Directive .CODE Chc nng: Bo cho chng trnh dch ASM bit xc lp 1 vng nh RAM cho phn t m my ca chng trnh. C php: .CODE

e) Dng thng thy 1 chng trnh ASM n gin (Khai bo theo directive iu khin segment dng n gin) .MODEL .STACK .DATA Khai bo bin .CODE Nhn chng trnh: mov ax, @data mov ds,ax Thn chng trnh mov ah, 4ch int 21h END Nhn chng trnh V d 1: Hin 1 xu ln mn hnh Cch 1: Dng chc nng hin 1 xu $ ln mn hnh lea dx, tn bin xu mov ah,9 int 21h C:\BT>edit vd1.asm .MODEL small .STACK 100h .DATA

Chng 1- Ngn ng ASM v cch lp trnh

23

B mn Cng ngh iu khin t ng

Gio trnh hp ng

M db Hello, World!$ .CODE PS: mov ax, @data mov ds,ax lea dx, M mov ah,9 int 21h mov ah,1 int 21h mov ah,4ch int 21h END PS Cch 2: Dng lnh LODSB v xu khai bo theo dng ngn ng C .MODEL small .STACK 100h .DATA M db Hello, World!,0 .CODE PS: mov ax, @data mov ds,ax lea si, M cld L1: Lodsb And al,al Jz KT mov ah,0eh int 10h jmp L1 KT: mov ah,1 int 21h mov ah,4ch int 21h END PS Cch 3: Khng dng lnh lm vic vi xu .MODEL small .STACK 100h .DATA M db Hello, World!,0 .CODE PS:

24

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

mov ax, @data mov ds,ax lea si, M cld L1: mov al,[si]; mov al, ds:[si] and al,al jz KT mov ah,0eh int 10h inc si jmp L1 KT: mov ah,1 int 21h mov ah,4ch int 21h END PS V d 2: Hin ni dung AX ln mn hnh dng binary AX = -1 suy ra ct 1111 1111 1111 1111 AX = 100 0000 0000 0110 0100 AX = 255 0000 0000 1111 1111 C:\BT>edit vd2.asm .MODEL small .STACK 100h .CODE PS: mov ax, s th -1 hoc 100 hoc 255 mov bx,ax mov cx, 16 L1: xor al, al shl bx,1 adc al,0 add al,30h; hin m ASCII mov ah,0eh int 10h loop L1 mov ah,1 int 21h mov ah,4ch int 21h END PS

Chng 1- Ngn ng ASM v cch lp trnh

25

B mn Cng ngh iu khin t ng

Gio trnh hp ng

V d 3: Tnh 5! Cch 1: khng dng bin .MODEL small .STACK 100h .CODE PS: mov ax, 1 mov cx, 5 L1: mul cx loop L1 mov ah,1 int 21h mov ah,4ch int 21h END PS Cch 2: dng bin .MODEL small .STACK 100h .DATA FV dw ? FAC dw ? .CODE PS: mov ax, @data mov ds,ax mov FV, 1 mov FAC, 2 mov cx, 4 L1: mov ax, FV mul FAC mov FV, ax inc FAC loop L1 mov ah,4ch int 21h END PS Gii thch: cx = 4 ax = FV = 1 dx:ax = ax*FAC = ax=1.2 ax = 1.2 FV = ax = 1.2 ax = 1.2.3

ax = 1.2.3 ax = 1.2.3.4

ax = 1.2.3.4 ax = 1.2.3.4.5

26

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

FAC = 3 cx = 3?0

FV=1.2.3 FAC = 4 Cx = 2?0

FV=1.2.3.4 FAC = 5 Cx = 1?0

FV=1.2.3.4.5 FAC = 6 Cx = 0?0

f) Cng c DEBUG Chc nng: g ri chng trnh ASM Quy c: - Mi lnh l 1 k t: D, T, G, P, Q, N, L, O - Gi tr lm vic vi DEBUG l h hexa Khi ng cng c DEBUG Cch 1: ..\>debug tentep.exe (.com) Cch 2: .\> debug - N tentep.exe (.com) -L Cc lnh hay dng - Lnh D (Dump = Display) Chc nng: hin vng nh ln my tnh C php: - D a ch u ; (seg:offset)

-D hin tip 128 byte Lnh E (Enter) Chc nng: hin v sa ni dung nh . C php: - E a ch offset ; (seg:offset)

Lnh R (Register) Chc nng: hin v sa ni dung 1 thanh ghi. C php: - R Tn thanh ghi ; tn hu ca thanh ghi

Lnh G (Go) Chc nng: chy t ni chng trnh ang ng (IP ang tr) n ht chng trnh. C php: -G

Chng 1- Ngn ng ASM v cch lp trnh

27

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Gii thch: -

lnh 1 lnh 2

Lnh T/P Chc nng: cho php chy 1 bc. C php: - T/P Hin ni dung cc thanh ghi AX BX CX DX SI DI DS ES CS SS IP SP

BP

ZI

AY

ODD

Z
NZ

A
NA

P
EVEN

lnh sp thc hin tip theo. S khc nhau gia T v P 1. Call Call tn chng trnh con -T nhy vo chng trnh con -P chy ht chng trnh con, coi chng trnh con l 1 lnh 2. INT (ngt mm) int n -T nhy vo thn chng trnh con phc v ngt -P chy ht chng trnh con phc v ngt 3. Loop Nhn Nhan: Loop Nhan -T chy tng vng mt; cx = cx -1?0 -P chy ton b cc vng cx 0 Lnh Q (Quit) Chc nng: tr v DOS. C php: -Q Lnh U (UnAssembly) Chc nng: dch ngc t dng .exe hay .com sang dng .asm C php: - U a ch nh u ; seg: offset a ch m my lnh mnemonic xx:yy eg jmp Ch vn khai bo bin 1. Khai bo bin tc l xin cp pht nh. 2. Bin no c khai bo trc s chim nh trc. 3. Bin khai bo u tin s c a ch offset = 0000h Gii thch .DATA FV dw ? FAC dw ? mov FV, 1 mov word

PTR[0000];1

28

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

mov FAC,1

mov word

PTR[0002];2

1.5.3.2. Cc directive iu khin segment: dng chun (SEGMENT, GROUP v ASSUME) a) Directive SEGMENT Chc nng: bo cho chng trnh dch ASM xc lp cc segment cho chng trnh. C php:

- Tn Segment: bt k mt nh danh no. - Align Chc nng: xc lp khong trng gia segment ang khai bo vi segment trc n. C php: ALIGN BYTE WORD PARA (Default) (16 BYTE) PAGE (128 BYTE) Gii thch:

- Combine Chc nng 1: cho php t segment khai bo 1 vng nh RAM theo yu cu. C php: tn segment SEGMENT at a ch Tn segment ENDS Chc nng 1: phc v chng trnh a tp thun tu ASM, cch gp cc segment c cng tn nm cc tp khc nhau khi lin kt. C php: COMMON Overlay ln nhau

Chng 1- Ngn ng ASM v cch lp trnh

29

B mn Cng ngh iu khin t ng

Gio trnh hp ng

PUBLIC PRIVATE (Default) V d: X1

Continue, Khng bit nhau tep2.asm Segment common

tep1.asm Segment common

X1

- USE : ch my tnh 32 bit tr ln use16 ASM 16 bit (default) use32 ASM 32 bit - CLASS Chc nng: cho php gp cc segment c cng lp li gn nhau khi lin kt

Cch khai bo 3 segment ca chng trnh Dng chun Stack segment db 100h dup (?) Stack ends Data segment Khai bo bin Data ends Ch : mov ax, data mov ds, ax Code segment Nhan CT:

Dng n gin .Stack 100h .DATA Khai bo bin Ch : mov mov ax,@data ds, ax

.CODE Nhan CT:

Code ends ENDS Nhan CT ENDS Nhan CT b) Directive GROUP Chc nng: gp cc segment cng loi cho d dng qui chiu. C php:

30

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

tn nhm GROUP Khai bo cc segme nt Gii thch: Data1 segment M1 db ? Data1 ends Data2 segment M2 dw ? Data2 ends Code segment PS: mov ax, data1 mov ds,ax mov cl, M1 mov ax, data2 mov ds,ax mov cl, M2

tn cc segment

Ta lm group nh sau: Nhom_DL GROUP data1,data2 Data1 segment M1 db ? Data1 ends Data2 segment M2 dw ? Data2 ends Code segment PS: mov ax, nhom_DL mov cl, M1 mov dx,M2 c) Directive ASSUME Chc nng: cho bit segment khai bo thuc loi segment no C php: assume tn thanh ghi segment : tn segment Gii thch

Chng 1- Ngn ng ASM v cch lp trnh

31

B mn Cng ngh iu khin t ng

Gio trnh hp ng

assume cs:x3, ds:x2,ss:x1 Ch : assume thng l dng u ca code segment Dng chng trnh ASM n gin (dng chun) Stack segment db 100h dup (?) Stack ends Data segment Khai bo bin Data ends Code segment Assume cs:code, ds:data, ss:_stack Nhan CT: mov ax, data2 mov ds,ax mov ah, 4ch int 21h code ends END Nhan CT Bi tp: Hin xu k t $ Stack segment db 100h dup (?) Stack ends Data segment M db Hello, World!$ Data ends Code segment Assume cs:code, ds:data, ss:_stack PS: mov ax, data

32

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

mov ds,ax lea dx, M mov ah, 9 int 21h mov ah, 1 int 21h mov ah, 4ch int 21h code ends END PS

1.5.3.3. Cc directive hay dng khc (PTR, EQU, LABEL, SEG, OFFSET, DUP, FAR, NEAR, ARG, COMMENT,...) a) Directive OFFSET Chc nng: bo cho chng trnh dch ca ASM ly phn a ch offset ca bin nh C php: OFFSET mem ; phn a ch offset V d: .DATA Value dw ? mov bx, OFFSET Value yy lea bx, value b) Directive SEG Chc nng: bo cho chng trnh dch ca ASM ly phn a ch segment ca bin nh. C php: SEG mem V d: mov ax, SEG value xx c) Directive PTR Chc nng: con tr n cc thnh phn ca bin nh (cho php ly tng byte). C php: Kiu PTR [thanh ghi] V d: .DATA Value dw ? .CODE

Chng 1- Ngn ng ASM v cch lp trnh

33

B mn Cng ngh iu khin t ng

Gio trnh hp ng

1.6. Chng trnh con


1.6.1. ngha ca chng trnh con

Lm cho chng trnh c cu trc. Tit kim vng nh.

1.6.2. C ch khi mt chng trnh con b gi

C ch c 5 bc: Bc 1: Tham s thc a vo stack Bc 2: a ch lnh tip theo a vo stack Bc 3: H iu hnh bit c a ch u ca chng trnh con. Do vy h iu hnh a a ch u ca chng trnh con vo CS:IP r nhnh vo chng trnh con. Bc 4: Thc hin chng trnh con cho n khi gp return th vo stack ly a ch lnh tip theo ( ct bc 2 a vo CS:IP) v quay v chng trnh gi n. Bc 5: tip tc chng trnh ang thc hin d.

1.6.3. C php mt chng trnh con ASM

Tn chng trnh con PROC [near/far] Bo v cc thanh ghi m thn chng trnh con ph v. Cc lnh ASM ca thn chng trnh con. Hi phc cc thanh ghi m thn chng trnh con ph v. RET Tn chng trnh con ENDP Nhn xt 1. Chng trnh con thun tu ASM khng c i. 2. Vn near/ far - Chng trnh con l near khi m my ca chng trnh con v m my ca chng trnh chnh l cng nm trong 1 segment, a ch ca chng trnh con v chng trnh ch khc nhau phn a ch offset. Cho nn a ch lnh tip theo ct vo stack (Bc 2, mc 1.6.2) ch cn 2 byte offset. - Chng trnh con l far khi m my ca chng trnh con v m my ca chng trnh chnh nm trn cc segment khc nhau, a ch ca chng trnh con v chng trnh chnh khc nhau c v phn a ch segment. Cho nn a

34

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

ch lnh tip theo ct vo stack (Bc 2, mc 1.6.2) phi cn 4 byte offset ( 2 byte segment v 2 byte offset). Default: - Vi chng trnh c khai bo directive dng n gin th directive MODEL s cho bit chng trnh con l near hay far Nu .MODEL tiny/small/compact th chng trnh con l NEAR(m my< 64k) Nu .MODEL medium/large/huge th chng trnh con l FAR(m my>64k - Vi chng trnh con c vit theo directive dng chun th mc nh l near. Cn mun chng trnh con l far th phi vit far khi vit chng trnh con. 3. Vn cn bo v thanh ghi v phc hi cc thanh ghi trong thn chng trnh con. V d: Chng trnh con Chng trnh chnh . push ax mov ax, 10 call chng trnh con mov cx,ax xor ax, ax pop ax RET Bo v v hi phc cc thanh ghi v thn chng trnh con ph v tt nht bng c ch PUSH v POP. V d 1: Hy vit chng trnh con ASM cho php nhn mt s nguyn (-32768 ~ 32767) t bn phm kt thc nhn mt s nguyn bng phm Enter (13 = 0dh). Kt qu nm trong thanh ghi ax. Ch khng cho php nh sai v sa. a) Nhn s nguyn dng - Dng hm nhn k t mov ah, 1 int 21h Suy ra al cha m ASCII ca k t. al 30h: thnh m ASCII chuyn thnh s - S va a vo s cng phn s ct vo trc *10 b) Nhn mt s nguyn m - C 1 bin c du: 0 l s dng, 1 l s m. Nu pht hin k t u l du m th bin c du s bng 1. Nhn mt s nguyn dng sau hi bin c du. Nu c du = 1 th chuyn sang s b 2 i du. VAO_SO_N PROC push bx cx dx, si mov bx,10 xor cx, cx; cx = 0 cx = phn s vo trc mov si, cx; SI = bin c du mov ah, 1 int 21h cmp al, 13; Enter? je VSN3

VSN1:

Chng 1- Ngn ng ASM v cch lp trnh

35

B mn Cng ngh iu khin t ng

Gio trnh hp ng

cmp jne inc jmp VSN2: sub xor exchg mul add jmp VSN3: and jz neg VSN4:

al, - VSN2 si VSN1 al, 30h ah,ah ax, cx; i ch s va vo v s vo trc bx cx, ax VSN1 si,si VSN4 cx

mov ax, cx pop SI dx cx bx VAO_SO_N ENDP V d 2: Vit chng trnh con hin ni dung c trong AX ra ngoi mn hnh dng c s 10. Thut ton: a) AX cha s nguyn dng

vng loop X: pop ax mov ah, 0ch int 10h loop X b) AX cha s m Kim tra hin AX 0 - Nu AX 0 hin du ra mn hnh sau i du AX ri hin nh mt s nguyn dng sau du tr.

36

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Chng trnh HIEN_SO_N

PROC push ax bx cx dx mov bx, 10 xor cx, cx and ax, ax jns HSN1 push ax mov al, - mov ah, 0eh int 21h pop ax neg ax HSN1: xor dx, dx div bx add dx, 30h push dx inc cx and ax, ax jnz HSN1 HSN2: pop ax mov ah,0eh int 10h loop HSN2 pop dx cx bx ax ret HIEN_SO_N END 1.7. MACRO
1.7.1. ngha

Cho php ngi lp trnh ASM to lp 1 lnh ASM mi, trn c s tp lnh chun ca ASM.
1.7.2. Khai bo (xc lp) MACRO

C php: Tn Macro Macro [i] Bo v cc thanh ghi m thn Macro ph v Cc lnh ASM trong thn Macro Hi phc cc thanh ghi m thn Macro ph v ENDM V d: Hy khai bo 1 Macro to 1 lnh mi cho php xo ton b mn hnh C ch mn hnh ch text, mi ln t mode cho mn hnh th mn hnh s b xo v con tr ng gc trn bn tri. Set mode: mov al, s mode

Chng 1- Ngn ng ASM v cch lp trnh

37

B mn Cng ngh iu khin t ng

Gio trnh hp ng

mov ah,0 int 10h Get mode mov ah, 0fh int 10h Clrscr MACRO push ax mov ah,0fh; get mode int 10h mov ah,0 int 10h; set mode pop ax ENDM V d 2: Khai bo 1 Macro cho php hin 1 xu ln mn hnh Hienstring MACRO push ax dx lea dx, xau mov ah,9 int 21h pop dx ax ENDM
1.7.3 Cch dng MACRO c xc lp

Sau khi 1 Macro c khai bo th tn Macro c to thnh 1 lnh mi ca ASM. S dng bng cch vit tn Macro v thay tham s thc cho i. Ch : C ch ca chng trnh dch khi gp lnh mi Clrscr Hienstring M1 iu g xy ra nu c lnh nhy trong Macro? Phi dng Directive LOCAL V d: X Macro LOCAL L1 L1:

LOOP L1 ENDM 1.8. Directive INCLUDE


1.8.1. ngha

- Cho php chn khi lnh nm 1 tp ngoi chng trnh ang vit
1.8.2 C php chn

38

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

include

ia:\ng dn\ tn tp.ui

1.8.3. C ch khi chng trnh dch TASM gp directive INCLUDE

include

ia:\ng dn\ tn tp.ui

Cc bc thc hin B1: tm tp ng sau directive INCLUDE B2:M tp . B3: Chn khi lnh vo directive INCLUDE B4: Dch khi lnh B5: ng tp Ch : Nu dng directive INCLUDE vi 1 tp 2 ln tr ln th khng cho php dng lnh nhy trong . Dng thng thy 1 chng trnh ASM phc tp (Khai bo MACRO, STRUC, UNION ..) Cc Directive iu khin segment Dng n gin .MODEL small .STACK 100h . DATA ; Khai bo bin .CODE Nhn CT: [mov ax, @data mov ds, ax] Thn CT chnh mov ah, 4ch int 21h [ Cc CT con] END Nhn CT Dng chun Stack segment db 100h Stack ends Data segment Khai bo bin Data ends Code segment Assume cs:code, ds:data, ss:stack Nhn CT: [mov ax, data mov ds, ax] Thn CT chnh mov ah, 4ch int 21h [ Cc CT con] code ends END Nhn CT

Gi thit:

lib1.asm Clrscr hin string

Chng 1- Ngn ng ASM v cch lp trnh

39

B mn Cng ngh iu khin t ng

Gio trnh hp ng

lib2.asm VAO_SO_N VAO_SO_N HIEN_SO_N HIEN_SO_N

PROC RET END PROC RET ENDP

BI TP Bi 1: So snh 2 s nguyn v hin s c gi tr b ln mn hnh. Khi chy chng trnh yu cu c dang: - Xo mn hnh.

Hng dn: To file C:\BT>edit sosanh.asm Include lib1.asm .MODEL small .STACK 100h .DATA M1 db 13,10, Hay vao so thu nhat: $ M2 db 13,10, Hay vao so thu hai: $ M3 db 13,10, So be la: $ M4 db 13,10, Co tiep tuc CT (C/K): $ .CODE PS: mov ax, @data mov ds, ax clrscr Hienstring M1 call VAO_SO_N mov bx, ax Hienstring M2 call VAO_SO_N Hienstring M3 cmp ax, bx jl L1 xchg ax, bx L1: call Hien_so_N Hienstring M4 mov ah,1 int 21h cmp al,c

40

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

jne jmp Exit:

exit PS

mov ah,4ch int 21h Inculde lib2.asm END PS Bi 2: Tnh n! (0 - 7) Chi chng trnh chy yu cu: - Xo mn hnh

C:\BT>edit gth.asm Include lib1.asm _ Stack segment db 100h dup(?) _Stack ends Data segment M1 db 13,10, Hay vao so n: $ M2 db 13,10, Giai thua cua $ M3 db 13,10, la: $ M4 db 13,10, Co tiep tuc CT (C/K): $ FV dw ? FAC dw ? Data ends Code segment Assume cs:code, ds:data, ss:stack PS: mov ax, data mov ds, ax clrscr Hienstring M1 call VAO_SO_N Hienstring M2 call VAO_SO_N Hienstring M3 mov FV, 1 mov FAC, 2 mov cx, ax cmp cx, 2 jb L1 dec cx L1: mov ax, FV mul FAC mov FV, ax

Chng 1- Ngn ng ASM v cch lp trnh

41

B mn Cng ngh iu khin t ng

Gio trnh hp ng

inc FAC loop L2 L2: mov ax, FV call HIEN_SO_N Hienstring M4 mov ah,1 int 21h jmp al, c jne Exit jmp PS Exit: mov ah,4ch int 21h Include lib2.asm Code ends END PS Bi 3: an (a l s nguyn, n l s nguyn dng) Khi chng trnh chy yu cu c dng - Xo mn hnh

C:\BT>edit lt.asm Include lib1.asm .MODEL small .STACK 100h .DATA M1 db 13,10, Hay vao a: $ M2 db 13,10, Hay vao n: $ Crlf db 13, 10, $ M3 db luy thua : $ M4 db la : $ M5 db 13,10, Co tiep tuc CT (C/K): $ .CODE PS: mov ax, @data mov ds, ax clrscr Hienstring M1 call VAO_SO_N mov cx, ax; cx = n Hienstring Crlf mov ax, bx call HIEN_SO_N Hienstring M3

42

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

mov ax, bx call HIEN_SO_N Hienstring M4 mov ax, 1 and cx, ax jz L1 L1: mul ax; ax*bx vo ax loop L2 L2: call HIEN_SO_N Hienstring M5 mov ah,1 int 21h cmp al, c jne Exit jmp PS Exit: mov ah,4ch int 21h Include lib2.asm END PS Bi 4: trung bnh cng cc s nguyn Khi chng trnh chy yu cu c dng:

C:\BT>edit tbc.asm Include lib1.asm _ Stack segment db 100h dup(?) _Stack ends Data segment M1 db 13,10, Hay vao so thu nhat: $ M2 db 13,10, Hay vao so thu hai: $ M3 db 13,10, TBC hai so la: $ M4 db $ M5 db .5 $ M6 db 13,10, Co tiep tuc CT (C/K): $ Data ends Code segment Assume cs:code, ds:data, ss:stack PS: mov ax, data

Chng 1- Ngn ng ASM v cch lp trnh

43

B mn Cng ngh iu khin t ng

Gio trnh hp ng

mov ds, ax clrscr Hienstring M1 call VAO_SO_N mov bx, ax Hienstring M2 call VAO_SO_N Hienstring M3 add ax, bx and ax, ax jns L1 Hienstring M4 neg ax; i du = ly b 2 L1: shr ax, 1; dch phi 1 ln pushf call HIEN_SO_N popf jnc L2 Hienstring M5 L2: Hienstring M6 mov ah,1 int 21h cmp al,c jne Exit jmp PS Exit: mov ah,4ch int 21h Include lib2.asm Code ends END PS Bi 5: Tnh tng 1 dy s nguyn. Yu cu: - Nhp s lng thnh phn. - Nhn cc s a vo mng - Hin cc s va vo ra mn hnh - Tnh tng. - Hin kt qu Yu cu khi chng trnh chy c dng:

44

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

C:\BT>edit tong.asm INCLUDE lib1.asm .MODEL small .STACK 100h .DATA M1 db 13,10, Hay vao so luong thanh phan: $ M2 db 13,10, a [ $ M3 db ] $ M4 db 13,10, Day so vua vao la : $ M5 db $ M6 db 13,10, Tong day la : $ M7 db 13,10, Co tiep tuc CT (C/K): $ sltp dw i dw a dw 100h dup(?); khai bo mng .CODE PS: mov ax, @data mov ds, ax clrscr Hienstring M1 call VAO_SO_N mov sltp,ax mov cx, ax lea bx, a; ly phn a ch offset a[0] a vo bx mov i, 0 L1: ; Nhp cc s a vo mng Hienstring M2 mov ax, i call HIEN_SO_N Hienstring M3 call VAO_SO_N mov [bx], ax inc i add bx, 2 ; tng 2 ln bx tc + 2 vo bx loop L1 Hienstring M4 mov cx, sltp lea bx, a ; bx tr vo a[0]

Chng 1- Ngn ng ASM v cch lp trnh

45

B mn Cng ngh iu khin t ng

Gio trnh hp ng

L2: ; ly cc s hin ln mn hnh mov ax, [bx] call HIEN_SO_N Hienstring M5 add bx, 2 loop L2 Hienstring M6 mov cx, sltp lea bx, a xor ax, ax L3: add ax, [bx] add bx,2 loop L3 call HIEN_SO_N Hienstring M7 mov ah,1 int 21h cmp al, c jne Exit jmp PS Exit: mov ah,4ch int 21h Include lib2.asm END PS B xung: Tnh tng dng, tng m L3: mov dx, [bx] and dx, dx js L4 ; jns add ax, dx L4: add bx, 2 loop L3 Tnh tng chn, tng l L3: mov dx, [bx] shr dx, 1 jc L4 ; jnc add ax, [bx] L4: add bx, 2

46

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

loop L3 Bi 6: S nguyn t C:\BT>edit snt.asm INCLUDE lib1.asm .MODEL small .STACK 100h .DATA M1 db 13,10, Hay vao so gioi han: $ M2 db 13,10, Cac so nguyen to vo tu 2 den M3 db la: $ M4 db $ M5 db 13,10, Co tiep tuc CT (C/K): $ so dw .CODE PS: mov ax, @data mov ds, ax clrscr Hienstring M1 call VAO_SO_N mov bx,ax ;bx = so gioi han Hienstring M2 call HIEN_SO_N Hienstring M3 mov i, 0 L1: inc so mov ax, so cmp ax, bx ja KT ; so snh a ra kt thc mov cx,ax shr ax, 1 ;cx = so/2 L2: cmp cx, 2 jb HIEN xor dx, dx div cx and dx, dx jz L1 mov ax, so loop L2 HIEN: Call HIEN_SO_N Hienstring M4 jmp L1 KT: Hienstring M5

Chng 1- Ngn ng ASM v cch lp trnh

47

B mn Cng ngh iu khin t ng

Gio trnh hp ng

mov ah,1 int 21h cmp al, c jne Exit jmp PS Exit: mov ah,4ch int 21h Include lib2.asm END PS 1.9. Chng trnh a tp
1.9.1. ngha

Cho php nhiu ngi cng tham gia vit 1 chng trnh ln. Lm sao cc nhn dng chung(tn bin nh, tn chng trnh con) phi hiu nhau. gii quyt vn ny chng trnh dch ASM c trang b hai directive l PUBLIC (cho php) v EXTRN(xin php)
1.9.2. Directive PUBLIC

Chc nng: bo cho chng trnh dch ASM bit module(tp) ny cho php cc tp khc c dng nhng nhn no m khng cn xc lp li. C php: PUBLIC Tn nhn Xc lp nhn - Nhn l tn bin .DATA PUBLIC Tn bin Khai bo bin V d: .DATA PUBLIC x,y x db ? y dw ? - Nhn l tn chng trnh con .CODE PUBLIC Tn chng trnh con Tn chng trnh con PROC Tn chng trnh con
1.9.3. Directive EXTRN

RET ENDP

Chc nng: bo cho chng trnh dch ASM bit tp ny xin php dng cc nhn m cc modul khc xc lp v cho php. C php: EXTRN Tn nhn: Kiu - Vi nhn l bin nh .DATA EXTRN Tn bin: Kiu PUBLIC

48

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

BYTE WORD DWORD V d:

db dw dd

.DATA EXTRN X:BYTE, Y:WORD - Nhn l tn chng trnh con .CODE EXTRN Tn chng trnh con:PROC V d: n! n, FV, GT Anh A (gt1.asm) PUBLIC, EXTRN, EXTRN - Nhn n - Gi chng trnh con tnh n! (do B vit) - Hin kt qu Anh B(gt2.asm): Vit chng trnh con tnh n! n, FV, GT EXTRN, PUBLIC, PUBLIC

Vit CT C:\BT>edit gt1.asm Include lib1.asm .MODEL small .STACK 100h .DATA M1 db 13,10, Hay vao so n: $ M2 db 13,10, Giai thua cua $ M3 db , la: $ M4 db 13,10, Co tiep tuc CT (C/K): $ PUBLIC n n dw ? EXTRN FV:Word .CODE EXTRN Factorial:PROC PS: mov ax, @data mov ds, ax clrscr Hienstring M1 call VAO_SO_N mov n, ax Hienstring M2 call HIEN_SO_N Hienstring M3 call Factorial mov ax, FV call Hien_so_N Hienstring M4 mov ah,1

Chng 1- Ngn ng ASM v cch lp trnh

49

B mn Cng ngh iu khin t ng

Gio trnh hp ng

int 21h cmp al,c jne exit jmp PS Exit: mov ah,4ch int 21h Inculde lib2.asm END PS C:\BT>edit gt2.asm .MODEL small .DATA EXTRN n:Word PUBLIC FV dw ? FAC dw ? .CODE PUBLIC Factorial Factorial PROC mov FV,1 mov FV,2 mov cx,n cmp cx, 2 jb L2 dec cx L1: mov ax, FV mul FAC mov FV, ax inc FAC loop L1 L2: ret Factorial ENDP END
1.9.4. Cch dch v lin kt

Bc 1: Dch tng tp .asm sang .obj VD: C:\BT>tasm gt1.asm gt1.obj C:\BT>tasm gt2.asm gt2.obj Bc 2: Gp cc tp .obj thnh 1 tp .exe C php: tlink tep1 + tep2 + .+ tepn tep1.exe VD: C:\BT>tlink gt1.asm + gt2.asm gt1.exe Ch : Khi khai bo directive iu khin segment dng chun cho chng trnh a tp. Tep1.asm Tep2.asm Data segment PUBLIC Data segment PUBLIC PUBLIC n EXTRN n:Wod

50

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

n dw ? Data ends

Data ends

1.10. Bin hn hp : Directive STRUC, RECORD v UNION


1.10.1 Cu trc STRUC

ngha: xc lp 1 kiu khai bo trong cc thnh phn c th khc kiu nhau. C php - Xc lp kiu khai bo mi Tn cu trc STRUC Cc thnh phn Tn cu trc ENDS V d: Person STRUC Name db 60 dup(?) Age db ? Income dw ? Person ENDS Khai bo bin va xc lp Sau khi 1 cu trc c xc lp th tn ca cu trc tr thnh 1 kiu khai bo bin. .DATA US_president person<G.BUSH, 64, 20000> x dw ?
1.10.2 Directive UNION

ngha: Xc lp 1 kiu khai bo bin dng chung vng nh RAM. Gii thch .DATA x db ? y dw ? S dng 1 phn hard dish lu li gi tr ca bin. 1.11. Xy dng chng trnh Assembly c tp thc hin dng .COM
1.11.1 S khc nhau chng trnh dng COM v EXE

- Chng trnh dng .COM Tt c code, data , stack u nm trong 1 segment - Chng trnh dng .EXE Code, data , stack nm trn cc segment khc nhau.
1.11.2 Lm th no c c chng trnh dng .COM

- T DOS Ver5.0 tr v trc: c 1 chng trnh EXE2BIN.EXE dng chuyn 1 tp .EXE sang >COM - T DOS Ver6.0 n cc phin bn sau ny: khng c tp EXE2BIN.EXE nn phi vit chng trnh ASM c dng c bit sau khi dch, lin kt chuyn sang .COM

Chng 1- Ngn ng ASM v cch lp trnh

51

B mn Cng ngh iu khin t ng 1.11.3 Cc vn cn lu

Gio trnh hp ng

- Directive ORG 100h

- Khai bo bin Vi chng trnh dng .COM ch c 1 segment v l code segment. Vy khai bo bin u? Khai bo bin code segment v c tin hnh nh sau: .CODE Nhn Chng trnh [ jmp Nhn khc Khai bo bin Nhn khc] - Tr v DOS (.COM) int 20h

(.EXE + .COM) mov ah, 4ch int 21h

1.11.4 Dng thng thy 1 chng trnh ASM c dng COM

(Khai bo Macro, Struc, Union) Cc Directive iu khin segment Dng n gin .MODEL tiny .CODE ORG 100h Nhn CT: [jmp Nhn khc Khai bo bin Nhn khc] Thn CT chnh Thn CT chnh int 20h [ Cc CT con] END Nhn CT int 20h [ Cc CT con code ends Dng chun Code segment ORG 100h Assume cs:code, ds:code, ss:code Nhn CT: [jmp Nhn khc Khai bo bin Nhn khc]

52

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

END Nhn CT Ch : khi dch ta dng lnh tlink/t dch sang dng .COM Bi tp Bi 1: Chia 2 s nguyn trong s b chia l s nguyn, s chia l nguyn dng.

C:\BT>edit chia.asm INCLUDE lib1.asm .MODEL small .STACK 100h .DATA M1 db 13,10, Hay vao so b chia: $ M2 db 13,10, Hay vao so chia: $ M3 db 13,10, Thuong la: $ M4 db : $ M5 db $ M6 db 13,10, Co tiep tuc CT (C/K): $ .CODE PS: mov ax, @data mov ds, ax clrscr Hienstring M1 mov bx,ax ;bx = so gioi han Hienstring M2 call VAO_SO_N xchg ax, bx Hienstring M3 and ax, ax ; kim tra c phi l s n hay ko? jns L1 Hienstring M4 Neg dx L1: xor dx, ax div bx call HIEN_SO_N and dx, dx jz KT Hienstring M5 mov cx, 2 mov si, 10 L2: mov ax, dx

Chng 1- Ngn ng ASM v cch lp trnh

53

B mn Cng ngh iu khin t ng

Gio trnh hp ng

div dx call HIEN_SO_N and dx, dx jz KT loop L2 KT: Hienstring M5 mov ah,1 int 21h cmp al,c jne Exit jmp PS Exit: mov ah,4ch int 21h Inculde lib2.asm END PS Dng .COM C:\BT>edit chiacom.asm Include lib1.asm .MODEL tiny .Code org 100h PS: Jmp Start M1 db 13,10, Hay vao so b chia: $ M2 db 13,10, Hay vao so chia: $ M3 db 13,10, Thuong la: $ M4 db : $ M5 db $ M6 db 13,10, Co tiep tuc CT (C/K): $ Start: Clrscr Hienstring M1 mov bx,ax ;bx = so gioi han Hienstring M2 call VAO_SO_N xchg ax, bx Hienstring M3 and ax, ax ; kim tra c phi l s n hay ko? jns L1 Hienstring M4 Neg dx L1: xor dx, ax div bx

54

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

call HIEN_SO_N and dx, dx jz KT Hienstring M5 mov cx, 2 mov si, 10 L2: mov ax, dx div dx call HIEN_SO_N and dx, dx jz KT loop L2 KT: Hienstring M5 mov ah,1 int 21h cmp al,c jne exit jmp PS Exit: int 20h Include lib2.asm END PS Bi 2: Tnh tng

i = i
i =1 i =1

Khi chy chng trnh yu cu:

C:\BT>edit sum.asm Dng .EXE INCLUDE lib1.asm Stack segment Db 100h dup(?) Stack ends Data segment M1 db 13,10, Nhap so n: $ M2 db 13,10, Tong tu -1 den - : $ M3 db la : $ M4 db 13,10, Co tiep tuc CT (C/K): $ Data ends Code segment Assume cs:code, ds: data, ss: stack

Chng 1- Ngn ng ASM v cch lp trnh

55

B mn Cng ngh iu khin t ng

Gio trnh hp ng

PS: mov ax, data mov ds, ax clrscr Hienstring M1 call VAO_SO_N Hienstring M2 call HIEN_SO_N Hienstring M3 mov cx,ax dec cx L1: add ax, cx loop L1 reg ax call HIEN_SO_N Hienstring M4 mov ah, 1 int 21h cmp al, c jne Exit jmp PS Exit: mov ah,4ch int 21h Inculde lib2.asm Code end END PS Dng >COM C:\BT>edit sumcom.asm Include lib1.asm .MODEL tiny .Code segment org 100h assume cs:code, ds: data, ss: stack PS: Jmp M1 M2 M3 M4 Start: clrscr Hienstring M1 call VAO_SO_N Start db 13,10, Nhap so n: $ db 13,10, Tong tu -1 den - : $ db la : $ db 13,10, Co tiep tuc CT (C/K): $

56

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Hienstring M2 call HIEN_SO_N Hienstring M3 mov cx,ax dec cx L1: add ax, cx loop L1 reg ax call HIEN_SO_N Hienstring M4 mov ah, 1 int 21h cmp al, c jne Exit jmp PS Exit: int 20h Include lib2.asm Code ends END PS Ch : dng tlink/t

Mt s lu khi s dng thanh ghi thay cho bin nh


Nguyn tc chung: c gng s dng thanh ghi thay cho bin nh trong trng hp c th, chng trnh s chy nhanh hn. Cc loi bin: bin xu v bin trng s (khng c dng thanh ghi), bin s (db, dw) dng thanh ghi c (dd, dp, dt: khng dng). Cc thanh ghi c th dng thay biin nh AX(ah, al), CX, BX, SI, DI, BP. Cc thanh ghi khng c php thay bin nh: CS, DS, SS, IP, SP, FLAG Thanh ghi AX: c th ng lm ton hng cho hu ht cc lnh ASM. Ngoi l lm ton hng n trong cc lnh MUL/IMUL v DIV/IDIV. V d: mul bx ; ax*bx dx: ax Trong cc lnh IN/OUT ch c al c th thc hin hai lnh ny, khng c thanh ghi no thay th c. IN al, a ch cng OUT a ch cng, al/ax Thanh ghi BX ging nh AX ngoi tr Ngi lp trnh c th dng bx lm con tr offset (SI/DI) V d: lea bx,a Thanh ghi CX : ch s ca lnh loop, trong cc lnh dch, quay vi s ln ln hn hoc bng 2. sar ax, 4 mov cl/cx, 4 sar ax, cl/cx

Chng 1- Ngn ng ASM v cch lp trnh

57

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Thanh ghi DX Ngoi l: Ton hng n mul/imul v div/idiv, a ch cng khi 256 V d: a ch cng COM1 l 378h IN AL,378h mov dx,378h in al/ax Thanh ghi SI,DI Ngoi l: L con tr offset trong cc lnh lm vic vi xu. Ngi lp trnh ASM c th dng SI, DI lm a ch offset ca bin nh Thanh ghi BP Ngoi l: lm con tr offset ca stack khi lin kt ngn ng bc cao vi ASM khi hm c i.

58

Chng 1- Ngn ng ASM v cch lp trnh

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Chng 2: LIN KT CC NGN NG BC CAO VI ASM


Mc ch: Tn dng sc mnh ca cc ngn ng bc cao v tc ca ASM. Cch lin kt: Bt k mt ngn ng bc cao no lin kt vi ASM u phi tun theo 2 cch sau: Cch 1: Inline Assembly. cch 2: Vit tch tp ca ngn ng bc cao v tp ca ASM 2.1 Lin kt Pascal vi ASM
2.1.1 Inline ASM

C ch: Chn khi lnh ASM vo chng trnh c vit bng Pascal. C php: Cc cu lnh Pascal ASM cc cu lnh ASM end; Cc cu lnh Pascal V d: So snh 2 s v hin s ln hn ra mn hnh. SS.Pas Uses crt; Label L1 Var s1,s2 :Integer; Begin clrscr; write (nhap so thu nhat : ); readln(s1); write (nhap so thu hai : ); readln(s2); ASM mov ax,s1 mov bx,s2 cmp ax,bx jg l1 xchg ax,bx l1: mov s1,ax end; write (So lon hon la : , s1:5); readln; end. Cch dch v lin kt:

Chng 2- Lin kt ngn ng bc cao vi ASM

57

B mn Cng ngh iu khin t ng


C:\ TP

Gio trnh hp ng

BIN

LIB

INCLUDE

TP.exe: y l chng trnh dch ca TP vi cc tu chn c xc lp bi menu options. TPC.exe: y l chng trnh dch ca TP vi cc tu chn c xc lp trn dng lnh dch. C php: tpc ml Ic:\tp\include Lc:\tp\lib ss u im: Rt d lin kt v vit. Nhc im: Cc lnh ASM c dch nh bi chng trnh dch ca TP c sai st.
2.1.2 Vit tch bit tp ngn ng Pascal v tp ASM

Cc vn ny sinh cn gii quyt: c 4 vn Vn 1: a tp do phi khai bo PUBLIC v EXTRN vi cc nhn dng chung. Khi bo Pascal: Bt k mt khai bo no ca Pascal u l Public do khng cn phai khai bo tng minh public. Vi cc nhn l bin nh th Pascal lun ginh ly khai bo Public Vi cc nhn l tn chng trnh con th ASM vit chng trnh con nn Pascal s s dng chng trnh con -> Pascal phi xin php s dng nh sau: Chng trnh con l th tc: Procedure tn_th_tc [i]; external; Chng trnh con l hm: Function tn_hm [i]: Kiu; external; Khai bo ca ASM: Ging nh a tp thun tu ASM Vi nhn l tn bin nh: .Data extrn tn_bin_nh : kiu Kiu ca ASM TP Byte Char Word Integer DWord Real Vi nhn l tn chng trnh con : .Code Public tn_chng_trnh_con tn_chng_trnh_con Proc : Ret tn_chng_trnh_con endp

58

Chng 2- Lin kt ngn ng bc cao vi ASM

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Vn 2: Vn near/far ca chng trnh con Quy nh chung ca chng trnh dch TP - Nu chng trnh con cng nm trn 1 tp vi chng trnh chnh hoc chng trnh con nm phn implementation ca Unit th chng trnh con l near. - Nu chng trnh con nm phn Interface ca Unit th chng trnh l far. Ngoi l: - Directive {$F+}: Bo cho chng trnh dch TP bit chng trnh con no nm sau Directive {$F+} l far. - Directive {$F-}: Bo cho chng trnh dch ca TP bit nhng chng trnh con no nm sau Directive {$F-}phi tun th quy nh chung ca chng trnh dch TP Vn 3: Cch chng trnh dch TP tm tp lin kt: Directive {$L} C php : {$L tn_tp [.obj]} Vn 4: Tn hm ASM mang gi tr quay v Mun tn hm ASM mang gi tr quay v dng 2 byte phi t gi tr vo thanh ghi Ax trc khi c lnh Ret. Mun tn hm mang gi tr 4 bytes th phi t gi tr vo thanh ghi DX:AX trc khi c lnh Ret. Nhn xt: Ngi vit Pascal quan tm n vn : 1, 2, 3. Ngi vit ASM quan tm n vn : 1, 4. Phng php 1: Chng trnh con khng i. Chuyn giao tham s thng qua khai bo bin ton cc. V d: Tnh an. vd1.pas - Nhp gi tr a, n - Gi chng trnh con tnh an do asm vit - Hin kt qu. vd2.asm: chng trnh tnh an vd1.pas Uses crt; Var a,n: Integer {$F+} function a_mu_n: integer; external; {$L vd2 [.obj]} {$F-} Begin

Chng 2- Lin kt ngn ng bc cao vi ASM

59

B mn Cng ngh iu khin t ng

Gio trnh hp ng

clrscrl; writeln( Chuong trinh tinh a mu n !); write (Nhap so a: ); readln(a); write (Nhap so n: ); readln(n); write (a, luy thua , n , la : , a_mu_n : 5 ); readln; End. vd2.asm .model large .data EXTRN a:word, n:word .code Public a_mu_n a_mu_n proc mov bx,a mov cx,n mov ax,1 and cx,cx jz kt lap: imul bx loop lap kt: ret a_mu_n endp end Cch dch v lin kt b1: Dch tp .asm sang .obj c:\asm> tasm vd2 -> vd2.obj b2: Dch .pas v lin kt C:\asm>tpc ml vd1 -> vd1.exe Phng php 2: Chng trnh con c i. Chuyn giao tham s thng qua Stack Nguyn l: Chng ta u bit chng trnh con khng ASM khng c i. Tuy nhin khi lin kt Pascal vi ASM th Pascal gi thit chng trnh con ASM c i. S lng i v kiu i do Pascal gi thit.Vi gi thit khi gi chng trnh con, Pascal phi a tham s thc vo Stack (theo chiu t tri qua phi). C ch: function test(b1:integer, b2:integer, b3: integer): integer; external; : test (a,b,c)

60

Chng 2- Lin kt ngn ng bc cao vi ASM

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Bc1: Tham s thc a vo Stack theo chiu t phi qua tri Bc 2: a ch lnh tip theo a vo Stack (4 byte) Bc 3: H iu hnh a a ch u ca chng trnh con ASM vo CS:IP -> chuyn sang chng trnh con . .model large .code Public test Test Proc Push bp mov bp,sp Thn chng trnh con ASM pop bp ret n ; n l s lng byte m tham s thc chim trong Stack. Test endp V d: Tnh an i vi hm c i lt1.pas Uses crt; Var a,n : integer; {$F+} function lt( b1: integer, n2: integer): Integer; External; {$L lt2} {$F-} Begin clrscr; write(Nhap so a: ); readln(a); write (Nhap so n: ); readln(n); write (ket qua la: lt(a,n): 5); readln; End. lt2.asm .model large .code Public lt lt Proc push bp mov bp,sp mov bx,[bp + 8] mov cx,[bp + 6] mov ax,1

Chng 2- Lin kt ngn ng bc cao vi ASM

61

B mn Cng ngh iu khin t ng

Gio trnh hp ng

and cx,cx jz kt lap: imul bx loop lap kt: pop bp ret 4 lt endp end Dch nh sau: Tasm lt2 -> lt.obj Tcp ml lt1 ->lt1.exe Bi tp: Trung bnh cng 2 s Cch1: Hm khng i TBC.asm Uses crt; Var s1,s2, flag : Integer; {$F+} function tb(): Integer; external; {$L tbc2} {$F-} Begin clrscr; flag := 0; Write ( Nhap so thu nhat: ); readln(s1); Write( Nhap so thu hai: ); readln(s2); Write( Trung binh cong 2 so la: , 0.5*flag + tb:5); readln; End. tbc2.asm .model large .data extrn s1: word , s2: word, flag: word .code public tb tb proc mov ax,s1 mov bx,s2

62

Chng 2- Lin kt ngn ng bc cao vi ASM

B mn Cng ngh iu khin t ng

Gio trnh hp ng

add ax,bx sar ax,1 jnc l1 mov flag,1 L1: ret tb end End Cch 2: Hm c 3 i TBC.asm Uses crt; Var s1,s2, flag : Integer; {$F+} function tb(f:integer, n1: integer, n2:Integer): Integer; external; {$L tbc2} {$F-} Begin clrscr; flag := 0; Write ( Nhap so thu nhat: ); readln(s1); Write( Nhap so thu hai: ); readln(s2); Write( Trung binh cong 2 so la: , 0.5*flag + tb(flag,s1,s2):5); readln; End. tbc2.asm .model large .code public tb tb proc push bp mov bp,sp mov ax,{bp+8} mov bx,{bp+6} add ax,bx sar ax,1 jnc l1 mov cx,1 mov {bp + 10},cx L1: pop bp

Chng 2- Lin kt ngn ng bc cao vi ASM

63

B mn Cng ngh iu khin t ng

Gio trnh hp ng

ret 6 tb end End Bi tp 1: Tnh tng ca dy s nguyn Trong : Pascal Nhn s lng cc thnh phn Nhn cc s ca mng Hin cc s ca mng ra mn hnh Gi ctc tnh tng do ASM tnh Hin tng ASM: Vit chng trnh con tnh tng Gii Vit mt chng trnh pascal T1.pas uses crt; label L1; type //cho phep khai bo xc lp kiu khai bo bin mi m = array [1..100] of Integer; Var sltp, i: Integer; a: m; tl: char; //bo hm xp khai bo la far {$F+} function sum(mang:m, n:integer): Integer // do ASM thc hin {$L T2} //hm nm file T2.obj //cc hm dng sau theo chun P {$F } Begin L1: clrscr; Write (nhap so thanh phan sltp = : ); readln(sltp); write(nhap vao day cua cac thanh phan); for I:=1 to sltp do begin write (a[,I,]= ); readln(a[i]); end write ( Day so vua nhap vao la:); for I:= 1 to sltp do write(a[i], ); writeln; write(co tiep tuc khong C/K ? ); tl := readkey; if (tl=c) then gotoL1;

64

Chng 2- Lin kt ngn ng bc cao vi ASM

B mn Cng ngh iu khin t ng

Gio trnh hp ng

readln; END. T2.ASM .Model large .code public sum sum proc //a: d/c cuar a0 dc dua vao stack mat 4 byte do offset+seg, cat vaof theo //chieu tu trai qua phai, push bp mov bp,sp mov cx,[bp+6] les bx,[bp+8] //lay 2 byte dua vao BX va 2 byte tiep theo vao ES xor ax,ax lap: add ax,es:[bx] add bx,2 loop lap pop bp ret 6 //tra lai 6 byte 4 byte cho a, 2 byte cho sltp end Dch v lin kt: b1: Dch ASM sang .OBJ c:\tuan t2 -> T2.obj T2.obj nm {$L T2}. b2: Dch v lin kt P c:\tuan>tpc ml t1 ->t1.exe

S dng directive ARG


L do: cho php ngi vit chng trnh con ASM (trong trng hp c i) vit ng chng trnh con ma khng bit cu trc ca Stack. C php: tn chng trnh con PROC ARG tn i : kiu = Retbytes (tn i dc xp xp t phi sang tri)

Bi tp 2: Tnh tng cp s cng khi bit n, d, u1


Pascal: csc1.pas Uses crt; Var n,d,u1:Integer; {$F+} function csc(n1: integer, n2: integer, n3: integer ):integer; external; {$L csc2} //tm tp csc2.obj, khng c ng dn th th mc hin hnh //bo theo chuan P {$F-}
Chng 2- Lin kt ngn ng bc cao vi ASM

65

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Begin write (nhap vao n = ); readln(n); write(nhap vao d = ); readln(d); write(nhap vao u1 = ); readln(d); write(tong cap so cong = , csc(n,d,u):5); End. Viet ASM: csc2.asm (khong dung directive) cach1: .model large .code public csc SP csc proc push bp SP mov bp,cs mov ax,[bp+6] mov bx,[bp+8] SP mov cx,[bp+10] mov dx,ax dec cx lap: add dx,bx add ax,dx loop lap pop bp ret 6 csc endp end cach2: .model large .code public csc csc proc ARG n3:word, n2:word, n1:word= Retbytes push bp movbp,cs movax,n3 movbx,n2 movcx,n1 movdx,ax

BP BP 2/4 bytes

n d u

66

Chng 2- Lin kt ngn ng bc cao vi ASM

B mn Cng ngh iu khin t ng

Gio trnh hp ng

dec cx lap: add dx,bx add ax,dx loop lap pop bp ret Retbytes csc endp end 2.2 Lin kt c/c++ vi ASM
2.2.1. Inline Assembly

C ch: Chn khi lnh ASM vo chng trnh c vit bng C/C++ C php: Cc cu lnh C ASM lnh ASM ASM lnh ASM ASM lnh ASM Cc cu lnh C hoc cch khc: Cc cu lnh C ASM { // du ngoc phi cng mt dng khi lnh ASM } Cc cu lnh C V d Tnh Tng 2 s nguyn Tong.C #include <stdio.h> #include <conio.h> int s1,s2 Void Main(void) //nu hm f() khng c gi tr tr v th ct s mc nh l int { clrscr(); printf (\n nhap vao so thu nhat : ); scanf(%d,&s1); printf (\n nhap vao so thu hai : ); scanf(%d,&s2); //nu khng c format th khng bo li v cng khng hin ra mn hnh ASM { mov ax,s1 mov bx,s2 mov ax,bx

Chng 2- Lin kt ngn ng bc cao vi ASM

67

B mn Cng ngh iu khin t ng

Gio trnh hp ng

mov s1,ax } printf (\n tong cua hai so l %d , s1); getch(); } Dch v lin kt : Gi s chng ta ct gi file trong th mc ASM C:\ASM>tcc ms IC:\tc\include LC:\tc\lib tong.c //phn trn c th dch c nu chng ta d khai bo trong Autobat th bt c u cng gi c tcc. cn khng chng ta phi vit nh sau:

C:\ASM>c:\tc\bin\tcc ms IC:\tc\include LC:\tc\lib tong.c


: D lin kt Nhc im: Khi lnh ASM c dch nh bi TC -> khng chun Khng cho php c nhn nhy trong khi lnh ASM c chn vo C -> khi lnh chn vo khng linh hot v khng mnh.
2.2.2 Vit tch bit C/C++ v tp ASM

Mt s vn ny sinh cn gii quyt khi vit tch bit, c 3 vn Vn 1: (a tp) Chng ta phi lin kt cc file vi nhau do chng ta phi khai bo Public v External vi cc nhn dng chung. Khai bo trong C/C++ PUBLIC: Bt k mt khai bo no ca C/C++ u l Public, nn khng cn khai bo tng minh. Vi nhn l bin nh cho php ASM khai bo Public v c/c++ xin php c dng c php: Extern kiu tn bin ASM char db Int dw float dd EXTERNAL: Khai bo c php dng chng trnh con ca ASM Extern kiu tn hm ([i]);
Khai bo ca ASM: Ging nh a tp thun tu

Vn 2 Ngi vit ASM phi thm du _ vo trc cc nhn dng chung vi C/C++ v thm mi ni m nhn xut hin. v dng C khi dch cc nhn ngoi n u thm _ vo trc nhn. Vn 3 Tn hm ASM mang gi tr quay v AX, DX:AX tng ng 2,4 byte Phng php 1 (Hm khng i) Chng ta phi chuyn giao tham s thng qua bin ton cc

68

Chng 2- Lin kt ngn ng bc cao vi ASM

B mn Cng ngh iu khin t ng

Gio trnh hp ng

V d Tnh giai tha ca n! C: Nhp n; Gi chng trnh con tnh n! do ASM tnh; Hin kt qu ASM: Vit chng trnh con tnh n! gtn1.c #include <stdio.h> #include <conio.h> int n extern int gt(); Void main(void) { clrscr(); printf(\n Nhap vao n = ); scanf(%n, &n); printf(\n %d Giai thua la : %d,n , gt():5); getch(); } // bin ton cc s ct trong Data, bin cc b ct trong Stack, static bin cc b ct trong Data gtn2.asm .model small/large //-ms/-ml .data extrn _n: Word a dw ? b dw ? .code public _gt _gt proc mov a,1 mov b,2 mov cx,_n cmp cx jb exit dec cx lap: mov ax,a mul b mov a,ax inc b loop lap exit:

Chng 2- Lin kt ngn ng bc cao vi ASM

69

B mn Cng ngh iu khin t ng

Gio trnh hp ng

mov ax,a ret _gt endp end Dch lin kt file tcc ms/ml Ic:\tc\include Lc:\tc\lib gtn1 gtn2.asm -> gtn1.exe. Phng php 2 (Hm c i) Hm c i th chng trnh phi chuyn giao tham s thng qua Stack. L do: Chng ta bit chng trnh con thun tu ASM khng c i. tuy nhin khi C/C++ lin kt vi ASM th n gi thit chng trnh con ASM c i. S lng i, kiu i do C/C++ gii thit v vi nhng gi thit th chng trnh con ASM. C/C++ a tham s thc vo Stack v ngi vit chng trnh con ASM phi vo Stack ly gi tr . Gii thch extern int test (int n1, int n2, int n3); Void main (void) { int a,b,c test (a,b,c); } c 5 bc : .model small [.data] .code public _test _test proc push bp mov bp,sp cc lnh ASM pop bp ret _test endp end Bi tp 3 tnh n! hm c 1 i gtn1.c #include <stdio.h> #include <conio.h> int n

70

Chng 2- Lin kt ngn ng bc cao vi ASM

B mn Cng ngh iu khin t ng

Gio trnh hp ng

extern int gt(int i); Void main(void) { clrscr(); printf(\n Nhap vao n = ); scanf(%n, &n); printf(\n %d Giai thua la : %d,n , gt(n):5); getch(); } gtn2.asm .model small/large //-ms/-ml .data a dw ? b dw ? .code public _gt _gt proc push bp mov bp,sp mov a,1 mov b,2 mov cx,_n cmp cx jb exit dec cx lap: mov ax,a mul b mov a,ax inc b loop lap exit: mov ax,a pop bp ret _gt endp end Bi tp 4 Tnh trung bnh cng 2 s nguyn Cch 1: Hm khng c i - S1,S2, flag l cc bin ton cc.

Chng 2- Lin kt ngn ng bc cao vi ASM

71

B mn Cng ngh iu khin t ng

Gio trnh hp ng

- Tn Hm ASM -> trung bnh cng lm trn di. TBC1.C #include <stdio.h> #include <conio.h> int s1,s2,flag = 0; extern int tbc(); Void main(Void) { Printf (\n nhap vao so thu 1 : ); scanf(%d,&s1); Printf (\n nhap vao so thu 2 : ); scanf(%d,&s2); printf( \n Trung binh cong cua 2 so nguyen la: %d, tbc()+0.5*flag); getch(); } // ch ngn ng C phn bit ch hoa v ch thng. TBC2.ASM .model small .data extrn _s: Word, _s2: Word, flag: Word .code public _tbc _tbc proc mov ax,_s1 mov bx,_s2 add ax,bx sar ax,1 jnc exit mov cx,1 mov _flag,cx exit: ret _tbc endp end Cch 2: - s1,s2 l bin cc b -> trong Stack - flag l bin ton cc - hm tnh trung bnh cng l lm trn di. TBC1.C #include <stdio.h> #include <conio.h>

72

Chng 2- Lin kt ngn ng bc cao vi ASM

B mn Cng ngh iu khin t ng

Gio trnh hp ng

int flag = 0; extern int tbc(int n1, int n2); Void main(Void) { int s1,s2; Printf (\n nhap vao so thu 1 : ); scanf(%d,&s1); Printf (\n nhap vao so thu 2 : ); scanf(%d,&s2); printf( \n Trung binh cong cua 2 so nguyen la: %d, tbc()+0.5*flag); getch(); } TBC2.ASM .model small .data extrn flag: Word SP BP .code BP SP public _tbc _tbc proc push bp SP mov bp,sp n2 mov ax,[bp+4] n1 mov bx,[pb+6] add ax,bx sar ax,1 jnc exit mov cx,1 mov _flag,cx exit: pop bp ret _tbc endp end Bi tp 5: Sp xp dy s theo chiu tng dn. C: Nhn s lng thnh phn Nhn cc s a vo mt mng Hin cc s ca mng ra mn hnh Gi chng trnh con sp xp do ASM vit Hin cc s xp xp ASM: Vit chng trnh con sp xp dy s.

Chng 2- Lin kt ngn ng bc cao vi ASM

73

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Gii #include<stdio.h> #include<conio.h> extern sx(int n, int far* mang); Void main(void) { int sltp, a[100]; clrscr(); printf(\n Nhap vao sltp = ); scanf(%d,&sltp); printf(\n Nhap vao cac so cua mang); for (I=0, I<sltp, I++) { printf(\n a[%d]=, i); scanf(%d,&a[i]); } printf(\ day so vua nhap vao la); for(I=0, I<sltp, I++) printf(%d , a[i]); sx(sltp,a); printf(\ day so a sap xep la); for(I=0, I<sltp, I++) printf(%d , a[i]); getch(); } sx2. asm .model small .code public _sx _sx proc push bp mov bp,sp mov si, [bp+4] dec si l1: mov cx, [bp+4] les bx,[bp+6] dec cx l2: mov ax,es:[bx] mov dx,es:[bx+2] cmp ax,dx jl l3

74

Chng 2- Lin kt ngn ng bc cao vi ASM

B mn Cng ngh iu khin t ng

Gio trnh hp ng

mov es:[bx+2],ax mov es:[bx],dx l3: add bx,2 loop l2 des si jne l1 pop bp ret _sx endp end ch : Directive ARG C php ARG tn i Kiu // C ngc vi P l t tri qua phi Lin kt C++ vi ASM Ging C lin kt vi chng trnh con tr mt vn tn chng trnh con ASM. C: .code public _tn chng trnh con _tn chng trnh con proc cc cu lnh ca ASM ret _tn chng trnh con endp End C++: .code public @tn chng trnh con $ @tn chng trnh con $ cc cu lnh ASM ret @tn chng trnh con $ endp Cc bc: b1: Vit modul C++ .cpp b2: Dch t ui .cpp ra .asm tcc S tn tp.cpp ->tn tp.asm b3: Hin ln mn hnh tn tp .asm ( dng cui cng c @tn chng trnh con $) Bi tp 6: So snh 2 s v hin s b SS1.CPP

Chng 2- Lin kt ngn ng bc cao vi ASM

75

B mn Cng ngh iu khin t ng

Gio trnh hp ng

#include<iostream.h> #include<conio.h> extern int ss(int n1, int n2); Void main(void) { int s1,s2 clrscr(); cout<<\n nhap so thu nhat: ; cin>>s1; cout<<\n nhap so thu hai : ; cin>>s2; cout<<\n So be la: ; << ss(s1,s2); getch(); } Sau khi vit song ta dch tcc S ss1.cpp -> ss1.asm Hin ss1.asm ln mn hnh: -> @ss$ .model small .code public @ss$ @ss$ proc push bp mov bp,sp mov ax,[bp+4] mov bx,[bp+6] cmp ax,bx jl l1 xchg ax,bx l1: pop bp ret @ss$ endp End.

76

Chng 2- Lin kt ngn ng bc cao vi ASM

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Chng 3: LP TRNH H THNG


Lp trnh h thng thc cht l nghin cu cc ngt ca h thng. Chng ny gm 6 phn 3.1. Cc bc khi my tnh khi ng T khi bt my n khi hin th C:\> th my tnh lm g ? Vi CPU ca intel (hoc l h tr). khi bt my tnh th ngay lp tc thanh ghi CS=F000h v thanh ghi IP = FFF0h. y l a ch ca vng nh ROM v my tnh nhy n vng ROM BIOS ny, vi byte ny cha m my ca lnh jmp, 2 byte tip theo l a ch nhy n chng trnh kim tra u tin ca my tnh. ROM BIOS nu l 2k th n c vit bng ASM. Nu l 128 K th bn trong vit bng ASM bn ngoi vit bng C. ROM BIOS cha chng trnh khi ng my tnh v cha chng trnh con ngt ca BIOS. Kim tra CPU Kim tra cc thanh ghi bn trong CPU bng cch ln lt cho cc gi tr FFFFH, 0000H, 5555H v kim tra c ng khng? Nu khng ng mn hnh hin th Fatal Error Nu ng kim tra tip Kim tra cu hnh ti thiu ca my tnh: Bn phm Kim tra mt s linh kin trn mainboard: 8259, 8250, 8237, 8253 Kim tra checksum ca ROM BIOS: Khi sn xut my tnh th ROM BIOS c np 2 ln: Ln 1: Np m my ca 2 loi chng trnh. Sau cng tt c cc byte m my trn Rom to thnh mt byte checksum ROM BIOS. Ln 2: Np byte checksum vo ROM BIOS. Trong chng trnh kim tra my tnh c mt chng trnh cng li tt c cc byte ca m my trong Bios, c 1 byte checksum hin thi. So snh 2 byte checksum. Nu bng nhau l tt, nu khng bng nhau trn mn hnh hin dng ch checksum error (my tnh vn chy bnh thng, nu chy n vng li thi mi bi nh hng) Kim tra RAM Cho ln lt ton b cc byte ca RAM l cc gi tr FFH, 00H, 55H v kim tra ng hay khng? (T lnh Ctrl + Alt + Del) a a ch u ca chng trnh con phc v ngt ca Bios vo bng vector ngt. Cp nht thng tin lin quan n my tnh ang dng vo vng d liu ca ROM BIOS. Kim tra liu c Rom m rng khng Hin nay, mt s card iu khin nh card mn hnh cha c chun ho v phn cng. Cho nn c mt tho hip ai vit phn cng phi vit phn mm iu khin v np trn Rom ca card . Ngt 19h (int 19h)

Chng 3- Lp trnh h thng

77

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Ly boot sector vo RAM. Trao quyn cho chng trnh nm boot sector. Ly hai file n vo vng RAM Ly command. com vo RAM (command.com dng dch cc cu lnh ca i interpreter dng dch ra m my) Dch tng cu -> Interpreter Dch c mng -> compo Ly [Autoexec.bat] C:\> 3.2 Phn loi ngt v khi nim Phn loi ngt

Ngt
Ngt mm Ngt cng

Ngt h thng

Ngt do user

Ngt trong h thng

Ngt ngoi

Bios

Dos

NMI

INT

Mt s khi nim Ngt l g Ngt l tm dng chng trnh ang chy chuyn sang chy mt chng trnh con phc v ngt. sau khi chy xong chng trnh con phc v ngt th tr li tip tc chy chng trnh ang d. Ngt cng Ngt cng l ngt sinh ra do tc ng ca cc linh kin in t. Ngt mm L ngt kch hot bng lnh Int n Bng vector ngt: Bng vector ngt: L vng nh RAM cha a ch u ca tt c cc chng trnh con phc v ngt ca my tnh. Mi a ch gm 4 byte. ln: My tnh c 256 ngt x 4 = 1024 byte = 1kbyte V tr: Mt kbye u tin Mi quan h s ngt v a ch nh u ca bng vector ngt: a ch nh = n x4 V d int 20h -> v tri ca n l nh 20 +21 l offset, nh 22 + 23 l seg

78

Chng 3- Lp trnh h thng

B mn Cng ngh iu khin t ng

Gio trnh hp ng

3.3 C ch khi mt ngt c kch hot Chng trnh con bnh thng Kch hoat: CALL C ch u c 5 bc b1: Tham s thc a vo Stack - a flag vo Stack - a tham s thc nu c vo Stack a ch ca lnh tip theo vo Stack Chng trnh con phc v ngt Tc ng ca linh kin hoc lnh INTR

b2: a ch ca lnh tip theo vo Stack

b3: H a a ch u ca chng HH khng qun l a ch u tin trnh con vo CS:IP v r nhnh vo ca chng trnh con phc v ngt. Xong chng trnh con. a ch u tin ca chng trnh con phc v ngt nm trong bng vector ngt. My tnh vo v tr tng ng ca bng vector ngt. Ly a ch u chng trnh con phc v ngt CS:IP b4: Thc hin chng trnh con cho Thc hin thn chng trnh con phc n khi gp lnh RET, vo Stack ly a v ngt cho n khi gp lnh IRET thi ch lnh tip theo a vo CS:IP -> vo Stack ly a ch lnh tip theo -> Quay v chng trinh gi. CS:IP -> Quay v chng trnh kch hot b5: Tip tc chng trnh dang d Vo stack ly gi tr c -> Flat -> tip tc chng trnh

3.4. Cc bc xc lp ngt
3.4.1. Vit chng trnh con phc v ngt theo yu cu ca thut ton

C php: tn chng trnh con phc v ngtProc o Bo v cc thanh ghi m chng trnh con phc v ngt ph v o Cc lnh ASM theo yu cu ca thut ton o Hi phc cc thanh ghi m thn chng trnh con phc v ngt ph v IRET tn chng trnh con phc v ngt Endp
3.4.2. Ly a ch u ca chng trnh con phc v ngt v t vo v tr tng ng ca vector ngt.

Ly a ch ca chng trnh con phc v ngt S dng 2 directive l SEG v OFFSET. Directive SEG:

Chng 3- Lp trnh h thng

79

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Chc nng : Ly a ch u segment lnh u cua chng trnh con phc v ngt. C php: SEG tn chng trnh con phc v ngt V d: Mov ax, SEG tnctcpvn Directive OFFSET Chc nng: Ly a ch u offset lnh u cua chng trnh con phc v ngt. C php: OFFSET tn chng trnh con phc v ngt V d: Mov bx,OFFSET tnctcpvn a a ch u ca ctcpvn vo v tr tng ng ca bng vecter ngt Cch 1: Trc tip V d ta can thip vo ngt th 5h Ctn5 Proc : Ret Ctn5 endp cli xor ax,ax mov ds,ax mov ax,offset ctn5 mov ds:[20],ax mov ax,seg ctn5 mov ds:[22],ax sti Cch 2: Gin tip nh chc nng 25h ca ngt int 21h. // tt c cc hm ca dos u trong 21h. Yu cu: ds:dx <- seg:offset a ch u ca ctcpvn al l s ngt ah <- 25h int 21h V d: Ctn5 Proc : Ret Ctn5 endp cli mov dx,offset ctn5 mov ax,seg ctn5 mov ds,ax mov al,5h

80

Chng 3- Lp trnh h thng

B mn Cng ngh iu khin t ng

Gio trnh hp ng

mov ah,25h int 21h sti Bi tp: Hy xc lp ngt b tc dng ca phm printscreen. Mun in ni cung ca mn hnh ch dos ra mn hnh ta c 2 cch - n phm printscreen. - Gi ngt int 5h C 2 cch lm: C1: Dng chng trnh debug b li vector ngt. b1: Khi ng debug c:/asm>debug b2: Dng lnh D hin vecter ngt. D 0:0 //xem 128 byte u ca vect ngt 0:0000 l 16 byte u ca bng vect ngt a ch ca ngt int 0 int 3 0:0010 l 16 byte u ca bng vect ngt a ch ca ngt int 4 int 7 D liu trong ngt th 5 l 54 ff 00 f0 -> a ch l f000:ff54 b3: Dng lnh U dch ct t dng .exe sang .asm U f000:ff54 a ch m my lnh dng gi nh f000:ff54 : : : f000:ffd6 Iret b4: Dng lnh E ca debug sa a ch u c trong bng vect ngt E 0:0014 54 d6 //c hai cch khi phc li l dng lnh E hoc khi ng li my C2: Vit chng trnh b tc dng ca phm Printscreen .model .stack 100h .code start: cli mov dx,offset ctn mov ax,seg ctn mov ds,ax mov al,5 mov ah,25h int 21h sti

Chng 3- Lp trnh h thng

81

B mn Cng ngh iu khin t ng

Gio trnh hp ng

mov ah,4ch int 21h ctn proc iret ctn endp end start 3.5 Vng d liu ROM BIOS Vng d liu trong ROM BIOS l g L vng RAM cha cc thng tin lin quan n my tnh ang dng. Cc thng tin ny c c cp nht vo vng nh ny khi my tnh khi ng. ln: 256 bytes V tr: ngay sau bng vect ngt . Mt s thng tin ca vng d liu ROM BIOS 0:400h 0:407h : a ch cng Com (a ch ca ngoi vi ch c 2 bytes). 0:400h + 401h a ch ca cng Com 1 0:402h + 403h a ch ca cng Com 2 0:404h + 405h a ch ca cng Com 3 0:406h + 407h a ch ca cng Com 4 0:408h 0:40Fh : a ch ca 4 cng LPT 0:408h + 0:409h a ch cng LPT 1 0:40Ah + 0:40Bh a ch cng LPT 2 0:40Ch + 0:40Dh a ch cng LPT 3 0:40Eh + 0:40Fh a ch cng LPT 4 0:410 + 0:411h: Danh sch thit b 0:0410h

S lng mm tr 1 00: 1 01: 2 10: 3 Loi Card mn hnh 11: Mono #11: Color

0: khng mm 1: C mm 11: 4 B ng x l FPU 0: C ; 1: Khng C bao nhiu KRam c thm trn mainboard 00: 0K 01: 16K 10: 32K 11: 64K

0:411h
DMA: 0: khng c 1: C S lng cng Com

My tnh c joystick (card ch chi) 0: Khng c 1: C S lng cng Com

82

Chng 3- Lp trnh h thng

B mn Cng ngh iu khin t ng

Gio trnh hp ng

Cch ly thng tin t vng d liu ROM BIOS. Dng Debug D 0:400h 0:400h S hin 16 byte l a ch ca 4 cng Com, 4 cng LPT, a ch ch c 2 byte 0:410h Hai byte u tin l 23h C5h Vit chng trnh Bi tp1: Hy vit chng trnh cho bit my tnh ca bn c mm hay khng, nu c thi l bao nhiu bao nhiu mm. - Ly d liu trong a ch 0:410h - Ly d liu ca thanh ghi - C hai cch: Dng ngt int 11h v t tr ly OMEM.ASM include lib1.asm .model small .stack 100h .data m1 db khng c mm no! $ m2 db s lng mm l: $ .code start: mov ax,@data mov ds,ax clrscr int 11h shr al,1 jc l1 hienstring m1 jmp exit l1: hienstring m2 mov cl,5 shr al,cl inc al add al,30h mov ah,0eh int 10h

Chng 3- Lp trnh h thng

83

B mn Cng ngh iu khin t ng

Gio trnh hp ng

exit: mov ah,1 int 21h mov ah,4ch int 21h end start Bi tp 2: Hy vit chng trnh cho bit my tnh ca bn c nhng cng com no hay khng? nu c thi bao nhiu, cho bit a ch cng com dng hexa. Ly a ch 0:411h cho vo thanh ghi 8 bit Tch 3 bit cho bit s lng ca cng com and vi 0Eh a ch cng Com, s lng cng com a vo CX, a ch cng com trong 2 nh 0:400h + 401h COM.ASM include lib1.asm _stack segment db 100h _stack ends datasegment tb1 db 10,13, Khng co cng com no !$ tb2 db 10,13, S lng cng com l: $ tb3 db 10,13, a ch cng com l: $ tb4 db $ dataends code segment assume cs:code, ds:data, ss:stack start: mov ax,@data mov ds,ax clrscr int 11h mov al,ah and al,0eh jnz l1 hienstring tb1 jmp exit l1: hienstring tb2 shr al,1 mov cl,al xor ch,ch

84

Chng 3- Lp trnh h thng

B mn Cng ngh iu khin t ng

Gio trnh hp ng

add al,30h mov ah,0eh int 10h hienstring tb3 xor ax,ax mov es,ax mov bx,400h lap: mov ax,es:[bx] call hien_hexa hienstring tb4 add bx,2 loop lap exit: mov ah,1 int 21h mov ah,4ch int 21h ;----------------------------------------------hien_hexa proc push ax, bx, cx, dx mov bx,16 xor cx,cx hx1: xor dx,dx div 16 cmp dx,10h jb hx2 add dx,7 hx2: add dx,30h push dx inc cx add ax,ax jnz hx1 hx3: pop ax mov ah,0eh int 10h

Chng 3- Lp trnh h thng

85

B mn Cng ngh iu khin t ng

Gio trnh hp ng

loop hx3 pop dx,cx,bx,ax ret hien_hexa endp code ends end start Bi tp 3: Cho bit a ch c s ca Video RAM my tnh ang dng kn: l vng nh RAM cha ni dung hin ra mn hnh Mono: a ch c s l: B000h Color: : B800h VR.asm include lib1.asm .model tiny .code org 100h Start: jmp khaibao tb db a ch c s ca Video RAM l: $ khaibao: clrscr int 11h ; a a ch 0:[410] -> Al, 0:[411] -> Ah hienstring tb add al,30h cmp al,30 je mono mov ax,0B800h jmp Hien mono: mov ax,0B000h Hien: call Hien_hexa mov ah,1 int 21h int 20h Hien_hexa proc : Ret Hien_Hexa endp End start

86

Chng 3- Lp trnh h thng

B mn Cng ngh iu khin t ng

Gio trnh hp ng

3.6 Cc ngt hay dng trong h thng - Ngt lin quan n bn phm - Ngt lin quan n mn hnh - Ngt lin quan n a - Ngt lin quan n th mc - Ngt lin quan n tp - Ngt lin quan n my in - Ngt lin quan n chut - Ngt lin quan n thi gian - Ngt lin quan n truyn tin ni tip Khi nim: Mi mt ngt ca chng trnh h thng thng c nhiu chc nng chn mt chc nng no ca mt ngt th: Mov ah, chc nng int n V d //Ngt Int 21h y l cc hm ca Dos. 1. mov ah,1 int 21h 2. mov dl,ASCII ca k t mov ah,02h int 21h 3. lea dx,tn_xu mov ah,09h int 21h 4. mov ah,4ch int 21h
3.6.1. Ngt bn phm

Ngt ca dos Int 16h (int 9h) Ngt ca Dos th m my nm trong RAM Ngt ca Bios m my nm trong Rom Chc nng 0h ctrl break Kh ng Echo Kh ng ngha Nhn k t t bn phm: - Nu trong vng m bn phm c k t -> AL - Nu vng RAM rng th my tnh ch n phm. Kim tra vng m bn phm Tn s Nhn c: - AL # 0 -> Al l m ASCII > AH cha m qut. -Nu Al = 0 -> AH cha m ASCII m rng (F1 F10) Ch : ax = 3c00h l F1 ZF =0 Khng c k t

1h

Kh

Kh

Chng 3- Lp trnh h thng

87

B mn Cng ngh iu khin t ng

Gio trnh hp ng

ng

ng

Ch : Nu vng m bn vng m. phm rng th my tnh khng ZF = 1 C k t vng m ch n phm m thc hin v s a vo AL tip. Cho bit trng thi cc AH cha trng thi cc phm c bit ca bn phm: phm c bit: Shift L, Shift R, Alt, Ctrl, SC N CL is A C SL SR Insert, Caps Lock, Numlock, scroll Lock

2h

Kh ng

Kh ng

Ngt ca Dos (Int 21h) Chc ctrl nng break 1h C Echo C ngha Nhn mt k t t bn phm: - Nu c k t trong vng m bn phm -> AL - Nu Vng m bn phm rng, ch n phm Tn s Nhn c: AL -> M ASCII AH -> M scan (M scan l m th t ca bn phm)

07h 08h 06h

C Khng Khng

Khng Nh trn Khng Nh trn

Nh trn Nh trn

Khng Kim tra vng m ca - ZF = 1 Khng c k bn phm t - Nu c k t -> AL - ZF = 0 c -> AL - Nu rng khng tr nhn phm C Cho php nhn mt xu Vo: DS:AX <k t a vo vng m seg:offset ca u vng m. Cho bit trng thi ca N: AL = 0FFh C k vng m bn phm t AL = 0 Rng Xo vng m bn phm. Vo: sau thc hin chc AL <- Chc nng nng c trong AL

0Ah

0Bh

0Ch

V D: Vit Chng trnh con vo s n (cho php nh sai v sa) .data buff db 10

88

Chng 3- Lp trnh h thng

B mn Cng ngh iu khin t ng

Gio trnh hp ng

db ? db dup(?) .code vaoso_n proc push bx cx dx si di mov bx,10 xor di,di lea dx,buff mov ah,0ah int 21h xor ax,ax mov si,dx inc si mov cl,[si] xor ch,ch inc si mov dl,si cmp dl,- jne vsn1 inc di dec cx inc si vsn1: imul bx sub dl,[si] sub dl,30 or dh,dh add ax,dx inc si loop vsn1 add di,di jz vsn2 neg ax vsn2: pop di si dx cx bx ret vaoso_n endp

Chng 3- Lp trnh h thng

89

B mn Cng ngh iu khin t ng


3.6.2 Cc ngt vi mn hnh

Gio trnh hp ng

a. Cc ngt lin quan n ch vn bn ca mn hnh khi nim 1. Mn hnh phn nh ni dung trong Video RAM 2. ln ca k t Mono: Mi mt ch l ma trn 14x9 ch trong c rng , dai l 7x7 Color: Mi mt ch l ma trn 8x8 ch trong c rng , dai l 7x5. 3. Byte thuc tnh vi mn hnh

Mu nn Nhp nhy: 1 C 0 Khng

Mu nt ch Cng : 1 m 0 nht

Ngt Bios lin quan n mn hnh ch Text (Int 21h) DV 0h ngha Set mode cho mn hnh Thng s Vo: AL hnh 0: 40x25 1: 40x25 2: 80x25 3: 80x25 7: 80x25 <- s th hin mode mn 16 mu (bng) 16 mu ( khng bng) 16 mu (bng) 16 mu (khng bng) Mono

02h 03 09h

Xc lp v tr mi cho con tr Vo: DL <- s ct, DH <- s dng (gotoxy) Cho bit v tr hin hnh ca Nhn : DL -> s ct, DH -> s dng con tr Hin k t v mu sc ra mn hnh Ch : Sau khi hin xong con tr khng nhy sang phi Ging chc nng 9 nhng khng c mu Hin mt k t ra mn hnh Get mode Vo: AL <- M ASCII N: S th hin mode mn hnh hin thi Vo: AL <- m ascii . CX <- s ln thc hin. BL <- thuc tnh, BH <- trang mn hnh

0Ah 0Eh 0Fh

Bi tp 1: Xc lp Macro xo mn hnh Clrscr Proc push ax cx dx

90

Chng 3- Lp trnh h thng

B mn Cng ngh iu khin t ng

Gio trnh hp ng

xor dx,dx mov ah,2 ;gotoxy = 00 int 10h mov al,20h ;m ascii ca mov cx,2000 mov ah,0ah int 10h pop dx cx ax EndM Bi tp 2: Hin dng 10, ct 20, dng ch Hello Darling ! ch , nn mu xanh Include lib1.asm _stack segment db 100h dup(?) _stack ends Data segment m db Hello Darling !,0 Data ends Code segment Assume cs: code, ds: data, ss: _stack Start: mov ax,@data mov ds,ax clrscr mov dl,20 mov dh,10 mov ah,2 int 10h lea si,m L1: mov al,[si] and al,al jz exit mov cx,1 ;hin 1 ln mov bl,0ach ;mu m, nn mu xanh, nhy mov ah,09h int 10h inc dl ;chuyn con tr sang phi mov ah,02h

Chng 3- Lp trnh h thng

91

B mn Cng ngh iu khin t ng

Gio trnh hp ng

int 10h inc si jmp l1 exit: mov ah,01h int 21h mov ah,4ch int 21h Code ends End start Ngt ca Dos phc v ch vn bn (int 21h) Chc nng 02h 09h ngha Hin mt k t ra mn hnh Hin mt xu k t kt thc bng $ ra mn hnh tham s DL <- m ASCII ca k t cn hin DS:DX <- seg:offset u xu

b) Ngt lin quan n ch ho mn hnh Khi nim: Bng mu ca mn hnh CGA Chc nng 0h 0bh ngha Set mode cho mn hnh Tham s Vo: AL <- S th hin mn hnh

Chn mu nn cho ton b mn Vo: BH <- 0, chn mu cho hnh ton b mn hnh trong BL mu Chn b mu cho pixel BH <- 1 Cho b mu pixel BL <b mu Hin mt pixel Vo: DX <- S dng CX <- S ct AL <- S mu

0Ch

92

Chng 3- Lp trnh h thng

You might also like