You are on page 1of 125

s G I O DC V O TO H N I NGUYN THNH TRUNG

G I O

T R N H

NGN NG LP TRNH ASSEMBLY (Dng trong cc trng THCN)

N H XUT B N H N I - 2007

N H XUT B N H N I 4 - TNG DUY TN, QUN HON KIM, H NI T: (04) 8252916, 8286766, - FAX: (04) 9289143

GIO TRNH NGN NG LP TRNH ASSEMBLY NH XUT BN H NI - 2007

Chu trch nhim xut bn: NGUYN KHC OANH Bin tp: PHM QUC TUN NGUYN TH THU HNG Ba: TRN QUANG K thut vi tnh: HONG THY LUNG Sa bn in: NGUYN TH THU HNG

In 500 cun, kh 17x24cm, ti Nh in H Ni - Cng ty Sch H Ni. 67 Ph c Chnh - Ba nh - H Ni. Quyt nh xut bn: 160-2007/CXB/446GT-27/HN, s 313/CXB ngy 02/3/2007. So in: 294/3. In xong v np lu chiu qu IU nm 2007.

Li gii thiu

A 7 c ta ang bc vo thi k cng nghip ha, hin V i ha nhm a Vit Nam tr thnh nc cng nghip vn minh, hin i. Trong s nghip cch mng to ln , cng tc o to nhn lc lun gi vai tr quan trng. Bo co Chnh tr ca Ban Chp hnh Trung ng ng Cng sn Vit Nam ti i hi ng ton quc ln th IX ch r: "Pht trin gio dc v o to l mt trong nhng ng lc quan trng thc y s nghip cng nghip ha, hin i ha, l iu kin pht trin ngun lc con ngi - yu t c bn pht trin x hi, tng trng kinh t nhanh v bn vng". Qun trit ch trng, Ngh quyt ca ng v Nh nc v nhn thc ng n v tm quan trng ca chng trnh, gio trnh i vi vic nng cao cht lng o to, theo ngh ca S Gio dc v o to H Ni, ngy 23/9/2003, y ban nhn dn thnh ph H Ni ra Quyt nh s 5620/Q-UB cho php s Gio dc v o to thc hin n bin son chng trnh, gio trnh trong cc trng Trang hc chuyn nghip (THCN) H Ni. Quyt nh ny th hin s quan tm su sc ca Thnh y, UBND thnh ph trong vic nng cao cht lng o to v pht trin ngun nhn lc Th . Trn c s chng trnh khung ca B Gio dc v o to bn hnh v nhng kinh nghim rt ra t thc t o to, S Gio dc v o to ch o cc trng THON t chc bin son chng trnh, gio trnh mt cch khoa hc, h 3

thng v cp nht nhng kin thc thc tin ph hp vi i tng hc sinh THCN H Ni. B gio trnh ny l li liu ging dy v hc tp trong cc trng THCN H Ni, ng thi l ti liu tham kho hu ch cho cc trng c o to cc ngnh k thut - nghip v v ng o bn c quan tm n vn hng nghip, dy ngh. Vic t chc bin son b chng trinh, gio trnh ny l mt trong nhiu hot ng thit thc ca ngnh gio dc v o to Th k nim "50 nm gii phng Th ", "50 nm thnh lp ngnh " v hng ti k nim "1000 nm Thng Long - H Ni". S Gio dc v o to H Ni chn thnh cm n Thnh y, UBND, cc s, ban, ngnh ca Thnh ph, V Gio dc chuyn nghip B Gio dc v o to, cc nh khoa hc, cc chuyn gia u ngnh, cc ging vin, cc nh qun l, cc nh doanh nghip to iu kin gip , ng gp kin, tham gia Hi ng phn bin, Hi ng thm nh v Hi ng nghim thu cc chng trnh, gio trnh. y l ln u tin S Gio dc v o to H Ni t chc bin son chng trnh, gio trnh. D ht sc c gng nhng chc chn khng trnh khi thiu s t, bt cp. Chng ti mong nhn c nhng kin dng gp ca bn c tng bc hon thin b gio trnh trong cc ln ti bn sau.

GIM C S GIO DC V O TO

Li ni u 'gn ng Assembly hay cn gi l Hp nq l ngn ng lp trnh bc V thp cc ch thi lnh l cc t ting Anh dc vit tt cho mt hnh dng no d. Cc lnh trong Hp ng tng lc trc tip vi cc thanh ghi hay cc nh nm trong phn cng ca h thng vi x l. V vy, d vit c Hp ng ngi lp trnh phi c kin thc v phn cng my tnh cng nh h vi x l. u im ca Hp ng l cc chng trnh ng dng dc vit bng ngn ng ny th tc x l tii ln thm mi n hai mi phn trm, m li chim t b nh hn cc chng trnh vit bng ngn ng bc cao khc, bn cnh Hp ng thch nghi mt cch chnh xc vi cc c im ca tng h thng my tnh v cc thit b ngoi vi ca n. Tt c cc chc nng phn cng ca thit b u c th thc hin dc bng cc chng trnh vit bung Hp nc. Mt u im na ca nn ng Hp l l c th lin kt vi ngn ng bc cao khc nh c, Pascal to ra s ti u trong cc chng trnh s dng. Ngy nay my tnh c s dng ngy cng rng ri trong lnh vc o lng v diu khin t dng, trong d yu cu v tc , b nh c n nh trc bi thit b th vic s dng Hp ng l rt cn thit. Mi loi my lnh u c dng Hp ng ring v trnh hp dch ring gi l Assembler. Vi my tnh PC- IDM c hai chng trnh hp dch l Macro Assembler (MASM) ca hng Microsot v Turbo Assember (TASM) ca hng Borland. Gia hai chng trnh ny c s khc nhau i cht, nhng v cng dng nh nhau v tng thch vi nhau. Trong gio trnh ny s cp nhiu n trnh dch hp ng MASM ca Microsot, cn gi l trnh dch Macvo Assembler. 5

i tng gio trnh ny l sinh vin chuyn ngnh k thut vin liu hc ca cc trng Trung hc k thut v dy ngh. hc (lc mn ny ngi c Cn c cc kin thc v k thut vi x l. kin trc my tnh v cng d hc qua ngn ng lp trnh Pascal. Ni dung chng trnh dc chia lm bn chng vi cc ni dim% sau: Chng l: Gii thiu tm tt mt s phn v b vi x l 8086, 8088 nh cc loi d liu, cu trc chung ca cc b vi x l 80x8, s lng v cng dng ca cc thanh ghi, khi nim v tc dng v ngt, cc kiu nh a chi cho cc ton hng v khun dng tp lnh. Chng 2: Trnh by v c php ca hp li g?, cch khai bo b nh. cc bin, cc hng v cu trc c bn ca chng trnh Assh dn gin, cc bc lp trnh cn thc hin, cch s dng cc cu trc c bn khi vo vit Hp ng, Phn bit a hi chng trnh EXE v .COM. Chng 3: Trnh by cc phng php lin kt gia ngn ng bc cao Pascal vi ngn ng Assetnbly. Chng 4: Cc bi ton lp trnh vi s nguyn, lp trnh cho cc chui v thit b vo/ra. Ph lc: Gii thiu cc ngt ca DOS v BIOS gi p ngi hc tra cu, s dng trong cc bi ton lp trnh. Tm li, gio trnh ny nhm gip cho sinh vin cc kin thc c bn v lp trnh Hp ng, ng thi cng c thm cc kin thc dc hc v phn cng my tnh, cng nh k thut vi x l ni chung.

Chng T CHC CA B VI X L 8086

. CC DNG D LI U c BN CA B VI x L 1. Dng s v h m Ngy nay chng la thng dng 10 ch s 0, 1,2, 3, 4, 5, 6, 7, 8, 9 biu din trong cc php tnh ton v trao i trong cng vic. N l h c s mi hay ni gn l h mi. Trong my tnh th khc. My tnh c cu to v lin kt bi mt h thng cc cht bn dn v cc h mch in t. V vy mi hot ng ca my trn hai trng thi c in v khng c in ca cc mch in t. Do vy biu din mt gi tr s chng ta phi dng h c s hai (Binary number system, vit tt l h B). 0 v cng l gi tr c th c ca mt ch s h hai (Binary digit, vit tt l bt). H hai l h m dng trong cc my tnh. Mt s h hai gm mt cm 8 bt gi l Byte, cm 16 bt to thnh mt t l (Word), 32 bt to thnh mt t kp (double vvord). Ch s u tin bn tri trong dy cc s h hai gi l bt c ngha ln nht (Most significant bt, MSB), cn bt cui cng trong dy h hai c ngha b nht (Least significant bt, LSB). Mt s h mi vit nh sau: 78342,56, s c gi tr bng tng ca cc tch 7, 8, 3, 4, 2, 5, 6 vi cc trng s 10' tng ng nh sau: 78342,56 = 7xl0 + 8x10-*+ 3xl0 + 4X10 + 2x10 + 5x10"'+ 6x10-2
4 2 1

Tng t nh vy, mt s h hai vit nh sau: 10110,01, s c gi tr bng tng ca cc tch 1,0,1,1,0,0,1 vi cc trng s 2' tng ng nh sau: 10110,01 = X 2 + 0 X 2 + X 2 + X 2 + 0 X 2 + 0 X 2-' + X 2-2
4 3 2 1

Gia h mi v h hai cn tn ti mt h lai. h BCD cho cc s h mi m hoa bng h hai (Binary Coded Decimal number). rt thch hp cho cc thit b o cho phn hin th s u ra dng cc loi n hin s khc nhau. y ta dng 4 s h hai m hoa mt s h mi c gi tr nm tron khong 0...9. Nh vy y ta khng dng ht cc t hp c th c ca 4 bt. V tm quan trng ca cc s BCD nn cc b vi x l thng c cc lnh thao tc vi chng. V d: S 840 nu biu din theo kiu s BCD th c 1000 0100 0000. Kt qu ny cng gi cho ta cch thc chuyn i gia 2 loi s. Nu ta dng h hai biu din cc s c gi tr ln ta s gp iu bt tin l s h hai thu c qu di. V d biu din s 255 ta cn n 8 bt vit nh sau: 255 = l i u l i u B Trong thc t vit kt qu biu din ca cc s cho gn li ngi ta tm cc nhm 4 s h hai ( nibble) thnh mt s h mi su. Khc vi h BCD va ni, h 16 dng ht cc t hp c th ca 4 bt biu din cc gi tr s. lm c iu ny ngi ta s dng cc ch s sn c ca h mui 0...9 biu din cc gi tr s ng vi 0...9 v dng thm cc ch ci A...F biu din cc gi tr cn li ng vi 10...15. phn bit mt s h mi su vi cc s h khc ta km thm ch H cui. Ta cng d nhn thy rng s mi ch l mt b phn ca h 16. H hai 0000 0001 0010 0011 0100 0101 0110 om 8 H 16 0 1 2 3 4 5 6 7 H hai 1000 1001 1010 lon 1100 noi mo nu H 16 8 9 A B c D E F

2. Chuyn i gia cc h m i s h mi sang h hai Quy tc: Ly s cn i chia cho 2 v ghi nh phn d. tip theo l) thng ca php chia trc chia cho 2 v ghi nh phn d. Lm nh vy cho ti khi c thng bng 0. o ngc th t dy cc s d s dc cc ch s ca h hai cn tm. Trong trng hp s h mi cn i c thm phn l cho du phay th u tin ta phi i r tng phn ri sau cng cc kt qu li. i vi phn nguyn ta c th lm theo 2 cch ni lin. Ring i vi phn sau du phay ta i theo quy tc trnh by sau y. Ly s cn i nhn vi 2. tch nhn c s gm phn nguyn v phn l nh phn. ly phn l nh phn ca tch thu c nhn lip vi 2. Lm nh vy cho ti khi tch chn bng 1. Chn ring cc phn nguyn (phn trc du phy) ca cc tch thu c v sp xp li s c cc ch s sau du phy ca h hai cn tm. V d: i 0,125 ra s h hai. Ta thc hin php nhn ln lt theo cc bc trn: 0.125 0,250 0,500 X 2 X 2 X 2 0,250 0,500 1,000

v thu c kt qu l 0,125 = 0,001 B (phn c ng trong khung). Kt hp cc v d trn li, nu phi i s 34,125 ra h hai ta thu c kt qu cui cng l 34,125 = 100010,001 B. i s h hai v h s Hex: V d: 2B3Ch i ra h hai 2 0010 B lon 3 0011 c 1100

i s h thp phn v h s Hex V d: i s 1978 ra h Hex 9

u tin chia 1978 cho 16 nhn c thng s 123 v s d l 10 1978 = 123 X 16 + 10 s d chnh l hng n v ca s biu din dng s Hex. 10 = Ah C lip tc chia cho n khi thng s bng 0. Chuyn i cc s d Hcx v ghp chng li vi nhau theo th t ngc li. 1978 = 123 X 16 + 10(Ah) 1978 = 7BAh 123= 7 = S nh phn: - Php cng: 0 +0=0 0+1 = 1 1+0=1 1 + 1=0 d V d: + no 011 no 1001 0-0 = 0 0-1 = 1 1-0=1 1-1=0 V d: no -011 li 011 10 7xl6+ll(Bh) 0 X 16 + 7(7h)

3. Cc php tnh vi s nh phn v h Hexa

phn d

- Php tr: n

phn n

S Hexa: Bng cng s Hex 0 0 1 2 3 4 5 6 7 8 9 A B c D E F V d: 2 3 4 5 6 7 8 9 A B c D li F 0 1 2 3 4 5 6 7 8 9 B c D F. F 1 2 3 4 5 6 7 8 9 A B c D E F 10 2 3 4 5 6 7 8 9 A B c D E F lon 3 4 5 6 7 8 9 A B c D E F 10 l i 12 4 5 6 7 8 9 A B c D E F 10 11 12 13 5 6 7 8 9 A B c D E F 10 l i 12 13 14 6 7 8 9 A B c D E F 10 l i 12 13 14 15 7 8 9 A B c D E F 10 l i 12 13 14 15 16 8 9 A B c D E F 10 l i 12 13 14 15 16 17 9 A B c D E F 10 l i 12 13 14 15 16 17 18 A B c D E F 10 11 12 13 14 15 16 17 18 19 B c D E F 10 l i 12 13 14 15 16 17 18 19 1A c D E F 10 l i 12 13 14 15 16 17 18 19 1A1B D E F 10 l i 12 13 14 15 16 17 18 19 1A1B 1C E F 10 l i 12 13 14 15 16 17 18 19 1A1B 1C1D F 10 l i 12 13 14 15 16 17 18 19 1A1B 1C1D1E

5B39h + 7AF4h D62Dh S dng bng cng ta c th tra ra cc php tr V d: D26F BA94 17DB

4. Dng k t c lu n theo dng m ASCII (American Standard Codc information Intcrchangc) M chun, mi k t chim mt byte. My tnh khng bit s v k l ASCII m chi xem chng nh l mt byte bt k. vi mt ngoi l. Trong bng m ASCII tiu chun ngi la dng 7 bt m hoa cc k t thni dng. nh vy bng m ny s c 128 k t ng vi m s t 0-127. Khi tra cc bng ny ta c m ca k t theo th l ct-hng. Bng m ASCII (American Standcd Code inonnaiion Interchange M tin chun /rao di thm; liu) Hexademal 0 2 3 4 5 6 7 8 0 <ML> 1 <DLE> 2 <SP> 32 t 33 34 # $ 35 36 0 48 4 @ 64 5 p 6 7 p q r 98 s 99 t 100 u loi 102 103 104

16 0 <SOH> <DC1> 1 17 <srx> <DC2> 2 <ETX> 3 <EOT> 18 <DC3> 19 <DC4>

80 a 81 82 83 84 e 85 86 87 88 f g h b c d

96 97

112 113 114 115 116

1 A Q 49 65 2 50 R b 66

3 c s 51 67 4 D T 52 68 5 E u 53 69 V 6 F 54 70 w 7 G 55 71 8 H 56 72 X

4 20 <ENQ> <NAK> 5 <ACK> 6 <bel> <bs> 7 8 21 <SYN> 22 <etb> 23 <CAN> 24

