Bài giảng hợp ngữ - Chương 1 pot

10 458 5
Bài giảng hợp ngữ - Chương 1 pot

Đang tải... (xem toàn văn)

Thông tin tài liệu

Bài ging hp ng Chng I: Các khái nim c bn 5 CHNG I: CÁC KHÁI NIM C BN 1.1 Mu Hp ng (Assembly language) là mt ngôn ng lp trình cp thp, mc ích nhm giao tip trc tip vi phn cng ca máy tính. Máy tính ch có kh nng hiu c các tín hiu 0, 1 di dng n hoc t, gi là tín hiu nh phân (ngôn ng nh phân còn c gi là ngôn ng máy). Các lnh ca hp ng thc cht là dng kí hiu ca ngôn ng máy: hp ng s dng các kí hiu bng ting Anh  biu din các lnh ngôn ng máy cho d nh hn. Ví d: nh ngôn ng máy nh hp ng 1011 0100 0010 1010 1100 1101 0010 0001 MOV AH,2Ah INT 21h Ta thy các lnh máy tính bng các dãy bít 0, 1 rt dài và khó nh, còn lnh hp ng thì ngn gn hn nhiu. Khi chy mt chng trình hp ng thì phi dch nó sang ngôn ng máy. Hc hp ng, không ch hc mt ngôn ng lp trình có tc  rt nhanh (hp ng là ngôn ng lp trình có tc  nhanh nht) mà còn  nm bt c bn cht bên trong ca máy tính, bit cách tác ng trc tip vào phn lõi ca máy tính. 1.2 Biu din s và kí t trong máy tính 1.2.1 Mt s hm a) H thp phân (Decimal) - Hm c s 10 H thp phân s dng 10 kí hiu (0, 1, 2, 9)  biu din thông tin. Các s trong h thp phân c biu din di dng tng các lu tha c s 10. Ví d: S 1998 trong h thp phân có th biu din nh sau: (1998) 10 = 1x10 3 + 9x10 2 + 9x10 1 + 8x10 0 Trong hp ng, ngi ta kí hiu 1 s thp phân bng ch D hoc d  cui (vit tt ca Decimal), cng có th không cn vit các chó. Ví d: (1998) 10 c kí hiu là: 1998D, 1998d, hoc n gin là 1998 b) H nh phân (Binary) - Hm c s 2 H nh phân s dng 2 kí hiu (0,1)  biu din thông tin. Các s trong h nh phân c biu din di dng tng các lu tha c s 2. Ví d: S 1101 trong h nh phân có th biu din nh sau: (1101) 2 = 1x2 3 + 1x2 2 + 0x2 1 + 1x2 0 = (13) 10 Trong hp ng, ngi ta kí hiu 1 s nh phân bng ch B hoc b  cui (vit tt ca Binary). Ví d: Bài ging hp ng Chng I: Các khái nim c bn 6 (1101) 2 c kí hiu là: 1101B, hoc 1101b c) H thp lc phân (Hexa Decimal) - Hm c s 16 H thp lc phân s dng 16 kí hiu (0, 1, 2, 9, A, B, C, D, E, F)  biu din thông tin. Các kí hiu A, B, C, D, E, F ln lt ng vi các giá tr 10, 11, 12, 13, 14, 15 trong h thp phân. Các s trong h thp lc phân c biu din di dng tng các lu tha c  16. Ví d: S 2B trong h thp lc phân có th biu din nh sau: (2B) 16 = 2x16 1 + Bx16 0 = (43) 10 Trong hp ng, ngi ta kí hiu 1 s thp lc phân bng ch H hoc h  cui (vit tt ca Hexa Decimal). Ví d: (2B) 16 c kí hiu là: 2BH, hoc 2Bh Chú ý: Kí hiu mt s thp lc phân trong chng trình hp ng phi luôn bt u bng . Ví d s (FA) 10 c kí hiu là 0FAh (ch không kí hiu là FAh). H thp lc phân (gi tt là h hex) là hm c s dng nhiu nht trong hp ng, do nó có th biu din nhng dãy bít nh phân dài bng nhng kí hiu ngn gn, d nh n. d) Chuyn i gia các hm • Chuyn t h thp phân v h nh phân: Quy tc chuyn: em s thp phân chia liên lip cho 2, cho ti khi thng s bng 0 thì ng li. Vit các s d ngc t di lên ta thu c s nh phân tng ng. Ví d: Chuyn s thp phân 13 sang h nh phân. 13 2  1 6 2 d 0 3 2 d 1 1 2  1 0 Vit các s d ngc t di lên ta thu c s nh phân 1101b. • Chuyn t h thp phân v h thp lc phân: Quy tc chuyn: em s thp phân chia liên lip cho 16, cho ti khi thng s bng 0 thì ng li. Vit các s d ngc t di lên ta thu c s thp lc phân tng ng. Ví d: Chuyn s thp phân 43 sang h thp lc phân. 43 16  11 2 16 d 2 0 Vit các s d ngc t di lên ta thu c s thp lc phân 2Bh (chú ý là 11d = 0Bh). Bài ging hp ng Chng I: Các khái nim c bn 7 • Chuyn i gia h nh phân và h thp lc phân: Vic chuyn i gia 2 hm này khá d dàng do mi kí hiu trong h hex li tng ng vi 4 kí hiu nh phân. Xem bng chuyn i sau:  thp 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: Chuyn i 2Ah sang h nh phân. Tra bng ta thy: 2h = 0010b, Ah = 1010b y 2Ah = 00101010b Ví d 2: Chuyn i 10110110b sang h hex. u tiên ta chia dãy bít nh phân thành tng nhóm 4 bít, thu c 2 nhóm sau: 0110 và 1011. Tra bng ta thy: 0110b = 6h, 1011b = Bh y 10110110b = B6h 1.2.2 Biu din s nguyên trong máy tính Do gii hn ca phn cng máy tính, d liu trong máy tính thng c biu din bi các nhóm 8 bít (gi là Byte) 1 byte = 8 bit 2 byte = 16 bit = 1 word Ngi ta có th ghép nhiu byte hay nhiu word  to thành dãy bít dài hn. Dãy bít càng dài thì lng thông tin biu din c càng ln. Nu gi N là s bít ca dãy thì s kh nng biu din = 2 N . Xét mt dãy bít nh phân: 1 0 0 1 0 0 0 msb lsb Bài ging hp ng Chng I: Các khái nim c bn 8 Bít u tiên (bên trái) c gi là bít nng nht hay bít cao nht ca dãy (Most Significant Bit). Bít cui cùng (bên phi) c gi là bít nh nht hay bít thp nht ca dãy (Least Significant Bit). a) S nguyên không du: Mt s nguyên không du (s không âm) c biu din bi 1 dãy bít nh phân nh ta ã xét  phn trc (phn hm nh phân). ây ta ch nhn mnh thêm v chiu dài a dãy bít:  dài dãy bít khi biu din trong máy tính luôn là bi s ca 8. Ví d: Biu din s nguyên 13 trong máy tính.  phn trc ta ã bit: s nguyên 13 chuyn sang h nh phân s là 1101 Trong máy tính s có nhiu cách  biu din s nguyên này: + S nguyên dng byte (8 bit): 00001101 + S nguyên dng word (16 bit): 00000000 00001101 b) S nguyên có du: i vi s nguyên có du thì khi biu din di dng nh phân ta phi dành ra 1 bít  xác nh du. ó là bít u tiên ca dãy (bít nng nht - Msb). Msb = 0: Du Dng Msb = 1: Du Âm Nh vy, nu chiu dài dãy bít là 8 thì bít u tiên  xác nh du, 7 bít còn li xác nh giá tr s nguyên? Ví d:  +13 c biu din bi dãy bít 0000 1101. y s -13 c biu din nh th nào, có phi là dãy bít 1000 1101 hay không? Nguyên tc  biu din s âm trong máy tính: phi tho mãn u kin sau  Âm (nh phân) + S Dng (nh phân) = 0 Gi s s -13 c biu din bi dãy bít 1000 1101, ta em nó cng vi dãy bít biu din  +13  kim tra: 0000 1101 + 1000 1101 1001 1010  0 Ta thy tng thu c khác 0, nh vy ây không phi là dãy bít cn tìm Quy tc tìm si: Cho 1 s nguyên A. Gi sã bit dãy bít biu din A, khi ó mun tìm dãy bít biu din s -A ta làm nh sau: c 1: Tìm s bù 1 ca A bng cách o tt c các bít. Ví d: A = 0000 1101 Khi ó s bù 1 ca A là 1111 0010 c 2: Tìm s bù 2 (bng cách ly s bù 1 cng vi 1) 1111 0010 + 1 1111 0011  bù 2 tìm c (1111 0011) chính là dãy bít biu din s -A. Bài ging hp ng Chng I: Các khái nim c bn 9 Ta th kim tra li bng cách cng 2 dãy bít: 0000 1101 + 1111 0011 1 0000 0000 t qu thu c bng 0 chng t ta ã tìm úng (vì ang biu din s nguyên bng mt dãy 8 bit nên s 1 trong kt qu trên có th loi b - s gii thích k hn trong chng sau). y -13 = 1111 0011b Bài toán ngc: Cho mt dãy bít nh phân sau ây (16 bit): 1110 0111 0001 1000b Hãy xác nh xem nó biu din s nguyên nào? Gii: i s nguyên ó là N. Có 2 trng hp xy ra: • u ây là s nguyên không du: 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ó du: Vì Msb = 1 nên N là s âm. n gin ta s xác nh –N (s dng) trc, tó suy ra N. Tìm –N bng cách tìm s bù 2 ca N c 1: o bít  bù 1 = 0001 1000 1110 0111 c 2: em cng vi 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 Biu din kí t trong máy tính Khi s dng máy tính, ta không ch làm vic vi các con s mà còn phi làm vic vi nhiu loi d liu khác nhau, trong ó có các kí t. Các kí t cng c biu din bi các dãy bít nh phân, s biu din này mang tính cht quy c. Tuy nhiên, nu mi ngi, mi c quan, mi quc gia li ta ra quy c ca riêng mình thì s rt khó khn cho vic trao i thông tin. Nhu cu t ra là cn phi có mt h thng quy c chung mang tính quc t. Cách thc mã hoá kí tc s dng rng rãi nht trên các máy PC da trên bng mã ASCII (American Standard Code for Information Interchange). H thng này s dng 8 bít  biu din 1 kí t. Bài ging hp ng Chng I: Các khái nim c bn 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 (Bng mã ASCII y  xin xem phn ph lc 2) Hin nay có rt nhiu bng mã khác nhau c s dng, ph bin nht là mã Unicode, i  dài dãy bít có th thay i khá mm do, và nó vn gic s tng thích vi mã ASCII truyn thng. 1.3 T chc ca máy tính 1.3.1 S h thng máy tính Ngi ta thng chia các b phn ca máy tính làm 4 khi sau: Trong ó: • Các khi Nhp/Xut d liu: bao gm các thit b nh bàn phím, chut, màn hình • Khi lu tr: bao gm các a cng, a mm • Khi x lý: ây là phn quan trng nht ca mt máy tính, ta s tp trung xem xét nó. t h thng x lý ca máy tính bao gm 3 b phn chính: + B vi x lý – CPU (Central Processing Unit): Là b não ca máy tính, nó x lý các thông tin và u khin mi hot ng ca máy tính. + B nh trong: Là b nh có kh nng liên lc trc tip vi b vi x lý,là ni lu tr d liu phc v cho quá trình x lý. + Các mch vào ra: u khin vic giao tip vi thit b ngoi vi. Ngoài ra còn có h thng các dây dn, cáp ni  liên kt gia 3 b phn trên (h thng Bus)  lýNhp Xut u tr Bài ging hp ng Chng I: Các khái nim c bn 11 1.3.2 B vi x lý - CPU ây là trung tâm x lý ca máy tính. Mi b vi x lý c trang b mt h thng các nh c bn bng ngôn ng nh phân (do nhà sn xut quy nh). Ngi lp trình có th  dng các lnh này “ra lnh” cho máy tính thc hin u mình mun. a) Các thành phn chính ca b vi x lý: • ALU (Arithmetic & Logic Unit): Khi s hc và logic. ây là ni thc hin các phép tính s hc (cng, tr, nhân, chia ) và các phép logic (Not, And, Or ). • Các thanh ghi: Cung cp kh nng nh bên trong CPU. Mi thanh ghi có kh ng cha c mt dãy các bít d liu ( dài còn ph thuc vao tng loi CPU). •  thng ni ghép bên trong CPU (Bus ni b): Cho phép liên lc gia các b phn bên trong CPU. b) H vi x lý Intel x86 Có nhiu hãng khác nhau sn xut b vi x lý cho máy tính. Ta s tp trung nghiên u các b vi x lý thuc dòng x86 do hãng Intel ch to. B vi x lý u tiên thuc dòng này là 8086. Nó c sn xut nm 1978, là b vi x lý 16 bit u tiên ca Intel. 8088 ra i sau 8086 mt chút, v c bn nó cng có cu to ging nh 8086, nhng có giá thành r hn vì ch có bus d liu 8 bít, và tc  cng thp hn. Tip sau ó là s ra i ca 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ý li càng tr nên mnh m hn i  dài các thanh ghi dài hn, tc ng h cao hn, b rng bus ln hn c) B vi x lý 8086 Ta chn 8086  nghiên cu vì nó có cu trúc n gin, d tìm hiu. Và u quan trng là hu ht các lnh ca nó u c các b vi x lý sau này k tha, nên các chng trình vit cho 8086 vn có th áp dng trên các b vi x lý hin i hn. Ta s xem xét 14 thanh ghi c bn ca 8086, mi thanh ghi có chiu dài 16 bit. • Nhóm các thanh ghi d liu (Thanh ghi công dng chung): Các thanh ghi này c s dng khi thc hin thao tác vi d liu. Có 4 thanh ghi 16 bit c t tên là AX, BX, CX, DX. Mi thanh ghi li c chia làm 2 thanh ghi 8 bit i các tên tng ng nh trên hình v: AX AH AL BX BH BL CPU  nh trong trong ch vào/ra Bus Bài ging hp ng Chng I: Các khái nim c bn 12 CX CH CL DX DH DL • Nhóm các thanh ghi n: Các thanh ghi này dùng  lu tra ch ca các n b nh (segment) trong các thao tác vi 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  cha a ch phân n (offset) ca các ô nh trong các thao tác vi b nh. Có 5 thanh ghi 16 bit là SI, DI, SP, BP, IP. SI DI SP BP IP (Các khái nim va ch segment và offset s nói k hn  phn sau) • Thanh ghi trng thái (Thanh ghi c - Flag): Thanh ghi này dùng  xác nh trng thái ca b vi x lý. Mi bít trên thanh ghi c có t tên riêng, có mt công dng riêng trong vic phn ánh trng thái (s tìm hiu c th trong chng 3). Bài ging hp ng Chng I: Các khái nim c bn 13 1.3.3 T chc b nh trong a) a ch vt lý: B nh ca máy tính c cu to bi các phn t nh 1 bit. C 8 phn t nh to thành mt ô nh (1 byte). Các ô nhc sp xp tun t trong b nh và c ánh s n lt t 0, 1, 2 S hiu các ô nh nh trên c gi là a ch vt lý ca ô nh. Ta s xem xét mô hình t chc b nh trong h thng x lý 8086. B vi x lý 8086 s ng 20 ng dây a ch (bus a ch 20 bít)  liên lc vi b nh. Nói cách khác, a ch các ô nh là mt dãy dài 20 bít. Nh vy s lng cc i các ô nh có thánh a ch là 2 20 (= 1MB). 1111 1111111 FFFFFh 0000 0000011 a ch dng hex: 00003h 0000 0000010 00002h 0000 0000001 00001h 0000 0000000 1 ô nh 00000h 1 ô nh (20 bít) Các thanh ghi ca b vi x lý 8086 ch dài 16 bít, chúng không th cha c a ch dài 20 bít. Do ó ngi ta phi s dng mt phng pháp ánh a ch khác, gi là a ch logic. b) a ch logic: Theo phng pháp này, b nhc chia thành tng n, mi n có chiu dài ti a 64 KB. Các n c ánh s ln lt là 0, 1, 2, S hiu n nh vy gi là a chn (hay a ch segment). Ngi ta s dng 16 bít ánh s các n, nh vy a ch segment s nm trong phm vi t 0000h n FFFFh. Các ô nh trong n cng c ánh s ln lt là 0, 1, 2, S hiu ô nh nh vy i là a ch tng i (hay a ch offset). Mt n nh có kích thc ti a 64 KB, c là có ti a 65536 ô nh. Ngi ta cng dùng 16 bít ánh s các ô nh, nh vy a ch offset s nm trong phm vi t 0000h n FFFFh. Mun xác nh a ch ca mt ô nh ta phi bit hai thông tin: ô nhó thuc n nào (segment) và v trí ca ô nh trong n (offset). Cp 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 vt lý ca nó. Gii: c 1: Dch a ch segment v bên trái 4 bít (tng ng vi dch 1 kí hiu hex). Ta thu c: 10A20h c 2: Ly giá tr thu c  bc 1 em cng vi a ch offset: Bài ging hp ng Chng I: Các khái nim c bn 14 10A20h + 34B4h 13ED4h y a ch vt lý ca ô nhó là 13ED4h. c) S phân chia không gian nh: Không gian a ch 1MB (t 00000h n FFFFFh) thng c chia thành các vùng nh theo chc nng s dng: F0000h ROM BIOS E0000h D0000h C0000h } dành B0000h A0000h } B nh hin 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  np và chy các ng dng ca hu hành DOS. Hai n a ch tip theo dành cho RAM trên v mch màn hình. n cui cùng dành cho ROM BIOS. BIOS (Base Input – Output System) là mt phn mm u khin các thao tác vào ra c n ca máy tính. Nó c nhà sn xut cài sn trong ROM và tng thi hành khi bt 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: Chuyn i 2Ah sang. 1: o bít  bù 1 = 00 01 1000 11 10 011 1 c 2: em cng vi 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 ca A là 11 11 0 010 c 2: Tìm s bù 2 (bng cách ly s bù 1 cng vi 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 biu din s -A. Bài ging hp

Ngày đăng: 21/07/2014, 17:20

Tài liệu cùng người dùng

Tài liệu liên quan