Bài ging hp ng Chng I: Các khái nim c bn 5 CHNG I: CÁC KHÁI NIM C BN 1.1 Mu Hp ng (Assembly language) là mt ngôn ng lp trình cp thp, mc ích nhm giao tip trc tip vi phn cng ca máy tính. Máy tính ch có kh nng hiu c các tín hiu 0, 1 di dng n hoc t, gi là tín hiu nh phân (ngôn ng nh phân còn c gi là ngôn ng máy). Các lnh ca hp ng thc cht là dng kí hiu ca ngôn ng máy: hp ng s dng các kí hiu bng ting Anh biu din các lnh ngôn ng máy cho d nh hn. Ví d: nh ngôn ng máy nh hp ng 1011 0100 0010 1010 1100 1101 0010 0001 MOV AH,2Ah INT 21h Ta thy các lnh máy tính bng các dãy bít 0, 1 rt dài và khó nh, còn lnh hp ng thì ngn gn hn nhiu. Khi chy mt chng trình hp ng thì phi dch nó sang ngôn ng máy. Hc hp ng, không ch hc mt ngôn ng lp trình có tc rt nhanh (hp ng là ngôn ng lp trình có tc nhanh nht) mà còn nm bt c bn cht bên trong ca máy tính, bit cách tác ng trc tip vào phn lõi ca máy tính. 1.2 Biu din s và kí t trong máy tính 1.2.1 Mt s hm a) H thp phân (Decimal) - Hm c s 10 H thp phân s dng 10 kí hiu (0, 1, 2, 9) biu din thông tin. Các s trong h thp phân c biu din di dng tng các lu tha c s 10. Ví d: S 1998 trong h thp phân có th biu din nh sau: (1998) 10 = 1x10 3 + 9x10 2 + 9x10 1 + 8x10 0 Trong hp ng, ngi ta kí hiu 1 s thp phân bng ch D hoc d cui (vit tt ca Decimal), cng có th không cn vit các chó. Ví d: (1998) 10 c kí hiu là: 1998D, 1998d, hoc n gin là 1998 b) H nh phân (Binary) - Hm c s 2 H nh phân s dng 2 kí hiu (0,1) biu din thông tin. Các s trong h nh phân c biu din di dng tng các lu tha c s 2. Ví d: S 1101 trong h nh phân có th biu din nh sau: (1101) 2 = 1x2 3 + 1x2 2 + 0x2 1 + 1x2 0 = (13) 10 Trong hp ng, ngi ta kí hiu 1 s nh phân bng ch B hoc b cui (vit tt ca Binary). Ví d: Bài ging hp ng Chng I: Các khái nim c bn 6 (1101) 2 c kí hiu là: 1101B, hoc 1101b c) H thp lc phân (Hexa Decimal) - Hm c s 16 H thp lc phân s dng 16 kí hiu (0, 1, 2, 9, A, B, C, D, E, F) biu din thông tin. Các kí hiu A, B, C, D, E, F ln lt ng vi các giá tr 10, 11, 12, 13, 14, 15 trong h thp phân. Các s trong h thp lc phân c biu din di dng tng các lu tha c 16. Ví d: S 2B trong h thp lc phân có th biu din nh sau: (2B) 16 = 2x16 1 + Bx16 0 = (43) 10 Trong hp ng, ngi ta kí hiu 1 s thp lc phân bng ch H hoc h cui (vit tt ca Hexa Decimal). Ví d: (2B) 16 c kí hiu là: 2BH, hoc 2Bh Chú ý: Kí hiu mt s thp lc phân trong chng trình hp ng phi luôn bt u bng . Ví d s (FA) 10 c kí hiu là 0FAh (ch không kí hiu là FAh). H thp lc phân (gi tt là h hex) là hm c s dng nhiu nht trong hp ng, do nó có th biu din nhng dãy bít nh phân dài bng nhng kí hiu ngn gn, d nh n. d) Chuyn i gia các hm • Chuyn t h thp phân v h nh phân: Quy tc chuyn: em s thp phân chia liên lip cho 2, cho ti khi thng s bng 0 thì ng li. Vit các s d ngc t di lên ta thu c s nh phân tng ng. Ví d: Chuyn s thp phân 13 sang h nh phân. 13 2 1 6 2 d 0 3 2 d 1 1 2 1 0 Vit các s d ngc t di lên ta thu c s nh phân 1101b. • Chuyn t h thp phân v h thp lc phân: Quy tc chuyn: em s thp phân chia liên lip cho 16, cho ti khi thng s bng 0 thì ng li. Vit các s d ngc t di lên ta thu c s thp lc phân tng ng. Ví d: Chuyn s thp phân 43 sang h thp lc phân. 43 16 11 2 16 d 2 0 Vit các s d ngc t di lên ta thu c s thp lc phân 2Bh (chú ý là 11d = 0Bh). Bài ging hp ng Chng I: Các khái nim c bn 7 • Chuyn i gia h nh phân và h thp lc phân: Vic chuyn i gia 2 hm này khá d dàng do mi kí hiu trong h hex li tng ng vi 4 kí hiu nh phân. Xem bng chuyn i sau: thp phân H Hex H nh phân 0 0 0000 1 1 0001 2 2 0010 3 3 0011 4 4 0100 5 5 0101 6 6 0110 7 7 0111 8 8 1000 9 9 1001 10 A 1010 11 B 1011 12 C 1100 13 D 1101 14 E 1110 15 F 1111 Ví d 1: Chuyn i 2Ah sang h nh phân. Tra bng ta thy: 2h = 0010b, Ah = 1010b y 2Ah = 00101010b Ví d 2: Chuyn i 10110110b sang h hex. u tiên ta chia dãy bít nh phân thành tng nhóm 4 bít, thu c 2 nhóm sau: 0110 và 1011. Tra bng ta thy: 0110b = 6h, 1011b = Bh y 10110110b = B6h 1.2.2 Biu din s nguyên trong máy tính Do gii hn ca phn cng máy tính, d liu trong máy tính thng c biu din bi các nhóm 8 bít (gi là Byte) 1 byte = 8 bit 2 byte = 16 bit = 1 word Ngi ta có th ghép nhiu byte hay nhiu word to thành dãy bít dài hn. Dãy bít càng dài thì lng thông tin biu din c càng ln. Nu gi N là s bít ca dãy thì s kh nng biu din = 2 N . Xét mt dãy bít nh phân: 1 0 0 1 0 0 0 msb lsb Bài ging hp ng Chng I: Các khái nim c bn 8 Bít u tiên (bên trái) c gi là bít nng nht hay bít cao nht ca dãy (Most Significant Bit). Bít cui cùng (bên phi) c gi là bít nh nht hay bít thp nht ca dãy (Least Significant Bit). a) S nguyên không du: Mt s nguyên không du (s không âm) c biu din bi 1 dãy bít nh phân nh ta ã xét phn trc (phn hm nh phân). ây ta ch nhn mnh thêm v chiu dài a dãy bít: dài dãy bít khi biu din trong máy tính luôn là bi s ca 8. Ví d: Biu din s nguyên 13 trong máy tính. phn trc ta ã bit: s nguyên 13 chuyn sang h nh phân s là 1101 Trong máy tính s có nhiu cách biu din s nguyên này: + S nguyên dng byte (8 bit): 00001101 + S nguyên dng word (16 bit): 00000000 00001101 b) S nguyên có du: i vi s nguyên có du thì khi biu din di dng nh phân ta phi dành ra 1 bít xác nh du. ó là bít u tiên ca dãy (bít nng nht - Msb). Msb = 0: Du Dng Msb = 1: Du Âm Nh vy, nu chiu dài dãy bít là 8 thì bít u tiên xác nh du, 7 bít còn li xác nh giá tr s nguyên? Ví d: +13 c biu din bi dãy bít 0000 1101. y s -13 c biu din nh th nào, có phi là dãy bít 1000 1101 hay không? Nguyên tc biu din s âm trong máy tính: phi tho mãn u kin sau Âm (nh phân) + S Dng (nh phân) = 0 Gi s s -13 c biu din bi dãy bít 1000 1101, ta em nó cng vi dãy bít biu din +13 kim tra: 0000 1101 + 1000 1101 1001 1010 0 Ta thy tng thu c khác 0, nh vy ây không phi là dãy bít cn tìm Quy tc tìm si: Cho 1 s nguyên A. Gi sã bit dãy bít biu din A, khi ó mun tìm dãy bít biu din s -A ta làm nh sau: c 1: Tìm s bù 1 ca A bng cách o tt c các bít. Ví d: A = 0000 1101 Khi ó s bù 1 ca A là 1111 0010 c 2: Tìm s bù 2 (bng cách ly s bù 1 cng vi 1) 1111 0010 + 1 1111 0011 bù 2 tìm c (1111 0011) chính là dãy bít biu din s -A. Bài ging hp ng Chng I: Các khái nim c bn 9 Ta th kim tra li bng cách cng 2 dãy bít: 0000 1101 + 1111 0011 1 0000 0000 t qu thu c bng 0 chng t ta ã tìm úng (vì ang biu din s nguyên bng mt dãy 8 bit nên s 1 trong kt qu trên có th loi b - s gii thích k hn trong chng sau). y -13 = 1111 0011b Bài toán ngc: Cho mt dãy bít nh phân sau ây (16 bit): 1110 0111 0001 1000b Hãy xác nh xem nó biu din s nguyên nào? Gii: i s nguyên ó là N. Có 2 trng hp xy ra: • u ây là s nguyên không du: N = 1x2 15 + 1x2 14 + 1x2 13 + 1x2 10 + 1x 2 9 + 1x2 8 + 1x2 4 + 1x2 3 = 32768 + 16384 +8192 + 1024 + 512 + 256 + 16 + 8 = 59160 • u ây là s nguyên có du: Vì Msb = 1 nên N là s âm. n gin ta s xác nh –N (s dng) trc, tó suy ra N. Tìm –N bng cách tìm s bù 2 ca N c 1: o bít bù 1 = 0001 1000 1110 0111 c 2: em cng vi 1 0001 1000 1110 0111 + 1 0001 1000 1110 1000 Ta tìm c –N = 0001 1000 1110 1000b = 1x2 12 + 1x2 11 + 1x 2 7 + 1x2 6 + 1x2 5 + 1x2 3 = 4096 + 2048 + 128 + 64 + 32 + 8 = 6376 y N = -6376 1.2.3 Biu din kí t trong máy tính Khi s dng máy tính, ta không ch làm vic vi các con s mà còn phi làm vic vi nhiu loi d liu khác nhau, trong ó có các kí t. Các kí t cng c biu din bi các dãy bít nh phân, s biu din này mang tính cht quy c. Tuy nhiên, nu mi ngi, mi c quan, mi quc gia li ta ra quy c ca riêng mình thì s rt khó khn cho vic trao i thông tin. Nhu cu t ra là cn phi có mt h thng quy c chung mang tính quc t. Cách thc mã hoá kí tc s dng rng rãi nht trên các máy PC da trên bng mã ASCII (American Standard Code for Information Interchange). H thng này s dng 8 bít biu din 1 kí t. Bài ging hp ng Chng I: Các khái nim c bn 10 Ví d: Kí t Mã nh phân Mã hex A 0100 0001 41h B 0100 0010 42h a 0110 0001 61h b 0110 0010 62h 1 0011 0001 31h 2 0011 0010 32h * 0010 1010 2Ah + 0010 1011 2Bh (Bng mã ASCII y xin xem phn ph lc 2) Hin nay có rt nhiu bng mã khác nhau c s dng, ph bin nht là mã Unicode, i dài dãy bít có th thay i khá mm do, và nó vn gic s tng thích vi mã ASCII truyn thng. 1.3 T chc ca máy tính 1.3.1 S h thng máy tính Ngi ta thng chia các b phn ca máy tính làm 4 khi sau: Trong ó: • Các khi Nhp/Xut d liu: bao gm các thit b nh bàn phím, chut, màn hình • Khi lu tr: bao gm các a cng, a mm • Khi x lý: ây là phn quan trng nht ca mt máy tính, ta s tp trung xem xét nó. t h thng x lý ca máy tính bao gm 3 b phn chính: + B vi x lý – CPU (Central Processing Unit): Là b não ca máy tính, nó x lý các thông tin và u khin mi hot ng ca máy tính. + B nh trong: Là b nh có kh nng liên lc trc tip vi b vi x lý,là ni lu tr d liu phc v cho quá trình x lý. + Các mch vào ra: u khin vic giao tip vi thit b ngoi vi. Ngoài ra còn có h thng các dây dn, cáp ni liên kt gia 3 b phn trên (h thng Bus) lýNhp Xut u tr Bài ging hp ng Chng I: Các khái nim c bn 11 1.3.2 B vi x lý - CPU ây là trung tâm x lý ca máy tính. Mi b vi x lý c trang b mt h thng các nh c bn bng ngôn ng nh phân (do nhà sn xut quy nh). Ngi lp trình có th dng các lnh này “ra lnh” cho máy tính thc hin u mình mun. a) Các thành phn chính ca b vi x lý: • ALU (Arithmetic & Logic Unit): Khi s hc và logic. ây là ni thc hin các phép tính s hc (cng, tr, nhân, chia ) và các phép logic (Not, And, Or ). • Các thanh ghi: Cung cp kh nng nh bên trong CPU. Mi thanh ghi có kh ng cha c mt dãy các bít d liu ( dài còn ph thuc vao tng loi CPU). • thng ni ghép bên trong CPU (Bus ni b): Cho phép liên lc gia các b phn bên trong CPU. b) H vi x lý Intel x86 Có nhiu hãng khác nhau sn xut b vi x lý cho máy tính. Ta s tp trung nghiên u các b vi x lý thuc dòng x86 do hãng Intel ch to. B vi x lý u tiên thuc dòng này là 8086. Nó c sn xut nm 1978, là b vi x lý 16 bit u tiên ca Intel. 8088 ra i sau 8086 mt chút, v c bn nó cng có cu to ging nh 8086, nhng có giá thành r hn vì ch có bus d liu 8 bít, và tc cng thp hn. Tip sau ó là s ra i ca các b vi x lý 80186, 80286, 80386, 80486, 80586 (Pentium), PII, PIII, P4 Càng v sau thì các b vi x lý li càng tr nên mnh m hn i dài các thanh ghi dài hn, tc ng h cao hn, b rng bus ln hn c) B vi x lý 8086 Ta chn 8086 nghiên cu vì nó có cu trúc n gin, d tìm hiu. Và u quan trng là hu ht các lnh ca nó u c các b vi x lý sau này k tha, nên các chng trình vit cho 8086 vn có th áp dng trên các b vi x lý hin i hn. Ta s xem xét 14 thanh ghi c bn ca 8086, mi thanh ghi có chiu dài 16 bit. • Nhóm các thanh ghi d liu (Thanh ghi công dng chung): Các thanh ghi này c s dng khi thc hin thao tác vi d liu. Có 4 thanh ghi 16 bit c t tên là AX, BX, CX, DX. Mi thanh ghi li c chia làm 2 thanh ghi 8 bit i các tên tng ng nh trên hình v: AX AH AL BX BH BL CPU nh trong trong ch vào/ra Bus Bài ging hp ng Chng I: Các khái nim c bn 12 CX CH CL DX DH DL • Nhóm các thanh ghi n: Các thanh ghi này dùng lu tra ch ca các n b nh (segment) trong các thao tác vi b nh. Có 4 thanh ghi 16 bít là CS, DS, ES, SS. CS DS SS ES • Nhóm các thanh ghi con tr và ch s: Các thanh ghi này dùng cha a ch phân n (offset) ca các ô nh trong các thao tác vi b nh. Có 5 thanh ghi 16 bit là SI, DI, SP, BP, IP. SI DI SP BP IP (Các khái nim va ch segment và offset s nói k hn phn sau) • Thanh ghi trng thái (Thanh ghi c - Flag): Thanh ghi này dùng xác nh trng thái ca b vi x lý. Mi bít trên thanh ghi c có t tên riêng, có mt công dng riêng trong vic phn ánh trng thái (s tìm hiu c th trong chng 3). Bài ging hp ng Chng I: Các khái nim c bn 13 1.3.3 T chc b nh trong a) a ch vt lý: B nh ca máy tính c cu to bi các phn t nh 1 bit. C 8 phn t nh to thành mt ô nh (1 byte). Các ô nhc sp xp tun t trong b nh và c ánh s n lt t 0, 1, 2 S hiu các ô nh nh trên c gi là a ch vt lý ca ô nh. Ta s xem xét mô hình t chc b nh trong h thng x lý 8086. B vi x lý 8086 s ng 20 ng dây a ch (bus a ch 20 bít) liên lc vi b nh. Nói cách khác, a ch các ô nh là mt dãy dài 20 bít. Nh vy s lng cc i các ô nh có thánh a ch là 2 20 (= 1MB). 1111 1111111 FFFFFh 0000 0000011 a ch dng hex: 00003h 0000 0000010 00002h 0000 0000001 00001h 0000 0000000 1 ô nh 00000h 1 ô nh (20 bít) Các thanh ghi ca b vi x lý 8086 ch dài 16 bít, chúng không th cha c a ch dài 20 bít. Do ó ngi ta phi s dng mt phng pháp ánh a ch khác, gi là a ch logic. b) a ch logic: Theo phng pháp này, b nhc chia thành tng n, mi n có chiu dài ti a 64 KB. Các n c ánh s ln lt là 0, 1, 2, S hiu n nh vy gi là a chn (hay a ch segment). Ngi ta s dng 16 bít ánh s các n, nh vy a ch segment s nm trong phm vi t 0000h n FFFFh. Các ô nh trong n cng c ánh s ln lt là 0, 1, 2, S hiu ô nh nh vy i là a ch tng i (hay a ch offset). Mt n nh có kích thc ti a 64 KB, c là có ti a 65536 ô nh. Ngi ta cng dùng 16 bít ánh s các ô nh, nh vy a ch offset s nm trong phm vi t 0000h n FFFFh. Mun xác nh a ch ca mt ô nh ta phi bit hai thông tin: ô nhó thuc n nào (segment) và v trí ca ô nh trong n (offset). Cp a ch segment:offset c i là a ch logic. Ví d: t ô nh có a ch segment:offset = 10A2:34B4h, hãy xác nh a ch vt lý ca nó. Gii: c 1: Dch a ch segment v bên trái 4 bít (tng ng vi dch 1 kí hiu hex). Ta thu c: 10A20h c 2: Ly giá tr thu c bc 1 em cng vi a ch offset: Bài ging hp ng Chng I: Các khái nim c bn 14 10A20h + 34B4h 13ED4h y a ch vt lý ca ô nhó là 13ED4h. c) S phân chia không gian nh: Không gian a ch 1MB (t 00000h n FFFFFh) thng c chia thành các vùng nh theo chc nng s dng: F0000h ROM BIOS E0000h D0000h C0000h } dành B0000h A0000h } B nh hin th 90000h 20000h 10000h 00000h 64 KB } B nh c s: 10 n (640 KB) Trong ó, 10 n u tiên (B nh c s - Base memory) dùng np và chy các ng dng ca hu hành DOS. Hai n a ch tip theo dành cho RAM trên v mch màn hình. n cui cùng dành cho ROM BIOS. BIOS (Base Input – Output System) là mt phn mm u khin các thao tác vào ra c n ca máy tính. Nó c nhà sn xut cài sn trong ROM và tng thi hành khi bt máy tính. . Hex H nh phân 0 0 0000 1 1 00 01 2 2 0 010 3 3 0 011 4 4 010 0 5 5 010 1 6 6 011 0 7 7 011 1 8 8 10 00 9 9 10 01 10 A 10 10 11 B 10 11 12 C 11 00 13 D 11 01 14 E 11 10 15 F 11 11 Ví d 1: Chuyn i 2Ah sang. 1: o bít bù 1 = 00 01 1000 11 10 011 1 c 2: em cng vi 1 00 01 1000 11 10 011 1 + 1 00 01 1000 11 10 10 00 Ta tìm c –N = 00 01 1000 11 10 10 00b = 1x2 12 + 1x2 11 + 1x 2 7 + 1x2 6 + 1x2 5 . 11 01 Khi ó s bù 1 ca A là 11 11 0 010 c 2: Tìm s bù 2 (bng cách ly s bù 1 cng vi 1) 11 11 0 010 + 1 11 11 0 011 bù 2 tìm c (11 11 0 011 ) chính là dãy bít biu din s -A. Bài ging hp