% 37 & 38 39 ( 40

117

V 118 w 119 X 120

12

9 A b c D E F

<m> <LP>

<EM> 25 <SUB> 26 <ESO> 27 <IS> 28 <GS> 29 <RSI> 30 <us> 31

41 42

9 57 58 59 J k

Y 73 z 74 75 [ \

89 90 9i 92

i j k

105 106 107

' 121 l 122

10 <VT> 11 <FF> 12 <CR> 13 <SO> 14 <SI> 15

43 44

1 123 1 124 1 125 126 <Di-;i.> 127

< L 60 76 61 M 77

1 108 in 109 n 0 110 IU

45 46 / 47

> N 62 78 9 () 63 70

1 93 A 94 95

5. Biu di n s nguyn nh phn trong my tnh 5.1. Biu di n s nguyn khng du S nguyn khng du (unsigned integer) biu din cc s nguyn dng. S nguyn khng du rt thch hp biu din cc i lng lun dng. chng hn a chi cua nh, b m hay m ASCII ca k t (chng ta s thy sau ny). Bi v cc s nguyn khn!! du c nh ngha l cc s dng nn khng cn dng bt no ca n biu din du. do 8 bt ca mt byte hay 16 bt ca mt word u c dng biu din s. S nguyn khng du ln nht c th cha trong mt byte l l i u l i u = FFh = 255 S nguyn khng du ln nht c th cha trong mt Word l: l i u l i u l i u l i u l i u = FFFFh = 65535 Trong trng hp khng chng ta c th s dng hai vvord hoc hn na. 13

5.2. Biu din s nguyn c du Kt du S nguyn c du (signed inleger) c the l s dng hoc s m. Bt nng nhi MSB c dng e biu din du ca s. MSB bng 0 biu din s dng. cn bng biu din s m. Cc s m c lu trong my tnh di dng s b 2. hiu c khi nim s b . trc lin chng la hy cng nhau tm hiu khi nim s b 1. S b ca s nguyn nhn c bng cch ly phn b ca cc bt ca n. c ngha l o bt: thay mi bi! 0 bng v ngc li, bng 0. V d: Tim s b ca S b mt ca S b hai: nhn c s b 2 ca mt s nguvn ta chi vic cng vo s b ca n. V d: Tim s b 2 ca 5? Theo kt qu trn. S b ca 5 l i u l i u l i u 1010 +]_ S b ca 5 l i u l i u l i u lon By gi hy cng 5 vi s b 2 ca n Sb2ca5 liu liu liu lon s 5 +0000 0000 0000 0101 Tng nhn c 10000 0000 0000 0000 Chng ta nhn c mt s 17 bt v mt word b nh chi c th lu c 16 bt, phn nh nm bt gi nht msb s b mt, do kt qu 16 bt bng 0. Do tng ca 5 v s b 2 ca n bng 0. s b 2 ca 5 r rng biu din gi tr -5. 14 5 = 0000 0000 0000 0101 5 = l i u l i u l i u 1010

l i . CC B VI X L 80x86 CA ITKL 1. Gii thiu v cc b vi x l B c ca cc my tnh l mt b vi x l n thc hin tt c cc cng vic x l cc lnh v d liu. Cc b vi x l khc nhau ch yu tc ca chng, dung lng b nh, cc thanh ghi v bus d liu. Mt bus d liu chuyn d liu gia b vi x l. b nh v cc thanh ghi phn bn ngoi (ngha l qun l vic lu thng d liu). Sau y l m t vn tt cc b vi x l khc nhau ca Intcl. B vi x l 8088/80188: Cc b vi x l ny c cc thanh ghi 16-bit v bus d liu 8-ht. c th nh a chi mt b nh ni n M (vi 20 ng a chi). Cc thanh ghi c th x l ng thi 2 byte trong khi bus d liu mi ln ch c the chuyn mt byte. 80188 l phin bn ca 8088 vi mt vi lnh c thm vo. C hai loi vi x l ny u hot ng ch thc (real mocle), ngha l mt chng trnh mt thi im. B vi x l 8086/80186: ' Cc b vi x l ny tng t nh 8088/80188 nhng bus d liu 16-bit v chy nhanh hn. 80186 l phin bn ca 8086 vi mt vi lnh c thm vo. B vi x l 80286: B vi x l ny chy nhanh hn cc b vi x l trc v c th nh a chi mt b nh ln n 16 MB (vi 24 ng a chi). B vi x l ny c th hot ng ch thc v ch bo v (protccted modc) cho lp trnh a nhim (multitasking). B vi x l 80386: B vi x l ny c cc thanh ghi 32-bit v bus d liu 32-bit, c th nh a chi mt b nh ln n 4 GB (vi 32 ng a chi). B vi x l ny c th hot ng ch thc v ch bo v cho lp trnh a nhim. B vi x l 80486: B vi x l ny c cc thanh ghi 32-bit v bus d liu 32-bit (mc d c phin bn ch c bus d liu 16-bit) v c thit k vi cc c tnh nng cao. 15

B vi x l ny c the hot ng ch thc v ch bo v cho lp trnh a nhim. B vi x l Pcntium: B vi x l ny c cc thanh ghi 32-bit v bus d liu 64-bit, c kh nng thc thi nhiu hn mi lnh trong chu k xung clock. 2. Cu trc b vi x l 80x86 BU Thanh ghi a nng Thanh ghi con tr v chi s M lu CH DU SP BP SI DI AI. BL CL DL Bu

cs DS ss ES

Thanh ghi oan

Bus ALU CU m lnh

IP

B vi x l c chia thnh 2 n v logic: n v thc thi lnh EU (execution unit) v n v giao tip bus Bu (bus interace unit) nh hnh di

16

y. Vai tr ca EU l thc thi cc lnh trong khi Bu phn phi cc lnh v d liu n BU. EU cha n v s hc-logic ALU (arithmetic logic unit), n v iu khin c u (control unit) v mt tp cc thanh ghi. Cc c trng ny cung cp kh nng thc thi cc chi th v thc hin cc php ton s hc-logic. Execution Unit: Bua Interace: Program control: Bus control unit: Instruction Queue: Arithmethic-Logic Unit: Control Unit: Flags register: Instruction Pointer: n v x l EU n v giao tip bus Bu iu khin chng trnh n v iu khin bus hng i lnh n v s hc logic ALU n v iu khin c u thanh ghi c con tr lnh rp

Nhim v quan trng ca Bu l qun l n v iu khin bus, cc thanh ghi segment v hng i lnh (instruction queue). Bu iu khin cc bus chuyn d liu n EU, n b nh v n cc thit b xut nhp bn ngoi trong khi cc thanh ghi segment cho php ta nh a ch b nh. Nhim v khc ca Bu l tm np cc lnh. V cc lnh ca mt chng trnh ang thc thi trong b nh, Bu phi tm np cc lnh t b nh v t chng vo hng i lnh. EU v Bu lm vic song song, trong Bu i trc mt bc. EU thng bo cho Bu khi cn truy xut d liu trong b nh hoc mt thit b ngoi vi. EU cng yu cu cc ch th t hng i lnh ca Bu. Trong khi EU ang bn thc thi mt lnh, Bu tm np mt lnh khc t b nh. Vic tm np trc ny gip tng tc x l ca b vi x l. Cc b vi x l 80486 tr v trc ch s dng k thut ng ng n (single pipeline) nn b hn ch trong vic thc thi cc lnh, mt lnh phi c hon tt trc khi bt u lnh tip theo. Pentium v cc b vi x l sau ny c cu trc ng ng i (double pipeline) cho php chng thc hin song song nhiu thao tc. 17

HI. CC THANH GHI CA B VI x L 8086/8088 Thng tin c lu gi bn trong b vi x l nm trong cc thanh ghi. B vi x l 8086/8088 c 14 thanh ghi. Cc thanh ghi c phn chia theo chc nng ca chng di cc dng sau: 1. Cc thanh ghi d liu AX, BX, cx, DX Gm 4 thanh ghi, c ngi lp trnh s dng cho cc thao tc vi d liu. B vi x l c th thao tc vi d liu trong b nh nhng tc x l s nhanh hn nu d liu c lu trong cc thanh ghi. V vy hin nay cc b vi x l hin i u c cu to nhiu thanh ghi hn. Cc bytc cao v bytc thp trong cc thanh ghi ny c th truy nhp ring bit. Byte cao thanh ghi AX gi l AU, byte thp gi l AL. Tng t nh vy cc byte cao v bvte thp ca cc thanh ghi BX. c x . DX ln lt l BU v BL. CH v CL, DH v DL. Nh iu ny m ta c thm nhiu thanh ghi khi lm vic vi s liu kch thc bytc. Bn thanh ghi trn c cng dng chung l thanh ghi d liu, ngoi ra chng cn thc hin cc chc nng c bit sau: AX 15 AH BX 15 BH cx 15 CH DX 15 DH 87 AL 87 BL 87 CL 87 DL 0 bt Obit Obit Obit

- Thanh ghi AX (Accumulator register): Thanh ghi cha. AX l thanh ghi c s dng trong cc lnh s hc, logic v chuyn d liu v vic s dng chng to ra m my ngn nht. - Thanh ghi BX (Base register): Thanh ghi c s. BX ng vai tr thanh ghi a ch. 18

- Thanh ghi CXCount register): Thanh ghi m. c x ng vai tr b m vng lp, CL cng c s dng l bin m trong cc lnh dch hay quay vng. - Thanh ghi DX(Daia register): Thanh ghi d liu. DX c s dng trong cc thao tc nhn v chia, n cng c s dng trong cc thao tc vo/ra (in/out). 2. Cc thanh ghi o n cs, DS, ES, ss Mt chng trnh ngn ng my in hnh gm cc lnh v d liu. Ngoi ra cn c mt cu trc d liu khc gi l ngn xp (Stack) c b vi x l s dng thc hin cc li gi th tc. M, d liu v ngn xp ca chng trnh c np vo cc on b nh khc nhau, ta gi chng l cc on m (Code segment), on d liu (Data segment), v on ngn xp (stack segment). theo di cc on khc nhau ca chng trnh, 8088 c cung cp 4 thanh ghi on 16 bt cha cc a chi on. l cc thanh ghi cs, DS. ss ln lt cha a chi cc on m, on d liu v on ngn xp. Nu chng trnh cn truy nhp n mt on d liu th hai n c th s dng thanh ghi on d liu ph ES (Extra segment). Ti mi thi im, ch nhng nh c nh a ch bi 4 thanh ghi on mi c th c truy nhp. C ngha l ch c 4 on b nh hot ng, tuy nhin ni dung ca cc thanh ghi on c th c thay i bi chng trnh truy nhp n cc on khc nhau. 3. Cc thanh ghi con tr v ch s IP Con tr lnh (Instruction Pointer): Lun tr vo lnh tip theo s c thc hin trong on m cs. BP Con tr c s (Base Pointer): Lun tr vo mt d liu nm trong on ngn xp ss. SP Con tr ngn xp (Stack Pointer): Lun tr vo nh hin thi ca ngn xp nm trong on ngn xp ss . SI Ch s gc (Source index): Chi vo d liu trong on d liu DS. DI Chi s ch (Destination index): Chi vo d liu trong on d liu ES. 19

4. Thanh ghi c L thanh ghi 16 bt, nhng ch c 9 bt lm cc bt c v n chia ra 6 bt iu kin 3 bt iu khin. X X X X o D T s z X A X p X c

X khng c nh ngha Cc c c th: c hoc CF (Carry flag) C nh: CF = bng khi c nh. p hoc PF (Parity flag) C Parity: PF = s ch s trong kt qu l s chn. A hoc AF (Auxihary carry flag) AF = khi c nh hoc mn t mt s BCD thp (4bit thp) sang s BCD cao (4bit cao). z hoc ZF (Zero flag) C rng: ZF = khi kt qu bng 0. s hoc SF (Sign flag) C du: SF = khi kt qu m. o hoc OF (Overflow flag) C trn: OF = khi kt qu l s b 2 vt ra ngoi gii hn biu din dnh cho n. T hoc TF (Trp flag) C by: TF = khi b vi x l lm vic ch chy tng lnh. hoc IF (Interrupt enable flag) C cho php ngt: IF = th b vi x l cho php cc yu cu ngt (Che c) c tc ng. D- DF (Direction flag) C hng: DF = khi b vi x l lm vic vi chui k t t phi sang tri (t a ch thp ti a ch cao). IV. NGT V PHN LOI NGT 1. Khi nim Ngt l cc chng trnh con Th tc v Hm c sn trong my. Hm ngt khng c tn m thay vo l con s O...FF M i hm ngt li cha bn trong n nhiu hm con. 2. Phn loi ng t C 3 loi ngt sau: 20

2.1. Ngt cng V c bn cc ngt c hiu l cho php cc thit b phn cng ngt cc thao tc ca CPU. V d, khi ta nhn mt phm bt k, b vi x l phi c bo c mt m phm vo b m bn phm. Cc ngt cng ni chung xy ra nh sau: - Thit b phn cng cn phc v gi tn hiu yu cu ngt n b vi x l; - B vi x l treo cng vic ang thc hin v chuyn iu khin cho chng trnh phc v ngt. - Chng trnh phc v ngt phc v ngt cng vi vic thc hin mt vi thao tc vo ra. - iu khin c tr v cho chng trnh ang thi hnh ti thi im b treo. Thc hin mt chng trnh phc v ngt tng ng nh gi mt th tc. Trc khi chuyn iu khin cho phc v ngt, u tin b vi x l ghi a ch ca lnh tip theo (a ch tr v) vo ngn xp. B vi x l cn ct thanh ghi c vo trong ngn xp m bo phc hi li trng thi ca chng trnh b ngt. Cc chng trnh phc v ngt cn phc v hi mi thanh ghi khc m chng s dng. 2.2. Ngt mm Ngt mm c cc chng trnh s dng yu cu cc phc v ca h thng. Mt ngt mm (software interrupt) xy ra khi chng trnh gi mt phc v ngt bng lnh INT. Dng ca lnh INT nh sau: INT n (s hiu ngt) - B vi x l coi s hiu ngt ny cng ging nh s hiu ngt pht sinh bi mt thit b phn cng. Trong n l s hiu ngt nm trong khong 00-FFh (256 vect ngt) c np vo b nh RAM khi khi ng chng trnh v mi kiu ngt = vect ngt. vect ngt cn 4 byte cha a ch y cho CS:IP ca chng trnh con phc v ngt. Nh vy 256 vect ngt chim 256 X 4 = 1024 byte = 1KB V d: gi ngt ch nhp k t t bn phm MOV AH,1 Im 21h 21

2.3. Ngt cng ni b C mt loi ngt cng ni b (processor exception). Mt ngt cng ni b xy ra khi c mt x l c bit chng hn nh xy ra trn khi chia. M i trng thi tng ng vi mt loi ngt duy nht. V d, php chia trn tng ng vi ngt 0 v nh th khi mt php chia b trn, b vi x l t ng thi hnh ngt 0 x l tnh hung trn. 3. x l u tin khi ngt Ti mt thi im c nhiu yu cu ngt thuc cc loi ngt khc nhau b vi x l s x l theo th t u tin sau: - Ngt ni b INT 0 (php chia ht cho 0) INT n. - Ngt khng che c NMI. - Ngt che c INTR. - Ngt chy tng lnh INT . 4. Ngt 21 h ca DOS v BIOS s d ng trong cc lnh VO/RA Hm 1: Nhn mt k t dng ASC1 t bn phm: Vo: AH = Ra: AL = m ASCII nu mt phm c n. V d: Mov AH,1 im 21h K t nhn c nm thanh ghi AL Hm 2: a ra mn hnh mt k t dng ASCII c cha trong thanh ghi DL. Vo: Ra: V d : AH = 2 DL = m ASCII ca k t hin th AL = m ASCII ca k t hin th mov AH,2 mov "*" im 21h

dng hm ny s hin k t "*" ra mn hnh 22

Hm 9: Hin th mt chui Vo: DX=a ch tng i (oset) ca chui. chui k t c kt thc bng du $. V d: .DATA Thao DB 'Hello,you!$'

loa DX.Tbao mov AH,9 im 21h dng hm ny s hin dng k t "Hello,you!" ra mn hnh Hm 4Ch: Tr v DOS: V d: mov AH,4Ch int 21h Khi dng hm ny chng trnh kt thc, tr v DOS V. CC PHP NH A CH 1. Vn g i a ch ca ton hng Tr mt s t lnh khng cn ton hng, a s lnh ca b vi x l cn ton hng, tc d liu cho lnh. D liu c th l s liu cho cc php ton s hc hay logic hoc a ch cho hnh ng nhy chng trnh. D liu trn c th tm thy trong s liu tc th ghi ngay trong lnh, trong thanh ghi v trong nh. B vi x l s gi cc d liu trn bng cch pht a chi c cc ton hng vo cc thanh ghi ca B vi x l. M i dng lnh ch c mt m lnh, tc mt hnh ng duy nht nhng ton hng tc s liu cho lnh c th c, tm trong ba ngun s liu trn, c bit trong nh c nhiu phng php gi tm s liu (trc tip, gin tip, thanh ghi c s, ch s v.v...). Chnh s phong ph ca cc phng php hay ch gi a chi ny m s lnh m rng ca mt B vi x l rt ln tuy rng s lnh c bn c hn. 23

2. Cc phng php a ch ca ton hng 2.1. Ch a ch thanh ghi Trong ch a ch ny ngi ta dng cc thanh ghi bn trong b vi x l nh l cc ton hng cha d liu cn thao tc. V vy khi thc hin lnh c th t tc truy nhp cao hn so vi cc lnh c truy nhp n b nh. V d: MOV BX,DX;chuyn n i dung DX vo BX. MOV DS,AX;chuyn n i dung AX vo DS. ADD AL,DL;cng n i dung AL v DL r i a vo AL 2.2. Ch a ch tc th Trong ch a ch ny ton hng ch l mt thanh ghi hay mt nh. cn ton hng ngun l mt hng s v ta c th tm thy ton hng ny ngay sau m lnh. C th dng ch a ch ny np d liu cn thao tc vo bt k thanh ghi no (tr cc thanh ghi on v thanh c) hoc vo bt k nh no trong on d liu DS. V d: MOV BL,80 MOV DS,AX MOV [ BX] ,20 /chuyn 80 vo BL ; v o DS ( v khng t h chuyn / t r c t i p vo thanh g h i /chuyn 20 vo nh t a i /ch DS:BX o n) a MOV AX,0FFFH /chuyn 0FFFH vo AX r i a

2.3. Ch a ch trc tip Trong ch a ch ny mt ton hng cha a chi lch ca nh vng cha d liu cn ton hng kia ch c th l thanh ghi m khng c l nh. V d: MOV AL,[ 197H] / chuyn n i dung nh DS:1970h vo AL. MOV [ 8450H],cx /chuyn n i dung cx vo 2 nh l i n t i p DS:8450 v DS:84511. 24

2.4. Ch a ch gin tip qua thanh ghi Trong ch a ch ny mt ton hng l mt thanh ghi c s n" cha a chi lch ca nh cha d liu, cn ton hng kia chi c th l thanh ghi m khng c l nh . V d: MOV AL, [ BX] ;chuyn ;ch MOV [ S I ] , Ch ;chuyn n i dung nh c a n i dung CL vo nh DS:BX vo AL.

; c a c h DS:SI. MOV [ DI] , AX ;chuyn n i dung AX vo 2 nh / l i n t i p c a c h DS: DI v ; DS: (DI + 1) . 2.5. Ch a ch tng i c s Trong ch a chi ny ton hng ch l mi thanh ghi, cn ton hng ngun l cc thanh ghi c s nh BX v BP v cc hng s c dng tnh a chi hiu dng trong cc vng nh DS v ss. V d: MOV cx,[ BX] +10 /chuyn c a c h DS:(BX+10) v MOV cx,[ BX+10] n i dung 2 nh l i n tip

;DS: (BX+11) vo cx. ; cch v i t khc ca ; v o AL.

lnh

trn.

MOV AL,[ BP] +5 /chuyn

n i dung nh SS:(BP+5)

2.6. Ch a ch tng i ch s Trong ch a chi ny ton hng ch l mt thanh ghi. cn ton hng ngun l cc thanh ghi chi s nh SI v DI v cc hng s c dng tnh a chi hiu dng trong vng nh DS.ES. V d: MOV AX, (SI)+10 /Chuyn n i dung 2 nh l i n c a c h DS:(SI+1) v DS:(SI+11) vo AX tip

25

2.7. Ch a ch tng i chi s c s Kt hp hai ch a chi chi s v c s ta c ch a chi chi s c s. Trong ch a chi ny ta dng c thanh ghi c s ln thanh ghi chi s v hng s tnh a chi hiu dng ca ton hng ngun, cn ton hng ch l mi thanh ghi. V d: MOV AX,[ BX] [ SI] +8 /chuyn n i dung h a i nh l i n t i p c a ch DS:(BX+SI + 8) v DS:(BX+SI + 9) vo AX. MOV AX,[ BX+SI + 8] ; cch v i t khc ca l n h t r n MOV CL,[ BP+DI + 5] /chuyn n i dung nh ss:(BP+DI+5) vo CL. VI. TP LNH B VI X L 8086/8088 Tp lnh ca b vi x l 8086/8088 c th chia thnh 6 nhm sau: 1. Nhm cc lnh chuyn d liu 1.1. Lnh MOV C php: MOV ch, ngun Chc nng: Chuyn gi tr ton hng ngun vo ton hng ch V d: MOV AH/VVORDl ; Chuyn ni dung nh WORDl vo thanh ghi AH. MOV AX,BX : Chuyn ni dung thanh ghi BX vo trong AX (Sao ni dung BX vo AX) Cc kh nng kt hp cho php ca cc ton hng trong lnh MOI' Ton hng ch Ton hng ngun Thanh ghi cng dng chung Thanh ghi on nh Hng s 26 Thanh ghi cng dng chung c c c c Thanh ghi on nh Hng s

c Khng c Khng

c c Khng c

Khng Khng Khng Khng

1.2. Lnh PUSH C php: Chc nng: V d: PUSH BX ; Ct ni dung trong BX vo nh ngn xp 1.3. Lnh PUSHF C php: Chc nng: 1.4. Lnh POP C php: Chc nng: V d: POP C php: Chc nng: C php: Chc nng: V d : XCHG 1.7. Lnh IN C php: Chc nng: IN AL, a ch cng (cng 8 bt) IN AX, a ch cng (cng 16 bt) c gi tr 8 hoc 16 bt t cng vo thanh ghi AH, BL; hon chuyn ni dung gia hai thanh ghi. DX ; ly 2 byte t inh ngn xp a vo thanh ghi DX. POPF Chuyn gi tr t nh ngn xp vo thanh ghi c XCHG ch, ngun Hon chuyn gi tr gia ton hng ngun v ton hng ch 1.5. Lnh POPF POP ch Chuyn gi tr t nh ngn xp vo ton hng ch PUSHF Ct gi tr thanh ghi c vo inh ngn xp PUSH ngun Chuyn gi tr ton hng ngun vo inh ngn xp

1.6. Lnh XCHG

27

1.8. Lnh OUT C php: OUT a chi cng (cng 8 bt). AL OUT a chi cng (cng 16 bt), AX Chc nng: Chuyn gi tr byte ca thanh ghi AL hoc 2 Byte ca thanh ghi AX ra cng (PORT) V d: a chi cng l FFFFh ta c lnh nh sau: MOV ch FFFFh 1.9. Lnh LEA C php: LEA thanh ghi. bin nh Chc nng: a phn a ch OFFSET ca ton hng ngun (Bin nh) vo thanh ghi ch. ch thng l mt trong cc thanh ghi BX, c x . DX. BP, SI, DI. Gc l tn bin trong on DS c chi r trong lnh hoc nh c th V d: LEA LEA DX, TIN ; np a ch lch ca TIN vo DX CX,[BX] [DI] ; np vo c x a chi hiu dng do BX v DI chi ra FFFFh, AX ;chuyn ni dung trong AX ra cng c a

2. Nhm cc lnh s hc 2.1. Lnh ADD C php: ADD ch, ngun Chc nng: Cng gi tr ca ton hng ngun vi gi tr ca ton hng ch v kt qu c a vo ton hng ch. V d: ADD AL,AH ; cng ni dung 2 thanh ghi 8 bt AH+AL v gi tr sau khi cng vo trong AL 2.2. Lnh ADC C php: ADC ch, ngun Chc nng: Cng gi tr ca ton hng ngun vi gi tr ca ton hng ch v bt c CF. kt qu c a vo ton hng ch. 28

V d: ADC AL, AH ;AL = AH+AL+CE nu CF = kt qu cng thm cn CF = 0 lnh nh ADD. 2.3. Lnh INC C php: Chc nng: V d: INC C php: AL ; nu AL = 20h th INC AL = 20h+1h = 21 h SUB ch. ngun 2.4. Lnh SUB Chc nng: Tr gi tr ca ton hng ch vi gi tr ca ton hng ngun v kt qu c a vo ton hng ch. V d: SUB AL.BL ; Ly ni dung thanh ghi AL tr i ni dung thanh ghi BL, gi tr cn li gi vo trong AL 2.5. Lnh SBB C php: SBB ch, ngun Chc nng: Tr gi tr ca ton hng ch vi tng ca ton hng ngun vi gi tr c v kt qu c a vo ton hng ch. V d: SBB SUB. 2.6. Lnh C C php: Chc nng: V d: C c x ; gim gi tr trong c x i 29 C ch Gim gi tr ton hng ch i AL,BL ; AL=AL- (BL+CF). nu CF=0 lnh trn ging lnh INC ch Tng gi tr ton hng ch ln

2.7. Lnh NEO C php: Chc nng: V d: NEG C php: Chc nng: V d: CMP JE C php: AL.ODh ; Nu AL l phm xung dng? THOT ; ng, thot ra MUL ngun BU : o du gi tr trong BU. O-(AH) CMP ch, ngun So snh gi tr ton hng ch vi gi tr ton hng ngun 2.8. Lnh CMP NEG ch o du gi tr ton hng ch

2.9. Lnh MUL Chc nng: Nhn ni dung thanh ghi AL, AX vi ton hng ngun. Gi tr 2 ton hng l khng du. Nu l 8 bt ct gi tr nhn vo trong AX, cn 16 bt ct vo DX:AX V d: nhn hai s 10 v 35 ta c cc lnh MOV MOV MUL C php: AL,10 ; Chuyn lo vo trong AL BL,35 ; Chuyn 35 vo trong BL BL ; Kt qu lu trong AX l 350 IMUL ngun

2.10. Lnh IMUL Chc nng: Nhn ni dung thanh ghi AL, AX vi ton hng ngun. Gi tr 2 ton hng l c du. Nu l 8 bt ct gi tr nhn vo trong AX. cn 16 bt ct vo DX:AX V d: ni dung trong BL = -35 ta c cc lnh 30

MOV IMUL

AL.10 ; chuyn 10 vo trong AL BL ; kt qu lu trong AX l -350

2.11. Lnh DIV ('li php: DIV ngun Chc nng: Chia ni dung thanh ghi AX hoc DX:AX vi ton hng ngun. Gi tr 2 ton hng l khng du. Nu gi tr ton hng b chia l 16 bt th thng t trong thanh ghi AL v phn d t trong AU. Nu ton hng b chia l 32 bt th thng s t trong thanh ghi AX. phn d ct vo trong thanh ghi DX. V d: AX cha 0005h, DX cha O O O O h v BX cha 0002h DIV BX ; chia 5 cho 2 ta nhn c 2 d . Trong AX = 0002h cn DX = 0001h 2.12. Lnh IDIV C php: IDIV ngun Chc nng: Chia ni dung thanh ghi AX hoc DX:AX vi ton hng ngun. Gi tr 2 ton hng l c du. Nu gi tr ton hng b chia l 16 bt th thng t trong thanh ghi AL v phn d t trong AU. Nu ton hng b chia l 32 bt th thng s t trong thanh ghi AX. phn d ct vo trong thanh ghi DX. 3. Nhm cc lnh thao tc bt 3.1. Lnh NT C php: NT ch Chc nng: B ton hng ch (thc hin vic o gi tr tng bt ca ton hng ch V d: AL = 0111 OOOlb NT AL ;AL= 1000 lllOb 31

3.2. Lnh AND C php: AND ch, ngun Chc nng: V d: AND Trong V LOGIC gia 2 ton hng kt qu t ton hng ch

AL, BL BL =0111 0100B AL = 1001 0101B

AND AL, BL =0001 0100B Cc bt tnh theo bng sau: AL 0 0 1 1 3.3. Lnh OR C php: OR ch, ngun Chc nng: Hoc LOGIC gia 2 ton hng, kt qu t ton hng ch V d : OR AL, BL Trong BL = 01110100B AL = 0010101B OR AL, BL = 1110101B Cc bt tnh theo bng sau: AL 0 1 0 1 32 BL 0 1 1 0 Kt qu 0 1 1 1 BL 0 1 0 1 Kt qu 0 0 0 1

3.4. Lnh XOR C php: XOR ch, ngun Chc nng: Chc nng XOR LOGIC gia 2 ton hng, kt qu t ton hng ch (cc bt c kt qu l nu gi tr cc bt tng ng ca 2 ton hng l khc nhau) V d: XOR Trong : AL, BL BL=01110100B A L = 10010101B XOR AL. BL = 11100001B AL 0 0 1 1 3.5. Lnh SHL/SAL C php: SHL/SAL ch, Count Chc nng: Dch tri cc bt ca ton hng ch i Count ln (gi tr Count c t trong thanh ghi CL, nu Count = c th t trc tip vo ton hng ca lnh). Mt gi tr 0 s c a vo v tr bn phi nht ca ton hng ch. cn bt bn tri nhi ca n c a vo c CF. BL 0 1 0 1 Kt qu 0 1 1 0

CF V d: BL = 00001000 h thp phn l 8 ta dch tri i 3 ln BL MOV SAL CL,3 : np s ln dch vo CL BL, CL; BL dch tri 3 ln

33

Lc ny gi tr BL = 01000000 h thp phn l 64. nh vy mi ln dch tri gi tr trong BL nhn gp i. 3.6. Lnh SHR C php: SHR ch. Count Chc nng: Dch phi cc bt ca ton hng ch i Count ln (gi tr Count c t trong thanh ghi CL, nu Count = c th t trc tip vo ton hng ca lnh). Mt gi tr 0 s c a vo v tr bn tri nht ca ton hng ch, cn bt bn phi nht ca n c a vo c CF.
0

" c Zl

*~

CF

V d: BH = 10001000 h hex l 88h ta dch phi i 2 ln BU MOV CL,2 SHR BH, CL ; np s ln dch vo CL ; BL dch phi 2 ln

Lc ny gia tr BH = 00100010 h thp phn l 22h. nh vy mi ln dch tri gi tr trong BU chia i. S dng chia khng du. 3.7. Lnh SAR C php: SAR ch, Count Chc nng: Dch phi cc bt ca ton hng ch i Count ln (gi tr Count c t trong thanh ghi CL, nu Count = c th t trc tip vo ton hng ca lnh). Bt bn phi nht ca n c a vo c CF, cn bt tri nht va dch v bn phi v vn gi nguyn gi tr ban u.

CF V d: BH = 11110000 h thp phn l -16 ta dch phi i 4 ln BH MOV SAR 34 CL,4; np s ln dch vo CL BH, CL; BL dch phi 4 ln

Lc ny gi tr BH = 111111111 h thp phn l -1. nh vy mi ln dch phi gi tr trong BH chia i. S dng chia c du. 3.8. Lnh ROL C php: ROL ch, Count Chc nng: Quay vng tri cc bt ca ton hng ch i Count ln (gi tr Count c t trong thanh ghi CL, nu Count = c th t trc tip vo ton hng ca lnh) mi ln quay gi tr bt cao nht va chuyn vo thanh ghi c ng thi chuyn vo bt thp nht pj p

CF

~*

V d: AL l s dng 10001000 h Hex l 88h ta quay tri i 2 ln AL MOV ROL CL.2 ; np s ln dch vo CL AL, CL; BL quay vng tri 2 ln

Lc ny gi tr AL = 00100010 h thp phn l 22h 3.9. Lnh ROR C php: ROR ch, Count Chc nng: Quay vng phi cc bt ca ton hng ch i Count ln (gi tr Count c t trong thanh ghi CL, nu Count = leo th t trc tip vo ton hng ca lnh) mi ln quay gi tr bt thp nht chuyn vo thanh ghi c ng thi chuyn vo bt cao nht.

CF V d: BL l s dng 10001000 h hex l 88h ta quay vng phi i 3 ln BL 35

MOV ROR

CL, 3 ; np s ln dch vo CL BL, CL; BL quay vng phi 3 ln

Lc ny gi tr BL = 00010001 h thp phn l l l h 4. Nhm cc lnh vi xu k t 4.1. Lnh MOVSB(W) C php: MOVSB(W) Chc nng: Chuyn mt xu k t theo tng Byte hay theo tng Word t mt vng nh ngun c tr bi DS : SI sang vng nh ch c tr bi ES : DI sau mi ln chuyn mt byte hay mt t th gi tr ca SI v DI t ng tng ln (hoc 2) khi c hng DF = 0 hoc gim i (hoc 2) khi c hng DF = V d: Nu mun chuyn 2 byte u tin ca STRING1 n STRING2 chng ta c th thc hin cc lnh sau: MOV MOV MOV LEA LEA CLD MOVSB MOVSB 4.2. Lnh CMPSB(W) C php: CMPSB(W) Chc nng: So snh hai xu k t theo tng Byte (hay theo tng Word) nm 2 vng nh DS :SI v ES :DI tr n 2 xu k t sau mi ln so snh tng byte (hay tng Word) th gi tr ca SI v DI t ng tng ln l(hoc2) khi c hng DF = 0 hoc gim i (hoc 2) khi c hng DF = 36 AX,@DATA DS.AX ES,AX SI,STRING1 DI,STRING2 ;khi to DS ;v ES ;SI tr n chui ngun ;DI tr n chui ch ;xo DF ;chuyn byte u tin ;ri n byte th 2

V d chng ta c: .DATA STRING1 STRING2 MOV khi to DS MOV MOV CLD LEA LEA CMPSB CMPSB CMPSB 4.3. Lnh SCASB(W) C php: SCASB(W) Chc nng: So snh ni dung theo tng Byte (hay theo tng Word) ca vng nh c tr bi ES :DI vi ni dung ca thanh ghi AL (hoc AX). Sau mi ln so snh th gi tr DI t ng tng ln (hoc 2) khi c hng DF = 0 hoc gim i (hoc 2) khi c hng DF = . Kt qu s tc ng n gi tr c. V d nu chui: STRING1 DB 'ABC c nh ngha th cc lnh sau s kim tra xem 2 byte u ca chui c phi l ch ci 'B' hay khng MOV MOV CLD AX, @DATA ES, AX ;khi to ES ;x l t tri sang 37 SI, STRING1 DI, STRING2 DB DB AX, @DATA DS, AX ES, AX ;v ES ;X l t tri qua phi ;SI tr ti STRING1 ;DI tr ti STRING2 ;so snh byte u tin (A vi A) ;so snh byte th 2 (C vi B) ;so snh byte th 3 (D vi C) 'ACD' 'ABC

on lnh di y s so snh 3 byte ca 2 chui trn:

LEA MOV SCASB SCASB

DI, STRING1 AL, 'B'

;DI tr n chui STRING :kt ch ;duyt byte u tin ;duyt bvtc th 2

4.4. Lnh LODSB(VV) C php: LODSB(W) Chc nng: Chuyn ni dung theo tng Byte (hay theo tng Word) ca vng nh c tr bi DS :SI vo thanh ghi AL (hoc AX). Sau mi ln chuyn th gi tr SI t ng tng ln (hoc2) khi c hng DF = 0 hoc gim i (hoc 2) khi c hng DF = V d: c chui c nh ngha nh sau: STRING1 DB 'ABC on lnh di y ln lt np cc byte th nht, th 2 v th 3 vo trong AL MOV MOV LEA CLD LODSB LODSB LODSB 4.5. Lnh STOSB(W) C php: STOSB(W) Chc nng: Chuyn ni dung theo tng Byte (hay theo tng Word) ca thanh ghi AL (hoc AX) vo vng nh c tr bi ES :DI. Sau mi ln chuyn th gi tr DI t ng tng ln (hoc 2) khi c hng DF = 0 hoc gim i (hoc 2) khi c hng DF = V d v lnh STOSB, on lnh di y s lu 2 ch "A" vo chui STRING1: 38 AX, @ DATA DS, AX SI, STRING1 ;khi to DS ;SI tr ti STRING1 ;x l t tri sang phi ;npkt AvAL ;np k t B vo AL ;np k t c vo AL

MOV MOV LEA CLD MOV STOSB STOSB

AX, @DATA ES, AX DI, STRING1 AL, 'A' khi to ES DI tr n STRING1 x l t tri sang phi AL cha k t cn lu lu ch ci A lu ch A th 2

5. Nhm cc lnh r nhnh 5.1. Lnh CALL C php: Chc nng: 5.2. Lnh RT C php: Chc nng: 5.3. Lnh JMP C php: Chc nng: V d: MOV BX,0 JMP THOT 6. Cc lnh nhy c diu kin Chc nng: Thc hin vic nhy nu thoa mn iu kin (theo trng thi ca cc bt c) 6.1. Cc lnh nhy c du K hiu JG/JNLE Chc nng nhy nu ln hn iu kin nhy ZF = 0 v S = OF ;nhp 0 vo BX ;ri thot JMP nhn Nhy khng iu kin RT Quay v chng trnh gi chng trnh con CALL tn chng trnh con Gi chng trnh con

nhy nu khng nh hn hay bng 39

JGE/JNL JL/JNGE JNE/JNG

nhy nu ln hn hay bng nhy nu khng nh hn nhy nu nh hn nhy nu khng ln hn hay bng nhy nu nh hn hay bng nhy nu khng ln hn

SF = OF SFoOF ZF = hay SF = 0F

6.2. Cc lnh nhy khng du K hiu JA/JNBE JAE/JNB JB/JNAE JBE/JNA Chc nng nhy nu ln hn nhy nu ln hn hay bng nhy nu khng nh hn nhy nu nh hn nhy nu khng ln hn hay bng nhy nu nh hn hay bng nhy nu khng ln hn 6.3. Cc lnh nhy iu kin n K hiu JE/JZ JNE/JNZ JC JNC J0 JNO 40 Chc nng nhy nu bng nhy nu bng 0 nhy nu khng bng nhy nu khc 0 nhy nu c nh nhy nu khng nh nhy nu trn nhy nu khng trn CF = CF = 0 0F = OF = 0 ZF = 0 iu kin nhy ZF = CF = hay ZF = CF = iu kin nhy CF = 0 v ZF = 0 CF = 0

nhy nu khng nh hn hay bng

JS JNS JP/JPE JNP/JPO 7. Cc lnh l p

nhy nu du m nhy nu du dng nhy nu c chn nhy nu c l

SF= SF = 0 PF = PF = 0

Ch : Bc nhy ca cc lnh ny c iu kin khng vt qu 128 byte. 7.1. Lnh lp LOOP C php: LOP labcl Chc nng: Lp khi lnh t nhn lnh LOOP cho n khi gi tr ca c x = 0. M i khi thc hin xong mt vng lp gi tr c x t ng gim di . V d: XOR MOV LP: AL.AL CX.16 INC AL LOOP LP 7.2. LOOPZ/LOOPE label C php: LOOPZ/LOOPE label Chc nng: Lp khi lnh t nhn n lnh LOOPZ hoc LOOPE cho n khi gi tr ca c x = 0 v c Zero (ZF) bng 1. M i khi thc hin xong mt vng lp gi tr c x t ng gim i 1. V d: MOV MOV LP: INC CMP LOOPE BL, AH c x , 50 BL BL.10 LP ; Chuyn gi tr AH vo BL ; s ln lp cx=50 ; tng BL ln , BL=BL+1 ; BL=10? ; lp li cho n khi AL = 10 hoc m xong AL = 0 S ln lp bng 16 Tng AL ln , AL=AL+1 Lp li 16 ln, AL=16

7.3. LOOPNZ/LOOPNE label C php: LOOPNZ/LOOPNE label 41

Chc nng: Lp khi lnh t nhn n lnh LOOPN/. hoc LOOPNE cho n khi gi tr ca c x 0 v c Zero (ZF) bng 0. M i khi thc hin xong mt vng lp gi tr c x t ng gim di . V d: MOV MOV LP: INC CMP 7.4. Lnh REP C php: REP MOVSB Chc nng: Tc dng lm cho lnh chuyn mt chui (MOVSB) c thc hin n ln, vi s ln c t trong cx. V d: chuyn mt chui STRING1 = 'HANOI' vo chui STRING2. s k t trong chui STRING1 l 4, ta c th lm nh sau: CLD LEA SI.STRINGl LEA DI,STRING2 MOV REP vo chui 2. cx,4 MOVSB ;np chui lvo SI ;np chui 2 vo DI ;np s ln lp vo c x ;lp cho n khi chuyn ht k t t chui BL.AH CX.50 BL BL.10 khuyn gi tr AU vo BL ;s ln lp cx=50 ;tng BL ln , BL=BL+1 ;BL=10 ? ;lp li cho n khi AL = 10 hoc m xong

LOOPNE LP

8. Nhm cc lnh cn li 8.1. Lnh ngt mm INT C php: INT s ngt (s dng HEXA) Chc nng: Thc hin ngt mm V d: s dng ngt 21 nhp mt k t t bn phm MOV INT 42 AH.l 21h

8.2. Lnh IRET C php: IRET Chc nng: Tr v chng trnh chnh (chng trnh kch hot n) sau khi thc hin chng trnh con phc v ngt. Tc dng vo cc bt c: o D T s z A p c

8.3. Lnh C php: Chc nng: o

CLC CLC Xa gi tr c nh CF v O.CF = 0 D T s z A p c 0

8.4. Lnh C php:

CMC CC

Chc nng: o gi tr hin thi ca c CF o 8.5. Lnh C php: Chc nng: o D STC STC a gi tr c CF ln .CF = D T s z A p c T s z A p c

43

8.6. Lnh C php:

CLD CLD

Chc nng: Xa gi tr c hng DF v O.DF = 0. Lnh ny nh hng thao tc theo chiu tin v bn phi cho cc lnh lin quan n chui. o D 0 8.7. Lnh Cyhp: Chc nng: o STD STD a gi tr c DF ln l.DF = D 8.8. Lnh C php: Chc nng: 0 CU Chi Xa gi tr c cho php ngt IF v O.IF = 0 D 0 8.9. Lnh C php: Chc nng: 0 STI STI a gi tr c IF ln l.IF = D T s z A p c T s z A p c T s z A p c T s z A p c

44

Cu h i n tp 1. Cho bit cc s thp phn di y u l dng d liu byte, word a. 32767 C.65255 b.-128 d.-128 2. Cho bit cc s hexa-decimal sau l k t no trong bng m ASCII a.42h b.12 c.39h d.127 3. Hy cho bit khi b vi x l ly ni dung (d liu) t mt ngn nh trong b nh th ni dung (d liu) c cn tn ti trong ngn nh hay khng? 4. B vi x l 8088 c bao nhiu thanh ghi 16 bt? v cc thanh ghi no di y c kh nng tch ra thnh hai thanh ghi 8 bt? a.AX b.DS C.BP d.cx 5. Thanh ghi c ca 8088 c bao nhiu bt c s dng? bt v tr th su l bt c no? 6. B vi x l 8088 nh a ch b nh t 00-FFFFFh, chng trnh ngt c t v tr no trong on b nh trn? 7. Cc hm no di y ca ngt 21h hin k t ra mn hnh MOV AH,1 MOV AH,2 MOV AH,4Ch INT 21h INT 21h INT 21h 8. Hy ch ra cc on m lnh sau ch a ch no? MOV AX,[BX+5] MOV DI.AX MOV MOV DX.BX AX,[SI]+5 MOV CX.100 CX,[BX][SI]+5 MOV AL,[BX] MOV MOV [1272h],cx 9. Hy cho bit mi lnh di y l hp l hay khng hp l, trong W1 v W2 l cc bin WORD;B1,B2 l cc bin BYTE. a. MOV DS, AX b. MOV DS, 100h c. MOV DS, ES d. MOV W1,DS e. XCHG W1,W2 45

f. SUB g. ADD h. ADD i. MOV

5, BI BI, B2 AL, 256 W1, BI

Bi tp 1. Ch dng cc lnh MOV, ADD, SUB. INC, C v NEG hy dch cc dng lnh gn ca ngn ng bc cao sau y sang hp ng vi A, B. c l cc bin kiu word. a. A=B-C b.A = -(C + 2) c. c = A + B d. B = 3 * B + 7 e. B = B - A - 1 2. Vit cc lnh thc hin cc cng vic sau y: a. BX = 1 + 2 + 3 + 4 +9. b. AX = 100 + 95 + 90 +5. 3. Cho bit ni dung ca AX.DX khi cc lnh sau l hp l v c thc hin: a. MUL BX trong AX cha 0002h v BX cha 0006h b. MUL BX trong AX cha 00FFh v BX cha 1000h c. IMUL cx trong AX cha 0002h v cx cha FFFFh d. IMUL BIN trong AX cha 0002h v BIN cha FFFFh e. IMUL 20h trong AX cha FFE0h 4. Cho bit ni dung mi ca AX, AL. AH v DX sau mi lnh v hin tng trn c th xy ra khng? a. DIV BX trong DX cha O O O O h , AX cha 0008h v BX cha 0003h b. DIV BX trong DX cha O O O O h , AX cha FFFEh v BX cha 0010h c. IDIV BX trong DX cha FFFFh, AX cha FFFCh v BX cha 0003h d.DIV BL trong AX cha O O O D h , BL cha 03h e.lDIV BL trong AX cha FFFDh, BL cha FEh 5. Thc hin cc php tnh logic sau y: a. 10101111 AND 10001001 46

b. 10110001 OR 01001001 c. 01111100 XOR 11011010 d. NT 01011110 6. Vit cc lnh logic thc hin cc cng vic sau y: Xoa cc bt v tr chn ca AX, gi nguyn cc bt khc. Thit lp cc bt Isb v msb ca BL trong khi gi nguyn cc bt khc. o bt msb ca BL. gi nguyn cc bt khc. Thay ni dung ca bin word 1 bng s b 1 ca n. 7. Gi s AL cha 11001011b v CF = 1, cho bit ni dung mi ca AL khi mi lnh sau c thc hin. iu kin u ng cho tt c phn ca cu hi. a. SHL A U b. SHR A U c. ROL AL.CL trong CL cha 2 d. ROR AL.CL trong CL cha 3 e. SAR AL.CL trong CL cha 2 f. RCL A U g. RCR AL CL trong CL cha 3 8. Gi s SI cha 100h byte 100h cha 10h DI cha 200h byte 101h cha 15h AXcha4142h byte 200h cha 20h DF = 0 byte 201 h cha 25h Hy cho bit ton hng ch, ton hng ngun v cc gi tr c chuyn trong mi lnh sau y, ng thi cho bit gi tr mi ca SI v DI. a. MOVSB b. MOVSW c. STOSB d. S T O S V V e. LODSB g. LODSW 9. Gi s c cc khai bo sau y: 47

STRING1 DB TGHU' STRING2 DB ABCDE' DB 5 DUP(?) Hy vit cc lnh chuyn STRING1 vo cui STRING2 to ra chui "ABCDEFGHIJ". 10. Hy s dng cc ch a ch trong chng 10 vit nhng lnh tng ng vi cc lnh thao tc chui di y. Gi s rng nhng ch cn thit SI cha offset ca chui ngun v DI cha offset ca chui ch ng thi DF = 0. Cc bn c th dng AL lm vng nh trung gian. i vi cc lnh SCASB v CMPSB cc c phi phn nh kt qu ca php so snh. a. MOVSB b.STOSB c. LODSB d. SCASB

48

Chng 2 LP TRNH BNG HP NG

. GI I THI U HP NG 1. C php ca h p ng Chng trnh hp ng bao gm cc dng lnh. Mt dng lnh l mt lnh m trnh bin dch s dch ra m my, hay l mt hng dn bin dch ch dn cho trnh bin dch thc hin mt vi nhim v c bit no . M i lnh hay hng dn bin dch thng c 4 trng: Tn Ton t Ton hng ; Li bnh Cc trng phi c phn cch nhau bng t nht mt k t trng hay TAB. Cng khng bt buc phi sp xp cc trng theo ct nhng chng nht nh phi xut hin theo ng th t nu trn. v d: Lp: MOV AH, ,-Nhp mt k t t bn phm. Trong v d ny, trng tn l nhn Lp, ton t l MOV, ton hng l AH v , li bnh l 'nhp mt k t t bn phm'. V d: v hng dn bin dch: Cong2so PROC Cong2so l tn v ton hng l PROC. Dn hng bin dch ny khai bo mt chng trnh con c tn Cong2so. 1.1. Trng tn Trng tn c s dng lm nhn lnh, cc tn th tc v cc tn bin. Chng trnh bin dch s chuyn cc tn thnh cc a ch b nh. Cc tn c th c chiu di t n 31 k t, c th cha cc ch ci, ch s v cc k 49

t c bit ( ? _ $ % ) . Khng c php chn du trng vo gia mt tn. Nu s dng du chm (.) th n phi ng u tin. Cc tn c bt u bng mt ch ci. Chng trnh bin dch khng phn bit ch hoa v ch thng trong tn. V d cc tn hp l: HANO @_VIDU Lu : cc tn khng hp l: - cha mi khoang trng - bt au bcmg mt 1.2. Trng ton t Trong mt lnh, trng ton t cha m lnh dng tng trng. Chng trnh bin dch s chuyn m lnh dng tng trng sang m lnh ca ngn ng my. Tng trng ca m lnh thng biu th chc nng ca cc thao tc. V d nh: MO V, ADD, SUB. Trong mt hng dn bin dch, trng ton t cha ton t gi. Cc ton t gi s khng dch ra m my m n gin chng ch bo cho trnh bin dch lm mt vic g . Chng hn ton t gi PROC to ra mt th tc. 1.3. Trng ton hng i vi mt lnh, trng ton hng xc nh d liu s c cc thao tc tc ng ln. Mt lnh c th khng c, c hoc 2 ton hng. V d: 7VOT-"
>

CKL

- du c\\w\ khng phoi l k t n tin

kh^C fon \\v\C, kkK\g lm C\ c. mt +ocm hng/ t H < " vo ni tiu ria BX. ka ton Ung, kui to cx =10.

Ty&C- 3^c MOV o., 10

Trong mt lnh hai ton hng, ton hng u tin gi l ton hng ch. N c th l mt thanh ghi hc mt nh, l ni cha kt qu. Ton hng th hai l ton hng ngun. Cc lnh thng khng lm thay i ton hng ngun. 50

1.4. Trng li gii thch Ngi lp chng trnh thng s dng trng li gii thch ca mt dng lnh gii thch dng lnh lm ci g. M u trng ny l mt du chm phy (;) v trnh bin dch b qua mi ci c nh du vo sau du chm phy ny. Hp ng l ngn ng bc thp cho nn ta hu nh khng th hiu c mt chng trnh vit bng hp ng nu khng c li bnh. Khng nn vit nhng iu qua r rng nh: MOV cx,0 ;chuyn vo cx. Thay vo , ta nn s dng cc li gii thch t cc ch th vo trong ng cnh ca chng trnh: MOV cx,0 2. Cc bin Trong hp ng cc bin c vai tr ging nh trong cc ngn ng bc cao. M i bin c mt kiu d liu v c chng trnh gn cho mt a ch b nh. Cc ton t gi nh ngha s liu. M i ton t gi c th c dng thit lp mt hay nhiu d liu ca kiu c a ra. Trong phn ny chng ta s dng DB v D W nh ngha to nn mt byte cc bin kiu byte v cc bin kiu word. 2.1. Cc bin kiu byte Dn hng nh ngha mt bin kiu byte ca trnh bin dch c dng sau y: Tn V d: TONG DB 4 Vi dn hng ny, Hp ng s gn tn TONG cho mt byte nh v khi to n gi tr 4. Mt du chm hi (?) t v tr ca gi tr khi to s to nn mt byte khng c khi to. V d: TONG DB ? 51 DB gi_tr_khi_to Trong ton t gi DB c hiu l "nh ngha byte" ;khi to vng lp c x = 0

Gii hn thp phn ca cc gi tr khi to nm trong khong t -128 n 127 vi kiu c du v t 0 n 255 vi kiu khng du. Cc khong ny va ng gi tr ca mt byte. 2.2. Cc bin kiu word Dn hng nh ngha mt bin kiu word ca trnh bin dch c dng sau y: Tn BIEN1 BIEN2 BIEN3 D W D W D W D W gi_tr_khi_to ? -8 16 Ton t gi DW c ngha l "nh ngha word". V d:

Ging nh vi bin kiu byte mt du chm hi v tr gi tr khi to c ngha l word khng c khi to gi tr u. Gii hn thp phn ca gi tr khi to c xc nh t -32768 n 32767 i vi kiu c du v t 0 n 65535 i vi kiu khng du. 2.3. Cc bin mng Trong ngn ng hp ng, mng ch l mt chui cc byte nh hay Word. V d nh ngha mng 3 byte c tn MANG vi cc gi tr khi to l 5h, lOh, 15h chng ta c th vit: MANG DB 5h,10h,15h Tn MANG c gn cho byte u tin, MANG+1 cho byte th hai v MANG+2 cho byte th ba. Nu nh trnh bin dch gn a ch offset 0400h cho MANG th b nh s nh sau: Phn t MANG MANG+ MANG+2 V d: 52 MANG D W a ch 04Oh 0401h 0402h 100,72, 48, 54 Ni dung 5h lh 15h

Cc bin mng word c th c nh ngha mt cch tng t.

S to nn mt mng c 4 phn t vi cc gi tr khi to l 100, 72, 48, 54. T u tin c gn vi tn MANG, t tip theo gn vi MANG+2, r i n MANG+4 v.v. Nu mng bt u ti 07F0h th b nh s nh sau: Phn t MANG MANG+2 MANG+4 MANG+6 a ch 07F0h 07F2h 07F4h 07F6h Ni dung lOd 72d 48d 54d

Khi chng t a k h i u cc ph n t c a mng v i cng mt g i t r t a d i n g t o n t DUP t r o n g l n h . v d : MI M2 DB DB 50 100 DUP(l) DUP(?)

V d t r n nh ngha b i n mng MI gm 50 b t e t r o n g b nh c g i t r khi u b ng v mt b i n mng M2 gm 100 b y t e t r o n g b nh nhng g i t r khi u cha c . Cc chui k t Mt chui k t c th c khi to bng mng cc m ASCII. V d: TBAO TBAO DB DB 'HELLO' , OAh, ODh,' $' 48h,45h,4Ch,4Ch,4Fh,Ah,ODh,24h tng ng vi: 3. Cc h ng c tn to ra cc m lnh Hp ng d hiu, ngi ta thng dng cc tn tng trng biu di n cc hng s. EQU Tn V d: LF EQU OAh 53 (EQates: c o i nh b n g ) . EQU h ng_s gn tn cho hng, chng ta c th s dng ton t gi EQU. C php:

s gn tn LF cho OAh. l m ASCII ca k t xung dng. Tn LF c th c dng thay cho OAh ti bt c u trong chng trnh. Trnh bin dch s dch cc lnh: MOV v: MOV DL,LF ra cng mt ch th my. l i . CU TRC CA MT CHNG TRNH HP NG Phn khai bo Segment n gin .MODEL kiu .STACK .DATA Khai bo bin .CODE Nhn: mov AX,@DATA mov DS,AX thn chng trnh ln (tnh theo byte) DL,OAH

lnh tr v DOS [ cc chng trnh con] (nu c) END Nhn 1. Lnh i u khin Segment 1.1. Lnh iu khin .STASK C php: .STACK kch thc ngn xp Chc nng: Xc nh kch thc ngn xp (tnh theo Byte). Vi lnh ny DOS s xc lp a ch u ca ngn xp v gi tr c ghi vo thanh ghi on ss. 54

1.2. Lnh iu .CODE C php: .CODE Chc nng: nh du im khi u ca vng nh cha m lnh. 1.3. Lnh iu khin .DATA C php: .DATA Phn khai bo v gn gi tr ban u ca cc bin nh Chc nng: nh du im khi u ca vng nh cha s liu. 1.4. Lnh iu khin .MODEL C php: .MODEL kiu b nh (Tiny, Small, Medium, Compact, Large, Huge) Chc nng: Xc nh m hnh b nh cho mt Module Assembly s dng tp lnh iu khin Segment n gin. Tiny: C phn m my ca chng trnh (CODE) phn d liu (DATA) cng nm trong mt Segment 64KB. C CODE v DATA u l NEAR. Small: Phn m my ca chng trnh (CODE) c th ln hn 64KB phn d liu (DATA) cng nm trong mt Segment 64KB. C CODE v DATA u l NEAR. Medium: Phn m my ca chng trnh (CODE) nm trong mt Segment 64KB phn d liu (DATA) cng nm trong mt 64KB. CODE l FAR phn DATA l NEAR. Compact: Phn m my ca chng trnh (CODE) nm trong mt Segment 64KB phn d liu (DATA) cng nm trong mt vng nh ln hn 64KB. CODE l NEAR v DATA l FAR. Large: Phn m my ca chng trnh (CODE) v phn d liu (DATA) nm trong mt vng nh ln hn 64KB. CODE v DATA l FAR. Mt trng s liu khng vt qu 64KB. Huge: Phn m my ca chng trnh (CODE) v phn d liu (DATA) nm trong mt vng nh ln hem 64KB. CODE v DATA l FAR. Cho php trng s liu vt qu 64KB. 55

V d: Hy vit mt xu k t 'XIN CHAO CC BAN!' ra mn hnh. Cch gii: Dng chc nng hin mt xu k t kt thc bng du $ ra mn hnh. Chc nng th 9 ca hm ngt int 2lh ca DOS cho php chng ta hin mt xu k t kt thc bng $ ra mn hnh nu DS : DX cha a chi SEG:OFFSET ca bin xu. Do vy chng trnh s nh sau: .MODEL small .STACK .DATA Thao db 'XIN CHAO CC BAN!$' ; Khai bo bin xu k t .CODE Program : mov AX,@DATA mov DS,AX . mov DX,OFFSET Thao mov AH,9 im im 21 h 21h mov AH,4Ch END Programl 2. Chng trnh con-Th t c Khi vit chng trnh ngn ng bc cao, ta thng chia chng trnh thnh cc Modul c lp v c gn kt vi nhau bi li gi ca chng trnh chnh. Trong hp ng cng vy, cc chng trnh con y chi l cc th tc vi khai bo nh sau: 2.1. Khai bo th tc C php khai bo mt th tc 56 ;a phn a chi SEGMENT ca phn ;on d liu vo thanh ghi segment DS ;DX cha phn a chi OFFSET ;Gi hm-hin xu k t ;Hin xu k t Thao ra mn hnh ;Kt thc chng trnh tr v DOS lOOh

Tn

PROC type RT

;...cc lnh trong th tc Tn ENDP

Tn: l tn ca th tc do ngi vit nh ngha type: Ton hng tuy chn l: - NEAR: Dng lnh gi th tc cng on vi th tc - FAR : Dng lnh gi th tc trong mt on khc 2.2. Cc lnh th tc CALL-RET Lnh CALL c dng gi mt th tc. C php nh sau: CALL Tn trong Tn l tn ca th tc do ngi lp trnh t. tr v t mt th tc chng ta dng lnh RT, mi th tc ngoi tr th tc chnh u phi c lnh RT cui th tc. 2.3. V d v chng trnh con Trnh by chng trnh cng 2 s gm 2 phn t chc theo kiu chng trnh chnh v chng trnh con. Hai phn ny truyn tham s vi nhau thng qua nh dnh cho bin (thanh ghi ngoi). TITLE CT: ADD2SO .MODEL SMALL -STACK lOOh .DATA TBAO DB Soi So2 .CODE Program3: 57 DB ? DB 7 'HAY VO 2 so NG UYN $'

Tong DB 7

MOV AX,@Data MOV DS,AX MOV AH,9 LEA DX,TBAO INT INT 21h 21h MOV AH 1 MOV Sol,AL MOV DU',' MOV AH,2 INT im MOV CALL MOV INT CONG MOV ADD ADD RT CONG END Endp Program3 21h 21h So2,AL CONG AH,4Ch 21h Proc AL,Sol AL,So2 Tong,AL MOV AH,1

; khi to DS ; hm hin thng bo ; np a ch ni dung thng bo vo DX ; hin thng bo ; hm c k t Soi ; c 1 k t ; ct m ca Soi ; du phy xen gia ; hm hin k t ra mn hnh ; hin k t Soi ra mn hnh ; hm c k t ; c k t So2 ; Ct m ca So2 ; gi th tc cng 2 s ; tr v DOS ; chng trnh con cng hai s ; ly m Soi ; cng vi m So2 ; a gi tr tng vo bin Tong ; lnh tr v chng trnh chnh ; kt thc chng trnh con ; kt thc chng trnh chnh

HI. CC BC TO V CHY CHNG TRNH 1. Ci t chng trnh dch mt chng trnh c vit bng Assemler c th chy c, chng ta phi dch v lin kt to ra tp c ui .EXE hoc ui .COM. Mun lm 58

c iu t nht chng ta cn hai tp ti thiu l MASM.EXE (chng trnh dch Assembler) v LINK.EXE (chng trnh thc hin vic lin kt). Hai tp ny chng ta c th nhn c bng hai cch: Cch 1: Nu c b a ci t MASM6 (gm mt a CD 3,68MB), cc bc tin hnh s nh sau -a a vo a D(E) v tin hnh ci t: D:\>MASM6\SETUP.EXE s hin ra: v nh <ENTER> th trn mn hnh

Microsot MASM 6.0 SETUP Phn gii thiu v hng

Press ENTER to continue, CTRL+C to EXIT n ENTER tip tc Sau khi ci t chng ta s c cc tp chnh sau trong danh mc MASM: BIN,HELP,INCLUDE,INIT,SAMPLES MASM.EXE LENK.EXE Cch 2: Nh cp trn l dch v lin kt mt chng trnh c vit bng ngn ng Assemly, chng ta ti thiu phi c hai tp th cch d nht l sao hai tp trn mt my no c ci t tp MASM.EXE v LINK.EXE vo my ca chng ta. 2. Cc b c th c hin chng trnh Hp ng Mun thc hin mt chng trnh Assembly trn my PC v cc my tng thch chng ta phi tin hnh theo trnh t sau: 59 ... chng trnh dch Macro Assembler ... chng trnh lin kt v chy

Bc 1: Vo Ne nh lnh EDIT, hay vo PASCAL, NOTEPAD (trong Window) son tho chng trnh sau ghi li tp. tp ny phi gn i .ASM V d: Baitap.asm Bc 2: Vo MASM .EXE sau nh tn tp (Baitap) dch tp ASM ra m my di dng tp .OBJ, nu trong bc ny chng trnh bo l i c php th ta phi quay li bc sa li chng trnh gc. V d: Chng tnh b l i c php gi d nh ngha chui k t kiu DB nhng ta nh thiu l D dng th 6 chng trnh my s thng bo sau: BAITAP.ASM (6): error A2105: 0 Warning Errors Severe Eor (l i nghim trng) Nu chng trnh khng b l i my thng bo nh sau: 49280+403165 Byte symbol spece free 0 \Varning Errors 0 Severe Error Bc 3: Vo LINK.EXE nh tn tp (Baitap) dch chng trnh tp.OBJ sang tp.EXE chy. Bc 4: Nu chng trnh gc vit ra l dch ra kiu .COM th ta phi dng chng trnh EXE2BIN ca DOS dch tip tp .EXE ra tp chng trnh chy c vi ui .COM Bc 5: Cho chy chng trnh va dch IV. CC CU TRC LP TRNH c BN THC HI N BNG HP NG 1. Cu trc tu n t L mt cu trc thng dng v n gin nht. Trong cu trc ny cc lnh c sp xp tun t, lnh n tip lnh kia. Sau khi thc hin xong lnh cui cng th cng vic cng c hon tt. 60 Expeeted instruction, directive or label 49278+4011117 Byte symbol spece free

ng php:

Lnh Lnh 2

Lnh n V du : A: B*13 + 10 Mov AX, B AX = B Mov BL, 13 BL = 13 MuL BL ADD AX,10 Mov A,AX 2.1. Cu trc IF- Then Thut ton: IF iu kin THEN thc hin lnh END_IF - iu kin l biu thc - Kim tra iu kin, nu ng thc hin lnh, nu sai khng thc hin lnh m thot ra V d: Nhp k t t bn phm, kim tra nu khng l phm ENTER th cho hin k t ra mn hnh, sai thot v DOS on chng trnh vit di dng ASSEMBLY nh sau: MOV AH,1 INT21H CMP AL,0DH JE THOT ;Nhpkt ;Kim tra k t ;L phm enter? thot 61 AX = B*13 AX = B*13 + 10 A = AX = B*13 + 10

2. Cc cu trc r nhnh

MOV AH,2 MOV DL,AL INT21H THOT: MOV AH,4Ch INT21h

;Khng, hin k t

2.2. Cu trc IF- Then - Else Thut ton: IF iu kin ng THEN thc hin lnll ELSE thc hin l END_IF V d: Nhp im thi nu ln hn 5, thng bo khng phi thi li. Khc i thng bo thi li .DATA Thao Db Tbao2 Db .Code CT: MOV ah.l Int 21h Cmp AL,'5' JL Tbao2 Mov AH,9 LEA DX.Tbaol INT21h JMP END_IF Tbao2: Mov AH,9 LEA DX,TB2 INT21h 62 ;hin thng bo 2 ;nhp im ;Nu im <5 ;nhy n thng bo 2 ;khc i hin thng bo 'Thi Dt $' 'Thi Lai $'

;nhy thot

END_IF Mov AH,4Ch INT21h CT ;thot v DOS

END

2.3. Cu trc Case Thut ton: Case l cu trc a nhnh dng tng qut nh sau: Case pht biu gi tr 1: dng lnh gi tr 2: dng lnh 2 gi tr n: dng lnh n EndCase V d: - Vit on chng trnh bit bn sinh nm con g - Nhp s d nm sinh khi chia ht cho 12 - Hin thng bo cho bit bn sinh nm con g .DATA TB1 TB2 TB3 TB4 TB5

DB DB DB DB DB

'ban 'ban 'ban 'ban 'ban

sinh nam sinh nam sinh nam sinh nam sinh nam

THAN: ','$' DU: ','$' TUAT: ','$' HOI: ','$' TY: ','$'

CODE CT: MOV AX,@DATA MOV DS,AX MOV AH,1 INT21H

;Khi to on d liu DS ;gi hm nhp k t t bn phm ;nhp k t

CMPAL/O' JET1 CMPAL/r JET2 CMPAL/2' JE T3 CMPAL/3' JET4 MOV AH,9 LEA DX,TB5 INT 21h Tl:MOV LEA DX.TBl INT 21h JMP THOT :: MOV AH,9 LEA DX,TB2 INT 21h JMP THOT : MOV AH,9 LEA DX,TB3 INT 21h JMP THOT : MOV AH.9 LEA DX,TB4 INT 21h THOT: MOV AH.4CH INT 21H AH.9

;so snh vi k t 0 ;bng th nhy n thng bo 1 ;so snh vi k t 1 ;bng th nhy n thng bo 2 ;so snh vi k t 2 ;bng th nhy n thng bo 3 ;so snh vi k t 3 ;bng th nhy ti thng bo 4 ;gi hm hin thng bo 5 ;np a ch thng bo 5 vo DX ;hin thng bo 5 ;gi hm hin thng bo 1 ;np a ch thng bo 1 vo DX ;hin thng bo 1 ;sau r i thot ;gi hm hin thng bo 2 ;np a chi thng bo 2 vo DX ;hin thng bo 2 ;sau ri thoi ;gi hm hin thng bo 3 ;np a ch thng bo 3 vo DX ;hin thng bo 3 ;sau ri thot ;gi hm hin thng bo 4 ;np a chi thng bo 4 vo DX ;hin thng bo 4 ;thot v DOS

64

3. Cc cu trc l p 3.1. Vng l p FOR-DO y l cu trc lp m s ln lp bit trc thut ton nh sau: For s ln lp Do Cc lnh END_FOR thc hin vng lp For trong Assembly cn s dng thanh ghi c x cha s ln lp v lnh LOOP. u tin khi to gi tr c x bng s ln, lp sau lp cc lnh cho n khi c x = 0. Cu trc lnh nh sau: XOR c x , c x MOV cx,s ln lp nhn: Thn cc lnh LOOP nhn V d: Hin mt dng 60 k t '*' ra mn hnh on m lnh nh sau: XOR c x , c x MOV cx,60 MOV AH,2 MOV DL,'*' LP: INT 21H LOOP LP 3.2. Vng lp WHILE-DO y l cu trc lp m ph thuc vo mt iu kin WHILE iu kin Do Cc lnh 65 ;s ln lp c x = 0 ;CX = 60 ;gi hm hin k t ra mn hnh ;np k t * vo DL ;hin ;lp cho n khi hin ra 60 k t *

END_WHILE iu kin c kim tra u vng lp nu iu kin ng cc lnh c thi hnh v lp cho n khi iu kin sai th thot ra ngoi vng lp. V d: Vit cc lnh m s k t trong mt dng. - Khi to b m c x - c mt k t - Kim tra k t <> k t ENTER Do - m = m +1 - c mt k t - Kt thc vng lp on m lnh nh sau: XOR c x , c x MOV AH,1 INT21H LP: CMP AL,0DH JE THOT INCCX INT21H JMP LP THOT: 3.3. Vng lp REPEAT-UNTIL Cc dng lnh c thi hnh sau mi kim tra iu kin. Nu iu kin ng vng lp kt thc. Cu trc lnh nh sau: REPEAT Cc dng lnh UNTIL iu kin 66 ;so snh k t va nhp c phi l phm enter hay khng? ;nu ng th nhy ti THOT ;Tng c x ln ;nhp tip k t vo t bn phm ;nhy ti LP ;khitoCX = 0 ;gi hm nhp mt k t t bn phm ;nhpmtkt

V d: Hy nhp cc k t. Gp k t A th kt thc. on m lnh nh sau: MOVAH,l LP: INT21H ;gi hm nhp mt k t ;nhp mt k t

CMP AL,'A' ;khng phi k t A JNE LP THOT: V. CHNG TRNH .EXE V .COM 1. Khung ca chng trnh hp ng d dch ra chng trnh .EXE T cc khai bo cc on ca chng trnh ni trn ta c th xy dng mt khung tng qut cho cc chng trnh hp ng vi kiu kch thc b nh nh. Sau y l mt khung cho chng trnh hp ng ri sau khi c dch v ni trn my IBM PC s to ra mt tp chng trnh chy c ngay vi ui .EXE. .MODEL Small .STACK lOOh .DATA ; cc nh ngha cho bin v hng ti y .CODE Nhn: ;khi u cho DS,ES MOV AX,@Data MOV DS,AX MOV ES,AX ; cc lnh ca chng trnh chnh ti y ; tr v DOS dng hm 4CH ca INT 21h MOV AH,4Ch 67 ;nhp tip

INT 21h ; cc chng trnh con (nu c) ti y END Nhn Khi mt chng trnh .EXE c np vo b nh. DOS s to ra mt mng gm 256 byte ca ci gi l on mo u chng trnh (program segment prefix, PSP) dng cha cc thng tin lin quan n chng trnh v t n vo ngay pha trc phn b nh cha m lnh ca chng trnh. DOS cng a cc thng s lin quan n chng trnh vo cc thanh ghi DS v ES. Do vy DS v ES khng cha gi tr a ch ca cc on d liu cho chng trnh ca chng ta. chng trnh c th chy ng ta phi c cc lnh sau khi u cho thanh ghi DS (hoc c ES na nu cn): MOV AX,@Data MOV DS,AX MOV ES,AX ;nu khng c n t h b trong @Data l tn ca cc loi d liu. Data nh ngha bi hng dn chng trnh dch, chng trnh dch s dch tn @Data thnh gi tr s ca on d liu, ta phi dng thanh ghi AX lm trung gian cho vic khi u DS, thanh ghi AX cng c th c thay bng cc thanh ghi a nng khc. Sau y l v d ca mt chng trnh hp ng c vit dch ra chng trnh vi ui .EXE V d: Vit chng trnh nhp vo s h 10 t bn phm. .MODEL SMALL .STACK lOOh .DATA TB1 TB2 CODE Programl: MOV AX,@DATA 68 DB DB 'NHP VO MT so HE 10: ','$' 0AH,0DH,'SO HE lo VUA DOC NHP: ','$'

MOV DS,AX MOV ES.AX BATDAU: XOR c x , c x XOR BX,BX LEA INT INT DX,TB1 21H 21H MOV AH,9 MOV AH,1 CMP AL, '-' JE AM CMP JMP AM: MOV c x , l DUONG: INT LP: CMP AL,'0' JNGE KPSO CMP AND AL,'9' AX,000Fh JNLE KPSO PUSH AX MOV AX.10 21H AL,'+' LP JE DNG

;khi to DS ;khi to ES ;CX = 0 ;BX = 0 chuyn a ch ni dung thng bo vo DX hin ln mn hnh hin thng bo ln mn hnh ;hm nhp vo mt k t ;nhp k t t bn phm ;so snh k t nhp c phi l du m hay khng? ;ng th nhy n AM So snh k t nhp c phi l du dng hay khng? ;ng nhy n DUONG ;khc i nhy n LP ;CX = ;tip tc nhp mt k t ;so snh k t > 0? ;sai nhy n KPSO ;so snh k t < 9? ;sai nhy n KPSO ;i k t ra s ;Ct vo Stack ;AX = 10 69

POPBX ADD BX,AX MOV AH,1 INT21H CMP AL,0DH JNE LP MOVAX,BX OR c x , c x JE THOT NEG AX THOT: PUSH AX JMP HIENLAI KPSO: MOV AH,2 MOV DL,0AH INT21H MOV DL,0DH INT21H LEA DX.TB2 MOV AH,9 INT21H JMP BATDAU HIENLAI: LEA DX,TB2 MOV AH,9 INT 21H POP AX

;ly gi tr t Stack chuyn vo BX ;BX = AX + BX ;gi hm nhp mt k t ;nhp k t ;K t nhp c phi l phm ENTER? ;BX cha s h lo ;CX = 0? ;Nu ng th thot ;i du AX ; Ct gi tr AX vo ngn xp ; nhy n hin li ; hm hin k t ; a m v u dng vo DL ; v u dng ; a m xung dng vo DL ; xung dng ; np a ch thng bo vo DX ; gi hm hin chui k t ; hin thng bo 2 ; nhy n BATDAU ;np a ch thng bo 2 ;gi hm hin thng bo 2 ;hin thng bo 2 ;ly li h s 10

OR JNL

AX,AX S_CHIA

;AX<0 ;Sai, S_CHIA ;Dung, ct AX ;DL cha du tr(-) ;gi hm hin du tr(-) ;hin du tr (-) ;ly li AX ;AX = -AX ;khi to cx = 0 ;BX = 10 ;DX = 0 ;chia gi tr trong AX cho 10 ;cat so du ;tng c x ln ;AX=0? ;SAI, L_CHIA ;gi hm hin k t ;ly s d ;i ra k t ;ri hin ra mn hnh ;lp li ;thot tr v DOS

PUSH AX MOV DU'-' MOV AH,2 INT21H POP AX NEG AX S_CHIA: XOR c x , c x MOV BX,10D L_CHIA: XOR DX,DX DIV BX PUSH DX INC c x OR AX,AX JNE L_CHIA MOV AH,2 HIN: POP OR DX DL,30H

INT21H LOOP HIN MOV AH,4CH INT21H END Programl

2. Khung ca chng trnh hp ng dch ra ch ng trnh .COM Nhn vo khung chng trnh hp ng dch ra tp chng trnh ui .EXE ta thy c mt y cc on. Trn my tnh IBM PC ngoi tp chng trnh vi ui .EXE, chng ta cn c kh nng dch chng trnh hp ng c kt cu thch hp ra mt loi tp chng trnh chy c kiu khc vi ui .COM. y l mt chng trnh ngn gn v n gin hn nhiu so vi tp chng trnh ui .EXE, trong cc on m, on d liu v on ngn xp c gp li trong mt on duy nht l on m. Nh vy nu ta c cc ng dng m d liu v m chng trnh khng yu cu nhiu v khng gian ca b nh, ta c th ghp lun c d liu, m chng trnh v ngn xp chung vo mt trong cng mt on m r i to ra tp .COM. Vi vic to ra tp ny khng nhng ta tit kim c thi gian v b nh khi cho chy chng trnh m cn tit kim c c khng gian nh khi phi lu tr n trn a. c th dch c ra chng trnh ui .COM th chng trnh ngun hp ng phi c kt cu sao cho thch hp vi mc ch ny. Sau y l khung ca mt chng trnh hp ng dch c ra tp chng trnh ui .COM. .Model T i n . Code ORG l h s t a r t : J MP nhn ; c c n h ngha cho b i n v h ng t i y Nhn: ;cc lnh ca chng trnh chnh ti y INT 20H END s t a r t V d: Chng trnh hin th mt thng bo ln mn hnh. .MODEL Tiny .CODE 72 / T r v DOS (nu c) t i y ; c c chng t r n h con

ORG lOOh START: JMP TB1 DB LEA INT INT END CTRINH 'XIN CHAO CC BAN ! $' DX/TB1 21H 20h ;ly a ch thng bo ;hm hin th chui ;hin li cho -vi DOS START CTRINH: MOV AH,9

Cu h i n tp 1. Tn no trong cc tn sau y l hp l trong hp ng cho IMB PC? a. TWO_WORD b. ?1 c. Two_word d. .@? e. $145 . LET'S_GO g.T=. 2. Hy nu ton t gi nh ngha d liu cho cc bin v hng sau y nu nh chng hp l: a. Mt bin kiu word c khi to vi gi tr 52. b. Mt bin kiu word WORD1, khng c khi to. c. Mt bin kiu byte B c khi to vi gi tr 52h. d. Mt bin kiu byte C1 khng c khi to. e. Mt bin kiu word WORD2 c khi to vi gi tr 65536. f. Mt mng kiu word c khi to vi 5 gi tr u nguyn (t 1 n 5). g. Mt hng BEL bng 07h. h. Mt hng MSG bng THIS IS A MESSAGE $'. 73

Bi tp 1. Hy vit cc lnh thc hin cc cng vic sau y (khng phi l chng trinh y ): a. c mt k t v hin th n ln mn hnh. b. c mt ch thng v hin th di dng ch hoa ra mn hnh. c. Tinh tng ca dy s t nhin t 1-10 d. Nhp vo mt ch ci v kim tra c phi l ch A hay khng e. Nhp vo mt s nh hn 10 nu khng phi l s th yu cu nhp li f. Nhp vo hai s (nh hn 10) v so snh s no ln hn th cho hin ra mn hnh. 2. Vit mt chng trinh thc hin cc cng vic sau y: a. c hai ch s thp phn c tng nh hn 10. b. Hin th cc s vi tng ca chng vi dng thng bo tng ng V d: 2,7 .Tng ca 2 v 7 l 9. 3. Hy vit mt chng trnh thc hin cc cng vic sau y: a. a ra thng bo cho ngi s dng. b. c cc ch ci tn ca mt ngi. c. Hin th chng ln lt ra mn hnh. 4. Vit mt chng trnh c mt ch s hex trong khong (A-F) ri hin th n trn dng tip theo dng nh phn 5. Vit mt chng trinh hin th mt bng 10x10 in y du '*'. 6. Vit mt chng trinh thng bo cho ngi s dng vo mt k t, in ra trn cc dng lin tip nhau m ASCII ca k t di dng nh phn. V d: nh vo mt k t : A M ASCII ca A di dng nh phn l 01000001 7. Vit chng trnh thng bo cho ngi s dng nh vo mt k t v in ra m ASCII ca k t di dng hex dng tip theo. Lp li cho n khi ngi s dng nh NTER. V d: nh vo mt k t: z M ASCII ca z di dng hex l 5A nh vo mt k t: nu l Enter th thot 8. Vit chng trnh thng bo cho ngi s dng nh vo mt s hex nh hn hay bng 4 ch s. a ra s di dng nh phn dng k tip. Khi ngi s dng a vo mt k t khng hp l, thng bo h vo li. 74

Chng 3 LIN K T ASSEMBLY V I N G N N G PASCAL

C hai cch lin kt gia ngn ng Pascal v Assembly: Cch 1: Chn cc khi lnh Assembly vo chng trnh c vit bng ngn ng Pascal - inline Assembly. y l phng php kh n gin v nhanh v vi t khoa asm v c kt thc bng end; chng ta c th d dng a mt khi cc lnh ca Assembly vo gia cc dng lnh ca Pascal. Tuy nhin phng php ny c mt s hn ch m chng ta s cp phn sau. Cch 2: Vit tch bit cc module: -bng ngn ng Pascal, v -bng Assembly. sau tin hnh dch v lin kt chng li vi nhau. So vi cch , cch ny s phc tp hn cho ngui lp trnh, song s trnh c nhng nhc im m cch gp phi. . ASSEMBLY TRONG PASCAL Trong phng php ny, chng ta t cc lnh Assembly vo cc dng trong chng trnh c vit bng ngn ng Pascal ti ni no m chng ta thy cn thit. Dng tng qut ca Assembly trong chng trnh vit bng Pascal nh sau: asm khi cc lnh Assembly end; M i khi chng trnh dch ca Pascal gp t khoa asm trong dng lnh 75

Assembly th chng trnh dch s chuyn dng lnh Asembler ny vo v dch vi vic quy chiu bin Pascal ra dng tng ng ca Assembly thc hin. Chng ta hy xem xt c ch lin kt theo cch ny thng qua mt v d n gin. V d : Hy vit chng trnh nhp t bn phm mt s v ct vo mt bin bng Pascal, sau gim gi tr ca bin i bng Assembly v hin mn hnh bng Pascal vi tn tp l vidu.pas . PROGRAM baitap uses Crt; var x: integer; BEGIN clrscr; write ( 'Hay vo gia tri cua x: '); read (x); asm mov AX, x; c AX; mov X, AX; end; writeln ( 'Kt qua cua X la : \x); readln; END. Tin hnh dch nh sau: tpc vidu.pas nh <ENTER> Pascal gp t khoa asm v lc ny bin X ca Pascal s c chuyn sang bin tng ng ca Assembly v c t vo thanh ghi AX. Ni mt cch ngn gn l t khoa asm cho php chng ta nht bt k mt dng lnh Assembly vo chng trnh ang c vit bng ngn ng Pascal. 76

Cch lin kt ny kh n gin, song v th cng c mt s hn ch: - Cc lnh ca Assembly c "dch nh" qua chng trnh dch ca Pascal. - Cc lnh nhy ca Assembly ch c th nhy n cc nhn Pascal, c ngha l lnh nhy ch c th thc hin t Assembly ra phn ngn ng Pascal ch khng cho php theo chiu ngc li v cng khng cho php cc lnh nhy trong lng phn Assembly - ni mt cch ngn gn khng cho php t nhn nhy trong phn Assembly. V d: asm jz c end; Thot: Trng hp ny l cho php v nhn thot l nhn Pascal nm trong phn ngn ng Pascal. asm jz c Thot: end; Trng hp ny l khng cho php v nhn Thot l nhn ca Asembly nm trong cc phn lnh Assembly. Lu : Lnh gi chng trnh con CALL khng th coi l lnh nhy, do vy cc ton hng i sau lnh CALL c th l tn ca hm Pascal hoc cc nhn Assembly, song nht thit khng th l nhn Pascal. li Thot CX; Thot CX;

l i . VIT TCH BIT NHIU MODUL (trn nhiu tp) RING L Cng nh s lin kt gia ngn ng Pascal v Assembly, cch thng dng trong vic lin kt gia cc chng trnh vit bng ngn ng Pascal v Assembly l vit hon ton tch bit nhiu modul ring l trong ngn ng Pascal v Asembly, tin hnh dch cc modul theo tng modul mt v sau lin kt nhng modul ny li vi nhau trc khi cho chy. V nh vy chng ta s c c mt tp thc hin c (ui .exe) bng cch trn cc tp c vit bng ngn ng Pascal v Assembly. Vit tch bit cc modul ra vi nhau rt c li cho cc chng trnh c s lng lnh Assembly ln v trong trng hp ny c th s dng ton b kh nng ca chng trnh dch MASM v cho php chng ta vit v dch phn chng trnh Assembly ca chng ta trong mi trng thun ty Assembly ch khng phi "dch nh" bi t khoa asm trong Pascal. Khng nhng th phng php ny gip chng ta trnh c nhng nhc im m Assembly vp phi. Tuy vy thc hin c s lin kt theo cch ny, ngi lp trnh cho modul ca Assembly phi tun theo tt c cc vn lin quan n segment, chuyn i thng s, cc quy chiu n cc bin ca Pascal, s bo tn cc bin, thanh ghi.... 1. Nhng vn c n gii quyt Sau y chng ta tm hiu cc lnh iu khin cn thit cho s lin kt gia Pascal v Assembly: 1.1. Vn NEAR, FAR v lnh iu khin dch Turbo Pascal cha nhiu segment m lnh nn n c th thm nhp (gi) cc th tc ca hm vi NEAR v FAR. NEAR CALL s dng thm nhp vo cc chng trnh con nm trong cng segment vi chng trnh gi n. FAR CALL s thm nhp vo cc chng trnh con bt k ni no trong vng nh. Turbo Pascal s t ng chn cch gi thch hp da vo khai bo ca th tc theo quy c sau: Cc chng trnh con c khai bo phn interace ca Unit lun l FAR sao cho chng c th c gi t cc Unit khc cn cc chng trnh 78

con c khai bo trong chng trnh chnh hoc phn implementation ca Unit s l NEAR. Song v mt l do no th chng trnh con cng c th yu cu FAR. lm c iu ny, chng trnh dch Turbo Pascal c trang b lnh iu khin dch $F (compiler directive). Cc chng trnh cn c dch vi khai bo |$F+| l FAR, cn {$F-| s quay v quy c trn. 1.2. Vn lin kt thng tin gia Turbo Pascal vi Assembly C hai vn mu cht lin kt thng tin gia Turbo Pascal vi Asembly. l lnh iu khin lin kt ($1) v khai bo PUBLIC, EXTERNAL, EXTRN. - Lnh iu khin {$1 tn tp.OBJ bo cho chng trnh dch ca Turbo Pascal tm n tp c th ghp c v tin hnh lin kt tp vi chng trnh ca Pascal (tn tp bao gm c ng dn). Chng trnh c lin kt bng cc module ca Pascal v Asembl cng l chng trnh a tp do phi thoa mn cc yu cu v khai bo nhn (tn bin, tn hm...) gia cc module vi nhau m c th l: Trong cc module vit bng Assembly phi: - Khai bo PUBLIC trc nhng nhn (tn bin ton cc, tn hm...) m cc tp khc cng s dng n bng c php sau: PUBIC tn nhn , tn nhn 2, khai bo nhn (xc nh kch c) V d: Vi tn nhn l bin nh: PUBLIC valuel value2 PUBIC SUM valuel, value2 DB BW SUM PROC 79 10 ?

Vi tn nhn l tn hm:

cc lnh trong thn hm SUM ENDP - Khai bo EXTRN trc nhng bin ngoi c tp ny dng n vi c php sau: EXTRN tn nhnl : kiu, tn nhn! : kiu... V d: Vi tn nhn l bin nh : EXTRN

xi : BYTE, x2 : WORD

Vi tn nhn l tn hm : EXTRN f l : PROC Trong module vit bng ngn ng Pascal phi: - Khai bo external i vi cc nhn ngoi c module ny dng n vi c php sau: tn nhnl, tn nhn2,.... : kiu; external; (i vi bin) untion tn_hm: kiu; external; (i vi hm) procedure tn_th_tc; external; (i vi th tc) - Vic khai bo PUBIC l khng cn thit. c th dng chung cc bin gia cc module ca Pascal v Assembly khi lin kt vi nhau, ngoi phn khai bo PUBIC v EXTERNAL, chng ta cng nn lu n s tng thch v kiu khai bo d liu theo bng sau : Kiu khai bo Kiu khai bo d d liu trong Pascal liu trong Assembly byte BYTE word WORD shortint BYTE integer WORD real FWORD single DOWRD double QWORD extended TBYTE 80

comp pointer

QWORD DWORD

phn no minh ha cho nhng vn trn, chng ta hy xem xt v d n gin sau: Tnh tng ca dy s nguyn dng khi cho bit s u tin v s lng s cn tnh. 2. Cc bin dng chung c khai bo ton cc Trong phng php ny, cc bin c dng chung trong cc module ca Pascal v Assembly phi c khai bo l bin ngoi, c ngha l trong module ca Pascal cc bin ny c khai bo ngoi tt c cc hm v trong module ca Assembly chng c khai bo trong DATA segment. Chng ta thy r iu ny qua v d trc trong vic tnh, trong hai bin soluong (c khai bo l bin ngoi trong .DATA segment ca module Assembly). V d: Hy vit chng trnh tnh trung bnh cng hai s nguyn vi s phn cng sau: Module Pascal thc hin cc nhim v sau: - Nhn hai s nguyn t bn phm, - Gi chng trnh con tnh trung bnh cng do Assembly vit, - Hin gi tr trung bnh cng ra mn hnh. Module Assembly: Chng trnh con tnh trung bnh cng hai s nguyn. th hin c ch chuyn giao tham s khc nhau gia chng trnh gi (Pascal) v chng trnh con (Assembly), bi tp ny chng ta s vit chng trnh theo ba cch: Bi gii: Ba tham s {soi, soi, v flag) u chuyn giao thng qua vic khai bo bin ton cc (khai bo PUBLIC v EXTERNAL). Tn hm Assembly s mang gi tr phn nguyn (lm trn di) ca trung bnh cng. Phn chng trnh Pascal: PROGRAM TBC; 81

uses Crt; var soi, so2, flag: integer; ($F+) unction Average: integer : external; {$L C:\USER\f2.0BJ I ($F+-) BEGIN flag: = 0 clrscr; write ( ' Hay vo so thu nht: ' ); readln (soi); write ( ' Hay vo so thu hai : ' ); readln (so2); write (' Trung binh cong 2 so nguyn la : ', (0.5*flag + Average): 5:1); readln; END. Phn chng trnh con Assembly: .MODELlarge .DATA EXTRN sol:WORD, so2:WORD, flag:WORD .CODE PUBIC Average Average PROC mov AX, soi mov BX, so2 add AX, BX sar AX, jnc LI mov flag, LI: ; Trc khi quay v AX cha phn nguyn rt ; (lm trn di) ca trung bnh cng Average ENDP END 82

Bi tp 1. Hy vit chng trnh nhn mt s nguyn t bn phm, sau tng ln 1 v hin s tng ra mn hnh, trong phn tng gi tr thc hin bng Assembly. Cn phn nhp v hin ra mn hnh c vit bng Pascal. 2. Hy vit chng trnh so snh hai s nguyn vi s phn cng nh sau: Module Pascal thc hin cc nhim v sau: - Nhp hai s nguyn t bn phm, - Gi chng trnh con so snh hai s do Assembly vit, - Hin gi tr s b ra mn hnh. Module Assembly: Vit chng trnh con so snh hai s 3. Hy vit chng trinh tnh trung bnh cng hai s nguyn vi s phn cng sau: Module Pascal thc hin cc nhim v sau: - Nhp hai s nguyn t bn phm, - Gi chng trnh con tnh trung bnh cng do Assembly vit. - Hin gi tr trung binh cng ra mn hnh. Module Assembly: Vit chng trnh con tnh trung bnh cng hai s nguyn. 4. Hy vit chng trnh tnh n! vi n t 0 - 7 (gii hn trong 1 thanh ghi 16 bt). Module Pascal thc hin cc nhim v sau: - Nhp s n t bn phm, - Gi chng trnh con tnh n! do Assembly vit, - Hin kt qu giai tha ra mn hnh. Module Assembly: Vit chng trinh con tnh giai tha. 5. Hy vit chng trnh tnh tng dy s nguyn vi s phn cng nh sau: Module Pascal thc hin cc nhim v sau: - Nhp vo s lng ch s t bn phm, - Hin cc s va nhp - Gi chng trnh con tnh tng do Assembly vit, - Hin gi kt qu tng ra mn hnh. Module Assembly: Vit chng trnh con tnh tng s nguyn

Chng 4 C C BI T O N LP T R N H

. CC BI TON PHN S HC Bi tp Hy vit chng trnh tnh tng ca dy s t nhin khi bit s u v s lng ch s. Thut ton cho vic tnh tng ca dy s t nhin nh sau: n gin ta n nh s u l v s lng ch s l lo 1. Khai bo s u, s lng s t nhin v tng s 2. Np s lng s t nhin cn tnh tng vo c x 3. Np s u tin vo thanh ghi AX 4. Tng = AX 5. Gim s ln lp sau mi ln tnh tng 6. Tng s t nhin tip theo 7. Cng s vo tng 8. Lp li t u cho n khi ht s t nhin cn tnh Bi gii: .MODEL small -STACK 100 h .DATA so_dau so_luong 84 DW DW 10

TONG .CODE Programl: mov mov mov mov mov c add loop mov im Bi tp 2: AX,@data DS,AX

DW

;a a ch (phn segment) ;ca vng d liu vo DS ;a s ln lp vo c x ;AX = gi tr u ;TONG bng gi tr s u ;Tr s ln lp i ;s t nhin tip theo ; TONG =AX ;Lp cho n khi c x = 0 ;Kt thc chng trnh quay v DOS

cx, so_luong AX, so_dau TONG, AX cx TONG.AX LP AH,4Ch 21h

LP: inc AX

END Programl Hy vit chng trnh tnh giai tha ca 5 (5 !) bng hai cch: to tp -EXE v .COM Bi gii: y u bi yu cu tnh giai tha ca 5 l s c n nh trc, ta u bit 51 = 1 x 2 x 3 x 4 x 5 chnh l tch ca dy s t nhin t - 5, do c chng trnh sau: a. Cch vit chng trnh to ra tp dng .EXE: .MODEL small .STACK lOOh .DATA Tch so DW DW ? ? 85

.CODE Program2: mov mov mov mov mov LP: mov mui mov inc loop mov im END Program2 b. Cch vit chng trnh to ra tp .COM: .MODEL Tiny . CODE ORG lOOh Program2: jmp Start Tch so Start: mov mov mov 86 Tch, so,2 cx,4 DW DW ? ? AX,@data DS,AX Tch, so,2 cx,4 AX.Tich so Tich.AX so LP AH,4Ch 21h ;khi to DS ;Tich=l ;so = 2 ;S ln dch cx = 4 ;AX = ;AX = 1 x 2 ;Tich = AX ;so = so + ;Lp li n khi c x = 0 ;Thot tr v DOS

LP: mov mui mov inc loop int AX,Tich so Tich,AX so LP 20h ; tr v DOS chng trnh dng .COM

END Program2 Bi tp 3: Hy vit chng trnh thc hin vic nhn t bn phm mt s nguyn dng nh hn 65535 (gii hn ca 16 bt) vi quy nh kt thc vic vo mt s bng cch n phm ENTER (m ASCII l Od h). Thut ton nhp cc s thp phn nh sau: Khai bo bin nh Khai bo bin nh S = 0 REPEAT c mt ch s ASCII i k t ra s nh phn S = S X 10 + gi tr va nhp ct S vo bin UTIL K t nhp l phm ENTER Bi gii: .MODEL small .STACK 100H .DATA SO .CODE , 87 DW 0 ; s cha s nhp

Program3 : mov mov xor mov LP: mov im cmp J'E sub mov mov mui add mov jmp THOT: mov im AH,1 21h AL,0Dh THOT AL,30h CL,AL AX,SO BX AX,CX SO,AX LP AH,4Ch 2lh ; tr v DOS ; k t va nhn l ENTER ? ; ng thot ; chuyn s dng ASCII thnh s ; tm ct s va vo thanh ghi CL ; li gi tr vo trc ra AX ; nhn vi 10 ; cng gi tr vo trc vi s va vo ; ct li vo bin so ; ch nhn t bn phm 1 k t AX,@data DS, AX cx,cx BX,0Ah ; xoa c x = 0 ; cho gi tr BX = 10 ; Khi to DS

END Program3 Bi tp 4: Hy vit chng trnh tnh tng i s ca hai s c u vi s th nht gi tr l lOh, s th hai l-2(82h) Bi gii: .MODEL small .STACK lOOh 88

DATA SH1 SH2 TONG .CODE Program4: mov mov mov mov and mov mov and cmp jz mov sub jnc xchg LI: sub jmp L2 : add L3: and jnz BL,BL L4 ; xt c phi tng l 0 ; khng phi th nhy 89 BL,CL L3 BL,CL ; cng du th cng hai gi tr tuyt i AX,@data DS,AX BL,SH1 BH,BL BX,807fh CL,SH2 CH,CL cx,807f h BH,CH L2 AL,BL AL,CL LI BX,CX ; i hai s' cho nhau (c du v gi tr tuyt i) ; CH cha du ca SH2, CL cha [SH2] ; so snh du hai s ; cng du th nhy n L2 ; trng hp khc du ; tr hai gi tr tuyt i cho nhau ; BH cha du ca SH1, BL cha [SH1] DB DB DB lOh 82h ? ; s hng 2 l -2

mov jmp L4: or mov KETTHUC: mov int END Bi tp 5:

TONG.O KETTHUC BL,BH TONG,BL AH,4Ch 21h Program4

; tng l 0, trnh trng hp c du -

; gp du vo kt qu tng

; tr v DOS

Hy vit chng trnh con-a mt s h thp phn ra mn hnh Thut ton cho vic a ra s thp phn IF 2. THEN AX<0 /* AX cha gi tr cn a ra*/

3. In ra du m 4. Thay ni dung ca AX bng s b ca n. 5. END_IF 6. Ly dng biu di n thp phn cc ch s trong AX 7. i cc ch s ny thnh cc k t r i a chng ra mn hnh. Bi gii: OUTDEC PUSH AX PUSH BX PUSH c x PUSH DX OR JGE AX,AX NHAY ;AX<0? ;NO,>0 ;Ct s cn a ra PROC ;ct cc thanh ghi

PUSH AX 90

MOV MOV INT POP NEG NHAY:

DL,'-' AH,2 21H AX AX

;Ly k t '-' ;Hm hin k t m ra mn hnh ;Indu'-' ;ly li AX ;i du AX

;Ly ra cc ch s thp phn XOR DX,DX ;CX m cc ch s thp phn MOV LP: XOR DIV PUSH INC OR JNE MOV HIN: POP OR INT LOOP POP POP POP POP BX.10D DX,DX BX DX cx AX,AX LP AH,2 DX DL,30H 21H HIN DX cx BX AX ;BX cha s chia ;chun b word cao cho s b chia ;AX = thng s, DX = s d ;ct s d vo ngn xp ;m = m + ;Thng s = 0 ;Khng!, tip tc ;Hm con in k t ;Ch s trong DL ;i n thnh k t ; In ra mn hnh ;Lp li cho n khi xong ;Phc hi cc thanh ghi

RT OUTDEC ENDP

l i . BI TON V CHUI Bi tp 1: Hy vit chng trnh c v lu mt chui k t Bi gii: DOC_S PROC ;c v lu mt chui ;Vo: ;Ra: DI cha a ch offset ca chui DI cha a ch offset ca chui PUSH PUSH CLD XOR MOV INT WHILE1: CMP AL, ODH ;K t Enter ? ;ng! Kt thc ;Backspace? ;Khng! Lu n vo chui ;ng!,li con tr chui ;Gim b m s k t nhp c ;v c k t khc ;Lu k t vo chui BX ;Tng b m s KT JE END_WHILE1 ;Nu k t l Backspace CMP JNE ;Th C
D E C

;BX cha s k t nhp c AX DI ;X l t bn tri sang phi BX,BX AH, 21H ;S k t nhp bng 0 ;Hm c mt k t ;c k t vo AL

AL,08h ELSE1 DI
B X

JMP ELSE1: STOSB


I N C

READ

READ: 92

INT JMP END_WHILE1: POP POP RT DOC-S ENDP Bi tp 2:

21H VVHILEl DI AX

;c k t vo AL ;v tip tc vng lp

Hy vit chng trnh kt hp hai xu k t li v hin ra mn hnh (hai xu k t u c kt thc bng 0). Bi gii: . MODEL small . STACK . DATA Stringl String2 String3 . CODE Program2: mov mov cld Lea mov Lea Lea StringlLoop : lodsb ; np k t ca Stringl vo AL 93 DI, String3 ES, DI DI,String3 SI, Stringl ; DS:SI tr n Stringl AX, @data DS, AX ; theo chiu tng ca a ch ; ES:DI tr n xu k t gp DB DB DB 'Hello,',0 'world $',0 50 DUP(?) 200h

and jz stosb jmp DoString2 : mov String2Loop : lodsb stosb and jnz mov mov int mov int END Program2 Bi tp 3:

AL, AL DoString2 StringlLoop

; dng cc c ; 0 th nhy (kt thc Stringl) ; ct k t ca String vo v ui xu

SI, OFFSET String2; DS:SI tr n String2 ; np k t ca String2 vo AL ; ct vo v tr xu k t gp AL, AL String2Loop AH, 9 21h AH, 4Ch 21h ; tr v DOS ; dng cc c ; cha bng 0 th tip tc in ; xu k t gp ra mn hnh

DX, OFFSET String3

Hy vit chng trnh nhp vo mt chui ch ci hoa, i chui ra ch thng v hin ra vi chiu ngc li, m v thng s lng s ch b trong chui. Bi gii: .MODEL SMALL .STACK 100H .DATA TB1 TB2 TB3 94 DB DB DB 'Hay go vo mt chui chu cai hoa: ','$' 0Ah,0Dh,'Chuoi da doi thanh chu thuong va xp nguoc: ','$' 0Ah,0Dh,'So chu A: ','$'

CODE Program3: MOV AX,@DATA MOV DS,AX MOV ES,AX XOR cx,cx XOR BX,BX MOV AH,9 LEA INT NHP: MOV AH,1 INT CMP JE CMP JNE INC CT: OR INC JMP THOI: MOV AH,9 LEA DX,TB2 ;hm hin chui ;np a ch thng bo 2 AL,20h cx NHP ;i thnh ch thng ;Ct vo Stack ;CX = c x + ;Nhy v NHP PUSH AX 21h AL,0DH THOI AL,'B' CT BX ;hm nhp k t ;nhp k t ;K t l phm Enter ? ;Dung nhy THOI ;k t nhp l 'B' ;Sai nhy ti CT ;Dung tng s k t 'B' ln DX,TB1 21h khi to on d liu DS khi to on d liu ES ;CX = 0 ;BX = 0 gi hm hin thng bo nhp chui ;np a ch thng bo ;hin thng bo

INT HIN: POP MOV MOV INT MOV LEA INT MOV XOR MOV LP: DIV INC XOR OR JNE MOV HIEN_B: POP OR MOV INT

21H AX DL,AL AH,2 21H AH,9 DX,TB3 21H AX,BX cx,cx BL.10D BL cx AH,AH AL.AL LP AH,2 DX DH,30H DL.DH 21H

;hin thng bo 2 ;Ly k t ra t Stack ;a vo thanh ghi AI ;hm hin k t ;hin k t c ly ra t Stack ;lp cho n khi hin ht chui k t, c x = 0 ;hm hin chui . ;np a ch thng bo 3 ;hin thng bo 3 ;AX chua so chu 'b' ;CX = 0 ;BL cha s chia ;AH cha s d, AL cha thng ;Ct s d vo Stack ;CX = c x + ;Xa AH chia tip ;AL = 0? ;Chua, LP ;hm hin k t ;Ly li s d ;i thnh k t ;chuyn vo DL ; hin

LOOP HIN

PUSH AX

LOOP HIEN_B MOV INT END AH.4CH 21H Program3

;L p n khi c x = 0 ;thot tr v DOS

HI. BI TON V THIT B VO RA Bi tp 1: Hy vit chng trnh in ra my in mt xu k t (ASCII) c vo t bn phm. Kt thc vic vo xu bng phm Ctrl_z. Cch gii: Dng cc chc nng sn c ca BIOS hoc DC. Ngt im 7h ca BIOS cung cp ba chc nng cho php lm vic vi my in. Dng ba chc nng ny in mt xu k t ASCII ra my in. Trc tin, chng ta xem qua ba chc nng . In mt k t : CN Oh ca int 17h Vo Ra AH=0 ; AL cha k t cn in ; DX s ca my in AH trng thi ca my in

Khi ng cng my in : CN lh ca im 17h Vo Ra AH=1 ; DX s ca my in AH trng thi ca my in

Ly trng thi my in : CN 2h ca im 17h Vo Ra AH=2 ; DX s ca mv in AH trng thi ca my in

97

ngha cc bt ca byte trng thi: 7 6 5 4 3 2 1 0 xhua qu thi gian L 0:qu thi gian : l i vo/ra " 0:khng l i vo/ra :my in c ni L 0:my in cha c ni _ :ht giy L 0:cn giy - : nhn xong ^ 0:cha nhn xong r : my in sn sng 0:my in ang bn Cch gii: .MODEL Small .STACK .DATA Buff MI M2 M3 .CODE PS: mov mov lOOh db db db db 255 dup(?) 'Hay vo xu ky tu can in ra may in 0ah,0dh,T 'Qua thoi gian $'

AX,@DTA DS,AX

;Khi to cng my in mov DX,0 mov AH,1

DX cha s cng my in (0 - LPT1) Chc nng khi to cng my in ca ngai

BOS int 7h im 17h ;Nhp xu k t cn in a vo vng m Buff mov mov int lea or LP: mov im cmp je cmp je mov jmp LI: mov mov inc inc mov mov mov im AH,1 21h AL,lAh IN_XAU AL.ODh LI [SI],AL L2 AL,0Ah [SI],AL SI cx AL,0dh [SI],AL ;Nu k t va vo l Enter th ua thm vo Buff gi tr ca OAh (m LF-xung dng) SI tr n byte tip ca Buff Tng s lng k t vo ln a thm vo Buff gi tr Odh ; nhp mt k t t bn phm ; K t va vo c phi l Ctrl_z ;Nhy n phn in xu ra my in ;K t va vo c phi Enter? ;Nu phi th nhy n L I ;Cn khng th a k t vo vng m Buff AH,9 DX,OFFSET M I 21h SI,Buff cx,cx ; SI tr n byte u ca vng m Buff ; cx = 0 ; Hin thng bo M I

raov AH,9 DX,OFFSET M2 21h ;Quay u dng v xung hng trn mn hnh 99

i ne inc

SI cx

;Tr n byte tip ca Buff ;Tng s lng k t nhn ln 1 ;Nhy v nhn tip k t ;SI tr n byte u ca vng m Buff ;a mt k t vng m Bu vo AL ;Gi chng trnh con in k t AL ra my in ;SI tr n byte tip theo ca vng m Buff ;AL m ko trang giy ;a m ko trang giy ra my in ;Ch mt k t t bn phm ;V DOS

jmp LP ESLXAU: lea IN_RA: mov cu inc loop mov can mov int mov int AL,[SI] PRNT SI IN_RA AL,0Ch PRINT AH,1 21h AH,4Ch 21h SI,Buff

;Chng trnh con a mt k t ra my in ;Vo: AL cha mt k t cn in ra my in ;Ra: Khng PRINT PROC ;Ct byte k t AL vo ngn xp ;S ca my in ;Chc nng ly trng thi my in ca ;Ngt BIOS ht lil ;Tch bt th 7 xem liu my in sn sng push AX DX push AX BUSY: mov mov im and 100 DX,0 AH,2 17h AH,80h

jz pop mov mov int and jz mov mov im EXIT: pop rt PRINT

BUSY AX DX,0 AH,0 17h AH,1 EXIT AH,9

;My in bn th nhy; my in sn sng th tip tc ;Hi phc k t ngn xp vo AL ;S ca my in ;Chc nng a mt s k t ra my in ca ngt ;B0S int 17h ;Tch bt thp nht ca byte trng thi (Time Out) ;Cha qu thi gian th nhy ; Qu thi gian th hin dng thng bo

DX,OFFSET M3 21h DX ENDP AX

END PS Bi tp 2: Hy vit chng trnh in y mn hnh vi ch "A" mu trn nn xanh da tri. Cch gii: .MODEL SMALL .STACK .CODE MAIN PROC ;Cho DS tr ti trang hot ng. MOV AX,0B800h ;mu trang hin th MOV DS,AX MOV CX.2000 MOV DI,0 ;80 X 25 = 2000 Words ;KhitoDI loi 100H

;in y trang hin th FILL_BUF: MOV ADD DI, 1441 h Da ;A trn xanh da tri ;T tip theo

LOOP FILL_BUF ; Lp tip cho n khi xong ;Tr v DOS MOV INT MAIN END Bi tp 3: Hy vit mt chng trnh thc hin cc cng vic sau: 1. Thit lp ch hin th kiu 3 (vn bn mu 80 X 25) 2. Xoa ca s c gc tri trn ti ct 26 dng 8 v gc phi di ti ct 52 dng 16 thnh mu . 3. Chuyn con tr n ct 39, dng 12. 4. In ra mt ch A mu cyan, nhp nhy ti v tr con tr. Bi gii: .MODEL .STACK .CODE MAIN PROC MOV AH,0 MOV AL,3 INT lOh ;xo ca s vi mu MOV AH,6 102 ;hmch nch ;vn bn mu 80x25 ;chnch ;hm cun ln ;thit lp ch mn hnh SMALL 100H AH,4CH 21H ENDP MAIN

MOV CX,081Ah MOV DX,1034h MOV BH,43h MOV AL,0 INT ;dch chuyn con tr MOV AH,2 MOV DX,0C27h XOR BH,BH INT lOh ;hin th k t vi thuc tnh MOV AH,09 MOV BH,0 MOV BL,0C3h MOV c x , l MOV AL,"A" INT MOV INT MOV INT AIN lOh AH,1 21h AH,4Ch 21h ENDP END lOh

;gc tri trn (lAh,08h) ;gc phi di (34h,10h) ;k t cyan trn nn ;cun c mn hnh ;xo ca s ;hm chuyn con tr ;tm mn hnh ;trang 0 ;dch chuyn con tr ;hm hin th k t ;trang 0 ;k t cyan nhp nhy trn nn ;hin th mt k t ;ch "A" ;hin th k t

;tr v DOS MAIN

103

PH LC C C N G T C A BIOS V D O S

. CC NGT CA BIOS Ngt 10: Video Hm Oh: Chn ch hin th. Chn ch hin th mn hnh. Vo: AH=0 AL=kiu (xem bng 12.2) Ra: Hm l h Thay i kch thc con tr mn hnh. Chn dng qut bt u v kt thc ca con tr . Vo: AH=lh CH=dng qut u CL=dng qut cui Ra: Hm 2h Dch chuyn con tr . nh v con tr. Vo: AH=2h DH=dng DL=ct BH=trang Ra: 104 Khng. Khng. Khng.

Hm 3h Ly v tr v kch thc tc thi ca con tr . Nhn v tr tc thi v kch thc ca con tr Vo: Ra: AH=3h BH=trang DH=dng DL=ct CH=dng qut u CL=dng qut cui Hm 5h Chn trang hot ng. Vo: AH=5h AL=trang DH=dng DL=ct Ra: Hm 6h Cun mn hnh hay ca s ln. Cun c mn hnh hay ca s ln mt s dng xc nh. Vo: AH=6h AL=S dng cun (AL = 0 c ngha l cun c mn hnh hay ca s) BH=thuc tnh ca cc dng trng CH, CL=dng, ct gc tri trn ca ca s DH, DL=dng, ct gc phi di ca ca s Ra: Hm 7h Cun ca s v mn hnh xung. 105 Khng. Khng

Cun c mn hnh hay ca s xung mt dng xc nh. Vo: AH=7h AL=S dng cun (AL=0 c ngha l cun c mn hnh hay ca s) BH=thuc tnh ca cc dng trng CH, CL=dng, ct gc tri trn ca ca s DH, DL=dng, ct gc phi di ca ca s Ra: Hm 8h c k t v thuc tnh ti v tr con tr . Nhp k t ASCII ti v tr con tr v thuc tnh ca n Vo: Ra: Hm 9h Hin th k t v thuc tnh ti v tr con tr . Vit mt k t ASCII v thuc tnh ca n ti v tr con tr. Vo: AH=9h BH=trang AL=k t cx=s ln vit k t BL=thuc tnh (ch vn bn) hay mu (ch hoa) Ra: Hm Ah Vit k t ti v tr con tr . Vit mt k t ASCII ti v tr con tr. K t c thuc tnh ca k t trc v tr ny. 106 Khng. AH=8h BH=trang AH=thuc tnh AL=k t Khng.

Vo:

AH=OAh BH=S hiu trang AL=m ASCII ca k t cx=s ln vit k t

Ra: Hm OBh

Khng.

Thit lp bng mu, nn v vin. Chn bng mu, mu nn v mu vin. Vo: Chn mu vin v mu nn AH=0Bh BH=0 BL=mu Chn bng trn mu (ch 4 mu 320x200) AH=0Bh BH=1 BL=bng mu Ra: Hm OCh Vit im nh Vo: AH=0Ch AL=gi tr im nh BH=trang cx=ct DX=hng Ra: Hm ODh c im nh Nhn mt gi tr in nh. Khng. Khng

Vo:

AH=0Dh BH=trang cx=ct DX=hng

Ra: Hm OEh

AL=gi tr in nh

Vit k t trong ch nh telex. Vit mt k t ASCII ti v tr con tr sau dch chuyn con tr n v tr tip theo. Vo: AH=0Eh AL=m ASCII ca k t BH=trang Ra: BL=mu ni (ch hoa) Khng

Ch : khng n nh c thuc tnh ca k t. Hm Fh Ly ch mn hnh. Nhn ch hin th hin ti. Vo: Ra: AH=0Fh AH= s ct mn hnh AL=ch hin th BH=trang hot ng Hm lOh, hm con lOh: Thit lp thanh ghi mu. Thit lp cc thanh ghi mu VGA. Vo: AH=10h AL=10h BX=thanh ghi mu 108

CH=gi tr mu xanh l cy CL=gi tr mu xanh da tri DH=gi tr mu Ra: Khng Hm lOh, hm con 12h: Thit lp khi thanh ghi mu. Thit lp nhm cc thanh ghi mu VGA Vo: AH=10h AL=12h BX=thanh ghi mu th nht cx=s lng thanh ghi mu ES:DX=a chi segment:offset ca bng mu. Ra: khng Ch : Bng mu bao gm cc im nhp 3 byte tng ng vi cc gi tr mu , xanh l cy v xanh da tri cho mi thanh ghi mu. Hm Oh, hm con 15h: Ly thanh ghi mu. Nhn cc gi tr mu , xanh l cy v xanh da tri ca mt thanh ghi mu VGA. Vo: AH=10h AL=15h BX=thanh ghi mu Ra: CH=gi tr mu xanh l cy CL=gi tr mu xanh da tri DH=gi tr mu Hm 10, hm con 17h: Ly khi thanh ghi mu. Nhn cc gi tr mu . xanh l cy v xanh da tri trong mt nhm cc thanh ghi mu VGA. 109

Vo:

AH=10h AL=17h BX=thanh ghi mu th nht cx=s lng thanh ghi mu ES:DX=a ch segment:offset ca b m nhn bng mu

Ra:

ES:DX=a ch segment:offset ca b m

Ch : Bng bao gm cc im nhp 3 byte tng ng vi cc gi tr mu , xanh l cy v xanh da tri cho mi thanh ghi mu. Ngt l l h : ly cu hnh thit b. Nht t m hoa danh sch thit b. Vo: Ra: khng AX=t m hoa danh sch thit b. (cc bt 14-15= s my in c ci t, 13=modem bn trong, 12=b phi ghp tr chi, 9-ll=s cng ni tip, 8 d tr, 6-7=s a mm, 4-5= ch mn hnh khi to, 2-3= kch thc RAM h thng vi PC nguyn thy, 2 dng cho PS/2, 1= b ng x l ton hc, 0=a mm c ci t) Ngt 12h: Ly kch thc b nh quy c. Tr v tng kch thc ca b nh quy c. Vo: Ra: khng AX=kch thc b nh (theo KB)

Ngt 13h: Vo ra a. Hm 2h: c sector. no

c mt hay nhiu sector Vo: AH=2h AL=S sector CH=xi-lanh Cl=sector DH=u t DL= a (0-7Fh=a mm, 80h-ffh=a cng) ES:BX=a ch segment:offset ca b m Ra: Nu thnh cng: CF=xo AH=0 AL=S sector c c Nu khng thnh cng: CF=thit lp AH=m l i Hm 3h: Vit sector. Vit mt hay nhiu sector. Vo: AH=3h AL=S sector BX=thanh ghi mu th nht CH=xi-lanh CL=sector DH=u t DL= a (0-7Fh=a mm, 80h-FFh=a cng) ES:BX=a chi segment:offset ca b m) Ra: Nu thnh cng: CF=xo AH=0

AL=S sector c vit Nu khng thnh cng: CF=thit lp AH=m l i Ngt 15h: Ghi c bng t v cc c tnh cao cp ca T v PS/2 Hm87h: Chuyn kh i b nh m rng. Chuyn s liu gia b nh m rng v b nh quy c. Vo: AH=87h cx=s word dch chuyn Ra: ES:SI=a ch bng m t ton cc. Nu thnh cng: CF=xo AH=0 AL=S sector c dch chuyn. Nu khng thnh cng: CF=thit lp AH=m l i Hm 88h: Ly kch thc b nh rng. Nhn kch thc tng cng ca b nh rng. Vo: AH=88h Ra: AX=kch thc b nh m rng (theoKB) Ngt 16h: Bn phm Hm 0: c phm nhn. Vo: AH= 0 Ra: AL= m ACSII ca phm AH= m scan ca phm nhn 112

Hm ny chuyn gi tr phm nhn u tin trong b m bn phm vo AX. Nu b m trng, my tnh i ngi s dng nhn mt phm. Cc phm ACSII khng c hin th trn mn hnh. Hm trn y cung cp mt phng php kim tra phm chc nng. Nu AL = 0 c ngha l mt phm chc nng c nhn. chng trnh c th ly m scan trong AH nhn bit l phm chc nng no. V d: Dch chuyn n gc bn tri trn nu phm Fl c nhn, gc di nu l mt phm chc nng khc. Chng trnh s b qua nu bn nhn mt phm k t. Li gii: MOV AH,0 ;hm c phm nhn ;AL=m ACSII hoc O.AH=m scan INT 16h ;AL=0 (hm chc nng)? OR AL.AL ;khng, phm k t JNE EXIT :m scan Fl AH.3Bh CMP :ng n Fl JE Fl ; phm chc nng khc MOV DX,184Fh ;gc phi di ;n dch chuyn con tr CONTRO JMP Fl: ;gc tri trn XOR DX.DX CONTRO: MOV AH.2 ;hm chuyn con tr BH,BH ;trang 0 XOR ;dch chuyn con tr lOh INT EXIT: Hm 1: c v kim tra s sn sng ca phm ( nhn cha) Vo: AH=01h Ra: AH=m qut ca phm (ZF=0) AL=m ACSII cua phm (ZF=0) 113

Hm 2: c trng thi bn phm Shift hay kim tra trng thi mt s phm iu khin v mt s ch vo phm. Vo : AH=02h. Ra : AH=trng thi ca phm Shift vi cc bt trng thi sau: bt 7=1 : Phm Insert n bt 3=1 : Phm Alt n bt 6=1 : Phm Caps Lock n bt 5=1 : Phm Num Lock n bt 4=1 : Phm Scroll n Hm 3: t tc g phm t ng v thi gian tr. vo: AH=03h AL=05h BL=vn tc g t ng ti s : OOh - 30 ln/sec Olh - 26,7 ln/sec (k t/sec) OAh - 12,0 ln/sec lFh - 12.0 ln/sec BH=thi gian tr vi: Olh - 500 ms 02h - 750 ms 03h- 1000 ms Ra : khng s. Hm 5: Ghi vo b nh m Vo: AH=05h CH=m qut ca phm CL=m ASCII 114 bt 2=1 : Phm Cui n bt 1 = 1 : Dch tri n bt 0=1 : Dch phi n

Ra:

AL=00h ( ghi) AL=01h (b m y) Hm 10: c phm m rng Vo: AH=10h Ra: AH=m qut ca phm AL=m ASCII Hm l i : Trng thi ca phm m rng Vo: AH=llh Ra: ZF=1 khng c hnh ng ZF=0 c hnh ng AH=m qut ca phm AL=m ASCII Hm 12: Trng thi phm Shift ca bn phm m rng Vo: AH=12h Ra: AH=trng thi ca Shift vi cc bt trn y AL=trng thi ca bt m rng: bt 7=1: SysReqcn bt 6=1: Caps Lock c n bt 5=1: Num Lock c n bt 4=1: Scrollcn bt 3=1: AU bn phi c n bt 2=1: Crt bn phi c n bt 1=1: Alt bn tri c n bt 0=1: Crt bn tri c n Ngt 17h: my in Hm Oh: Vit k t ra my in.

Vo: AH=0h AL=k t DX=S hiu my in. Ra: AH=trng thi Bt Nu c thit lp. my in khng bn 7 my in chp nhn 6 ht giy 5 my in c chn 4 li vo/ra 3 khng s dng 2 khng s dng 1 qu thi gian 0 l i . CC NGT CA DOS Ngt 21h Hm Oh: Kt thc chng trnh. Kt thc vic thi hnh mt chng trnh. Vo: AH=0h cs= a ch on ca PSP Ra: khng Hm l h : Vo t bn phm. i c mt k t t thit b vo chun (tr khi c mt k t sn sng). sau a k t ti thit b ra chun v tr v m ASCII trong DL. Vo: AH=01h Ra: AL= k t t thit b vo chun Hm 2h: Hin th. a k t trong DL thit b ra chun Vo: AH=02h DL=k t Ra: khng 116

Hm 5h: In ra. a k t trong DL ra thit b in chun. Vo: AH=5h DL=k t Ra: khng Hm 9h: In chui a chui k t ra mn hnh Vo: AH=09h DS:DX=con tr n chui k t kt thc bng '$' Ra: khng Hm 2Ah: Ly ngy thng. Tr v ngay trong tun, thng, nm v ngy trong thng. Vo: Ra: AH=2Ah AL=ngy trong tun (0=c.nht, 6=T.by). cx=nam (1980-2099) DH=thng (1-12) DL=ngy (1-31) Hm 2Bh: Thit lp ngy thng. Vo: AH=2Bh cx=nm (1980-2099) DH=thng (1-12) DL=ngy (1-31) Ra: AL=00h, nu ngy hp l, FFh, nu ngy khng hp l. Hm 2Ch: Ly thi gian. Tr v thi gian: gi, pht, giy v phn trm ca giy. Vo: Ra: AH=2Ch CH=gi (0-23) CL=pht (0-59) DH=giy (0-59) DL=phn trm ca giy (0-99)

Hm 2Dh: Thit lp thi gian. Vo: AH=2Dh CH=gi (0-23) CL=pht (0-59) DH=giy (0-59) Ra: DL=phn trm ca giy (0-99) AL=00h nu thi gian khng hp l

FFh nu thi gian khng hp l. Hm 30h: Ly s hiu version ca DOS. Tr v s hiu version ca DOS. Vo: AH=30h Ra: BX=0000h cx=0000h AL=S chnh ca version (trc du chm) AH=S ph ca version (sau du chm) Hm 31h: Kt thc chng trnh v li thng tr. Kt thc chng trnh hin ti v dnh ra mt khi nh tnh bng paragraph. Vo: AH=31h AL=m tr v Ra: DX=kch thc b nh theo paragraph khng

Hm 33h: Kim tra Ctrl-Break Thit lp v ly trng thi BREAK (kim tra Ctrl-break) Vo: AH=33h AL=00h ly trng thi hin nay Olh thit lp trng thi hin ti DL=00h thit lp trng thi hin ti OFF =01h thit lp trng thi hin ti N DL=trng thi hin hnh (00h=0FF, 01h=ON)

Ra: 118

Hm 35h: Ly vector. Nhn a ch ca mt vector ngt. Vo: AH=35h AL=S hiu ngt Ra: ES:BX=con tr tr n thng trnh qun l ngt. Hm 36: Ly dung lng cn trng trn a. Tr v dung lng cn trng trn a (s cluster cha dng, s clustor/a, s byte/sector). Vo: AH=36h DL= a (0=mc nh, 1=A...) Ra: BX=S cluster kh dng DX=S cluster/a cx=s byte/sector AX=FFFFh nu a trong DL khng hp l, cc trng hp khc bng s sector trong mt cluster Hm 39h: To lp th mc con (MKDIR). To lp th mc con xc nh. Vo: AH=39h DS:DX=con tr n mt chui ASCIIZ Ra: AX=m l i nu c carry c thit lp. Hm 3Ah: Xa th mc con (RMDIR). Xoa th mc con cho trc. Vo: AH=3Ah DS:DX=con tr n mt chui ASCIIZ Ra: AX=m l i nu c carry c lp. Hm 3Ch: To lp mt nie (CREAT). To ra mt file mi hoc ct b file c cho c di bng 0 chun b vit. Vo: AH=3Ch DS:DX=con tr n mt chui ASCIIZ cx=thuc tnh ca file 119

Ra:

AX=m l i nu c nh c lp. Th 16 bt nu c nh khng c lp.

Hm 3Dh: M mt file. M mt file cho trc. Vo: AH=3Dh DS:DX=con tr tr n mt tn ng dn ASCIIZ AL=m truy nhp Ra: AX=m l i nu c nh c lp Hm 3Eh: ng mt th file. ng mt th file cho trc. Vo: Ra: AH=3Eh BX=th file tr v bi thao tc m hay to lp file AX=m l i nu c nh c lp. khng c ngha nu c nh khng c lp Hm 3Fh: c t mt file hay thit b. Chuyn mt s cho trc cc byte t mt file vo b m cho trc. Vo: AH=3Fh BX=th file DS:DX=a ch b m cx=s byte c Ra: AX=S byte vit m l i nu c nh c lp. Hm 41h: Xoa mt file trong mt th mc nht nh (UNLINK) Xoa mt im nhp th mc tng ng vi tn file Vo: Ra: AH=41h DS:DX=a ch ca mt ASCIIZ AX=m l i nu c nh c lp. khng c ngha nu c nh khng c lp. 120

Hm 42h: Di chuyn con tr c vit file (LSEEK). Di chuyn con tr c/vit theo phng thc cho trc Vo: AH=42h DS:DX=khong cch (offset) di chuyn theo byte AL=phng thc di chuyn (0,1,2) BX=th file Ra: AX=m l i nu c nh c lp DX:AX=v tr con tr mi nu c nh khng c lp. Hm 47h: Ly th mc hin thi. a vo tn ng dn y (bt u t th mc gc) ca th mc hin ti trong a cho trc vo vng c a chi DS:SI. Vo: AH=47h DS:SI=con tr tr ti vng nh 64 byte ca ngi s dng. DL=S hiu a (0=mc nh, 1=A...) Ra: DS:SI=tn ng dn y t gc nu c nh khng c lp AX=m l i nu c nh c lp. Hm 48h: Cp pht b nh. Cp pht b nh theo s paragraph yu cu. Vo: Ra: AH=48h BX=S paragraph yu cu AX:0=a ch khi nh cp pht AX=m l i nu c nh c lp BX=kch thc ca khi ln nht ca b nh kh dng nu s cp pht khng thnh cng. Hm 49: Gii phng b nh cp pht Gii phng b nh cp pht cho trc. Vo: AH=49h ES=segment ca khi nh c gii phng 121

Ra:

AX=m l i nu c nh c lp

khng c ngha nu c nh khng c lp Hm 4Ch: Kt thc chng trnh (EXIT) Kt thc chng trnh hin ti vo tr iu khin cho chng trnh gi n. Vo: AH=4Ch AL=m tr v Ra: khng Ngt 25h: c tuyt i a Vo: AL=S hiu a cx=s sector c DX=S hiu sector logic bt u DS:BX=a ch chuyn n Ra: Nu thnh cng CF=0 Nu khng thnh cng CF=1 v AX cha, m l i.

Ngt 26h: Ghi tuyt i a Vo: AL=S hiu a cx=s sector ghi DX=S hiu sector logic bt u DS:BX=a ch chuyn i Ra: Nu thnh cng CF=0 Nu khng thnh cng CF=1 v AX cha m l i Ngt 27h: Kt thc chng trnh v li thng tr. Vo: Ra: DX=offset bt u ca vng nh c gii phng (khng gi li thng tr), segment l segment ca PSP. khng

122

TI L I U T H A M K H O 1. Ytha Yu & Charles Marut, Lp trnh hp ng v my vi tnh IBM-PC. Bin dch Quch Tun Ngc - Tin Dng - Nguyn Quang Khi. 1998. 2. Vn Th Minh, K thut vi x l. 1997. 3. ng Thnh Phu, Cc bi lp lp trnh bng ngn ng Assembly. 2001 4. Tng Vn On-Hong c Hi, Hp ng v lp trnh ng dng. 2001 5. ng Thnh Phu, Turbo Assembly v ng dng. 1998 6. Ng Din Tp, Lp trnh bng hp ng. 1998 7. Nguyn Minh San. cm nang lp trnh. 1996 8. Nguyn Mnh Giang, Lp trnh bng ngn ng Assembly cho my tnh PC-IBM. 2000

123

M C LC Li gii thiu Li ni u Chng . T CHC CA B VI XL 8086 . Cc dng d liu c bn ca b vi x l l i . Cc b vi x l 80x86 ca Itel HI. Cc thanh ghi ca b vi x l 8086/8088 IV. Ngt v phn loi ngt V. Cc php nh a ch VI. Tp lnh b vi x l 8086/8088 Chng 2. LP TRNH BNG HP NG . Gii thiu hp ng l i . Cu trc ca mt chng trnh hp ng IU. Cc bc to v chy chng trnh IV. Cc cu trc lp trnh c bn thc hin bng hp ng V. Chng trnh .EXE v .COM Chng 3. LIN KT ASSEMBLY VI NGN NG PASCAL . Assembly trong Pascal l i . Vit tch bit nhiu Modul (trn nhiu tp) ring l Chng 4. CC BI TON LP TRNH . Cc bi ton phn s hc li. Bi ton v chui IU. Bi ton v thit b vo ra Ph lc. CC NGT CA BIOS V DOS Ti liu tham kho 123 3 5

7 15 18 20 23 26

49 54 58 60 67

75 78

84 92 97 104

124

You might also like