intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Giáo trình môn lập trình hợp ngữ

Chia sẻ: Paradise_12 Paradise_12 | Ngày: | Loại File: PDF | Số trang:0

106
lượt xem
21
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Đó là hợp ngữ (assembly). Ngôn ngữ assembly gắn liền với ngôn ngữ nhị phân của máy tính, sử dụng các từ đại diện ngắn gọn thay cho các con số nhị phân dài dòng khó hiểu và sẽ dc trình dịch hợp ngữ dịch trực tiếp sang mã máy. Chương trình viết bằng assembly sẽ có tốc độ cao nhất và dung lượng nhỏ nhất.

Chủ đề:
Lưu

Nội dung Text: Giáo trình môn lập trình hợp ngữ

  1. §¹i häc quèc gia hµ néi khoa c«ng nghÖ Gi¸o tr×nh tin häc c¬ së phÇn II lËp tr×nh hîp ng÷ Vò B¸ Duy Hµ Néi, th¸ng 1 n¨m 2003
  2. Lêi nãi ®Çu §©y lµ b¶n th¶o ®Çu tiªn vÒ gi¸o tr×nh hîp ng÷ trong khu«n khæ m«n tin häc c¬ së cho sinh viªn n¨m thø nhÊt khoa C«ng nghÖ. Môc ®Ých cña m«n häc nµy nh»m cung cÊp cho sinh viªn c¸c hiÓu biÕt vÒ lËp tr×nh hîp ng÷ (Assembly) ë møc ®¬n gi¶n gióp sinh viªn hiÓu kü h¬n xö lý th«ng tin ë møc m¸y. KiÕn thøc tr×nh bµy trong gi¸o tr×nh nµy sÏ kh«ng ®ñ víi môc ®Ých ®Ó sinh viªn cã thÓ lËp tr×nh hÖ thèng. Th«ng th−êng ®Ó cã thÓ lËp tr×nh ®−îc tèt trªn assembler, thêi gian cÇn thiÕt ph¶i tõ 3 ®ªn 4 ®¬n vÞ häc tr×nh kÓ c¶ lý thuyÕt vµ thùc hµnh. Trong ch−¬ng tr×nh tin häc c¬ së nµy, víi môc ®Ých ®· nªu trªn, thêi l−îng dµnh cho häc phÇn nµy chØ lµ 12 tiÕt häc trªn líp vµ 12 tiÕt thùc hµnh t¹i phßng m¸y. Do thêi gian kh«ng nhiÒu, sinh viªn khã cã thÓ tiÕp thu thÊu ®¸o mäi kiÕn thøc ®Ó h×nh thµnh kü n¨ng lËp tr×nh tèt trªn assembly. Tµi liÖu nµy gióp sinh viªn hÖ thèng ho¸ l¹i bµi gi¶ng trªn líp. Nh÷ng ai muèn hiÓu kü h¬n cã thÓ ®äc thªm c¸c tµi liÖu kh¸c nh− ®· ®−îc nªu trong tµi liÖu tham kh¶o. Do thêi gian rÊt gÊp nªn ch¾c ch¾n tµi liÖu cßn nhiÒu khiÕm khuyÕt. Mäi vÊn ®Ò liªn quan ®Õn néi dung xin liªn hÖ víi thµy Vò B¸ Duy, Bé m«n C¸c HÖ thèng th«ng tin . Mong r»ng tµi liÖu nµy cã thÓ gióp Ých cho sinh viªn khi häc m«n lËp tr×nh hîp ng÷ trong khu«n khæ m«n häc tin häc c¬ së Ch©n thµnh c¶m ¬n thµy Vò B¸ Duy ®· dµnh nhiÒu c«ng søc ®Ó kip thêi cã mét tµi liÖu cho sinh viªn. Gi¸o viªn phô tr¸ch m«n häc §µo KiÕn Quèc 2
  3. I. C¸c thµnh phÇn c¬ b¶n cña m¸y tÝnh --------------------------------------------------------------------------------------------------- Tµi liÖu tham kh¶o: [5-p.99] Môc ®Ých: PhÇn nµy giíi thiÖu s¬ l−îc vÒ: CPU, bé nhí, bus vµ liªn kÕt gi÷a chóng. Ho¹t ®éng cña bé vi xö lý. --------------------------------------------------------------------------------------------------- I.1 – KiÕn tróc Von Neumann Theo c¸ch nh×n logic hÇu hÕt c¸c m¸y tÝnh ®−îc thiÕt kÕ theo nguyªn lý Von Neumann (do Jonh von Neumann ®Ò xuÊt). Theo kiÕn tróc Von Neumann m¸y tÝnh bao gåm 4 phÇn c¬ b¶n ®ã lµ: ¾ Bé vi xö lý (CPU : Central Processing Unit – khèi xö lý trung t©m) ¾ Bé nhí (Memory), ¾ HÖ th«ng vµo/ra(I/O: Input/Output) ¾ Bus ®Ó kÕt nèi, chuyÓn th«ng tin gi÷a c¸c thµnh phÇn. §ã lµ kiÕn tróc cã c¸c ®Æc ®iÓm sau: ¾ Bé nhí lµ n¬i l−u tr÷ d÷ liÖu vµ ch−¬ng tr×nh – chóng ta nãi ®Õn bé nhí trong. ¾ Ch−¬ng tr×nh lµ tËp c¸c chØ lÖnh, c¸c chØ lÖnh cña ch−¬ng tr×nh còng lµ 1 d¹ng d÷ liÖu ®−îc m· hãa ®Ó ®iÒu khiÓn ho¹t ®éng cña m¸y tÝnh. ¾ D÷ liÖu lµ c¸c th«ng tin ®−îc c¸c ch−¬ng tr×nh sö dông. ¾ Bé vi xö lý trung t©m (CPU) thùc hiÖn tuÇn tù thao t¸c: lÊy (n¹p) c¸c chØ lÖnh vµ d÷ liÖu(nÕu cÇn thiÕt) tõ bé nhí, gi¶i m· chØ lÖnh vµ thùc hiÖn c¸c t¸c vô cña ch−¬ng tr×nh. Tøc lµ bé vi xö lý lÆp ®i lÆp l¹i qu¸ tr×nh sau: • n¹p (fetching) c¸c chØ lÖnh tõ bé nhí • gi¶i m· chØ lÖnh • thùc hiÖn lÖnh Chu tr×nh xö lý c¸c chØ lÖnh (Còng cã tµi liÖu quan niÖm r»ng m¸y tÝnh gåm 3 thµnh phÇn: CPU, bé nhí vµ hÖ th«ng I/O) 3
  4. C¸c thµnh phÇn ®−îc g¾n trªn mét b¶ng m¹ch gäi lµ b¶ng m¹ch chñ (main board). Trong ®ã CPU lµ tr¸i tim cña hÖ thèng, trong gi¸o tr×nh nµy chóng ta chØ nãi ®Õn c¸c m¸y tÝnh IBM-PC vµ t−¬ng thÝch (hä c¸c m¸y PC sö dông bé vi xö lý Intel). I.1.1 – Khèi xö lý trung t©m CPU (Central Processing Unit) Nh− tªn gäi cña nã, ®©y thµnh phÇn trung t©m cña m¸y tÝnh, nã ®iÒu khiÓn mäi ho¹t ®éng cña m¸y tÝnh, n¬i thùc hiÖn mäi phÐp to¸n c¬ së, qu¶n lý vµ ®iÒu khiÓn c¸c thiÕt bÞ. C¸c thao t¸c mµ CPU cã thÓ thùc hiÖn ®−îc gäi lµ chØ thÞ (chØ lÖnh). Tõ khi xuÊt hiÖn bé vi xö lý cña h·ng Intel ®· ph¸t triÓn qua nhiÒu thÕ hÖ ®ã lµ: 8088, 8086, 80286, 80386,.., Pentium (ta gäi chung lµ hä 80x86), nh−ng vÒ mÆt logic (víi gãc ®é cña chóng ta) bé vi xö lý hä 80x86 bao gåm c¸c thµnh phÇn c¬ b¶n: ¾ Khèi thùc hiÖn EU (Excute Unit) vµ ¾ Khèi giao tiÕp bus BIU (Bus Interface Unit). a. Khèi EU Trong EU l¹i gåm hai khèi thµnh phÇn ®ã lµ khèi ®iÒu khiÓn CU (Control Unit), khèi sè häc vµ logic ALU (The Arithmetic & Logical Unit ) vµ c¸c thanh ghi. C¸c thµnh phÇn cña CPU • Khèi ®iÒu khiÓn(CU): Lµ khèi ®Þnh h−íng (direct) vµ ®iÒu khiÓn c¸c ho¹t ®éng cña c¸c thiÕt bÞ, diÔn dÞch c¸c chØ thÞ, quyÕt ®Þnh lÊy d÷ liÖu thÕ nµo, n¬i l−u kÕt qu¶, ph¸t c¸c tÝn hiÖu ®iÒu khiÓn tíi c¸c thiÕt bÞ yªu cÇu thùc hiÖn chØ thÞ,.. (Chóng ta biÕt ch−¬ng tr×nh lµ tËp c¸c lÖnh, CU diÔn dÞch m· lÖnh ®Ó ph¸t sinh c¸c tÝn hiÖu ®iÒu khiÓn). 4
  5. • Khèi sè häc vµ logic(ALU): Chøc n¨ng cña khèi nµy lµ thùc hiÖn c¸c phÐp to¸n sè häc vµ logic c¬ së. Trong qu¸ tr×nh thùc hiÖn c¸c thao t¸c, ALU lÊy d÷ liÖu tõ n¬i l−u tr÷ t¹m thêi trong CPU ®ã lµ c¸c thanh ghi. • C¸c thanh ghi: Bªn trong bé vi xö lý gåm cã 14 thanh ghi 16 bit, mçi thanh ghi cã mét c«ng dông kh¸c nhau vµ ®−îc chia 4 nhãm: ¾ C¸c thanh ghi ®a chøc n¨ng: − AX (Accumulator – thanh ghi tÝch lòy) − BX (Base – thanh ghi c¬ së) − CX (count – thanh ghi ®Õm) − DX (Data- thanh ghi d÷ liÖu). Mçi thanh ghi ®a n¨ng l¹i bao gåm 2 (nöa) thanh ghi 8 bit, ®ã lµ AX gåm nöa cao AH, nöa thÊp AL (H, L lµ kÝ tù viÕt t¾t cña High vµ Low). T−¬ng tù BX gåm BH, BL, CX gåm CH, CL, DX gåm DH, DL C¸c thanh ghi ®a n¨ng ¾ C¸c thanh ghi ®o¹n: − CS (Code segment - ®o¹n m· lÖnh) − DS (Data segment - ®o¹n d÷ liÖu) − EX (Extra segment - ®o¹n më réng) − SS(Stack segment- ®o¹n ng¨n xÕp) ¾ Thanh ghi con trá vµ chØ sè: − SP (Stack pointer – con trá ®Ønh ng¨n xÕp) − BP (Base pointer – con trá c¬ së) − SI (Source index – chØ sè nguån) − DI (Destination index – chØ sè ®Ých) − IP (instruction pointer - thanh ghi trá lÖnh) ¾ Thanh ghi cê (Flags): Thanh ghi cê gåm 16 bit, mçi cê lµ 1 bit ®−îc sö dông ®Ó thÓ hiÖn 1 tr¹ng th¸i cña bé vi xö lý t¹i thêi ®iÓm hiÖn t¹i trong qu¸ tr×nh thùc hiÖn ch−¬ng tr×nh, víi 8086 chØ cã 9 bit (9 cê) ®−îc sö dông. 5
  6. Thanh ghi cê vµ c¸c cê - CF (Cary Flag): Cê nhí, cã 2 gi¸ trÞ CY (carry yes) vµ NC (no carry), cê nµy ®−îc bËt (CY) khi sè nhí v−ît khái bit cã trong sè cao nhÊt. - PF(Parity Flag): Cê ch½n lÎ, cã 2 gi¸ trÞ PE (Perity Even – ch½n) vµ PO (Perity Odd- lÎ). Cê nµy nhËn gi¸ trÞ PE hoÆc PO khi byte sè liÖu qua 1 cæng nµo ®ã cã sè c¸c bit 1 lµ ch½n hoÆc lÎ. - AF(auxiliary): cê bæ trî, cã 2 gi¸ trÞ AC vµ NA. Cê nµy ®−îc bËt (AC) khi cã sè nhí v−ît qua 4 ch÷ sè cã träng sè cao nhÊt. - ZF (Zero flag): cã 2 gi¸ trÞ ZR vµ NZ. Cê zero ®−îc bËt (ZR) khi kÕt qu¶ phÐp to¸n=0. - SF (Sign flag): Cê dÊu, cã c¸c gi¸ trÞ NG(Negative) khi sè cã dÊu, vµ PL(Plus) - TF (Trap Single step flag): Cê ch¹y tõng b−íc, nÕu TF =1 th× bé vi xö lý ch¹y ch−¬ng tr×nh theo chÕ ®é tõng b−íc. - IF (Interrupt flag): cê ng¾t, cã 2 gi¸ trÞ EI (Enable Interupt) vµ DI (Disable Interupt. NÕu cê bËt gi¸ trÞ EI th× bé vi xö lý cho phÐp ng¾t, ng−îc l¹i c¸c ng¾t cã thÓ che sÏ bÞ cÊm. - DF (Direction Flag): Cê h−íng, nÕu cã gi¸ trÞ UP th× c¸c lÖnh vËn chuyÓn miÒn d÷ liÖu sÏ theo h−íng ®Þa chØ t¨ng, ng−îc l¹i nÕu cã gi¸ trÞ DN(down) sÏ theo h−íng ®Þa chØ gi¶m. - OF (Overflow Flag): Cê trµn, cã gi¸ trÞ OV khi x¶y ra trµn sè, ng−îc l¹i cã gi¸ trÞ NV. Víi bé vi xö lý 386 trë vÒ sau, c¸c thanh ghi chung AX, BX, CX, DX, SI, DI, BP, SP, thanh ghi cê ®−îc më réng thµnh c¸c thanh ghi 32 bit – EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP. Sù kh¸c nhau gi÷a c¸c thÕ hÖ vi xö lý trong hä x86 xin xem [5.p.110- 135} b. BIU (Bus Interface Unit): Khèi EU kh«ng nèi trùc tiÕp víi bªn ngoµi, nã thùc hiÖn viÖc giao tiÕp th«ng qua BIU. Khi cÇn lÊy 1 lÖnh hoÆc truy xuÊt bé nhí th× nã yªu cÇu BIU thùc hiÖn. C¸c ®Þa chØ mµ EU thao t¸c lµ 16 bit (segment, offset) BIU sÏ thùc hiÖn ®æi sang ®Þa chØ vËt lý 20 bit vµ göi vµo bus ®Þa chØ. 6
  7. I.1.2 – Bus §©y lµ thµnh phÇn ®Ó kÕt nçi vµ truyÒn th«ng tin gi÷a c¸c thµnh phÇn cña hÖ thèng, cã 3 lo¹i ®ã lµ: − bus d÷ liÖu (data bus) − bus ®Þa chØ (address bus) vµ − bus ®iÒu khiÓn (control bus). a. data bus: lµ bus chuyÓn d÷ liÖu gi÷a CPU vµ c¸c thµnh phÇn kh¸c hoÆc gi÷a c¸c thµnh phÇn trong hÖ thèng m¸y tÝnh. “KÝch th−íc” bus d÷ liÖu tïy thuéc vµo thÕ hÖ m¸y tÝnh cô thÓ (khi nãi m¸y 16 hoÆc 32 bit tøc lµ nãi m¸y tÝnh cã bus d÷ liÖu lµ 16 hay 32 bit- tøc lµ ng−êi ta dïng kÝch cì cña bus d÷ liÖu ®Ó nãi ‘kÝch cì ‘ cña CPU) CPU 8088 8086 80286 80386SX 80386DX 80486 80586/Pentium bus d÷ liÖu 8 16 16 16 32 32 64 b. address bus: Trong khi d÷ liÖu ®−îc truyÒn ch¼ng h¹n tõ bé nhí (hoÆc I/O) tíi CPU qua data bus th× vÊn ®Ò lµ d÷ liÖu ®ã ®−îc lÊy tõ « nhí nµo tøc lµ « nhí cã ®Þa chØ bao nhiªu (hoÆc tõ thiÕt bÞ nµo)? nh− vËy CPU ph¶i ph¸t tÝn hiÖu lµ ®Þa chØ cña d÷ liÖu cÇn lÊy, tÝn hiÖu ®ã ®−îc göi qua 1 bus kh¸c gäi lµ bus ®Þa chØ - sù thùc th× mçi « nhí hoÆc thiÕt bÞ I/O ®Òu cã 1 ®Þa chØ ph©n biÖt vµ nh− vËy trªn bus ®Þa chØ chóng ®−îc coi t−¬ng tù nhau. Víi 1 ®−êng ®Þa chØ th× chØ cã 2 gi¸ trÞ kh¸c nhau lµ 0 vµ 1, do vËy chØ cã thÓ dïng ®Ó x¸c ®Þnh ®óng 2 ®Þa chØ, nÕu cã n ®−êng ®Þa chØ th× cã thÓ x¸c ®Þnh ®−îc 2n ®Þa chØ kh¸c nhau. Nh− vËy sè bit cña bus ®Þa chØ quyÕt ®Þnh kh«ng gian nhí tèi ®a vµ c¸c thiªt bÞ I/O cña m¸y tÝnh, kÝch th−íc cña bus ®Þa chØ còng kh¸c nhau tuú thuéc thÕ hÖ bé vi xö lý. CPU 8088 8086 80286 80386SX 80386DX 80486 80586/Pentium bus ®Þa chØ 20 20 24 24 32 32 32 c. control bus: Lµ bus truyÒn t¶i c¸c tÝn hiÖu ®iÒu khiÓn mµ CPU liªn l¹c hay ®iÒu khiÓn c¸c thµnh phÇn kh¸c cña m¸y tÝnh: vÝ dô tÝn hiÖu ®iÒu khiÓn göi hay nhËn d÷ liÖu tíi/tõ bus d÷ liÖu. Trªn bus ®iÒu khiÓn cã ®−êng ®äc, ®−êng ghi, tÝn hiÖu ng¾t,.. (khi ®−êng read vµ write ®Òu b»ng 0 cã nghÜa lµ CPU kh«ng trao ®æi d÷ liÖu víi bé nhí hoÆc thiÕt bÞ I/O, khi ®−êng read =0, lµ CPU ®ang nhËn, nÕu ®−êng write =0 tøc lµ CPU ®ang göi d÷ liÖu – X.[5.p87]). Hä 80x86 cung cÊp 2 kh«ng gian ®Þa chØ ph©n biÖt cho bé nhí vµ c¸c I/O. C¸c bus ®Þa chØ cã thÓ cã kÝch th−íc kh¸c nhau nh−ng c¸c bus ®Þa chØ I/O lu«n lµ 16 bit, nh− vËy tèi ®a cã thÓ cã 216 ®Þa chØ I/O kh¸c nhau., cã thÓ 1 sè thiÕt bÞ I/O nh− bµn phÝm, m¸y in,.. kh«ng ph¶i chØ cã 1 ®Þa chØ, thùc ra c¸c øng dông còng ch¼ng cÇn hÕt b»ng Êy ®Þa chØ – víi IBM PC chØ cã 1024 ®Þa chØ I/O. I.1.3 - Bé nhí chÝnh (Main memory) 7
  8. Lµ kh«ng gian bao gåm tËp c¸c « nhí, lµ n¬i l−u tr÷ d÷ liÖu vµ c¸c chØ thÞ lÖnh (instruction). C¸c th«ng tin ®−îc l−u trong c¸c « nhí, mçi « cã1 ®Þa chØ duy nhÊt (xem phÇn bé nhí). Hä x86 hç trî ®Þa chØ kiÓu byte, tøc lµ ®¸nh ®Þa chØ « nhí theo byte. KÝch th−íc tèi ®a (sè ®Þa chØ tèi ®a) phô thuéc vµo kÝch câ cña bus ®Þa chØ, nÕu bus ®Þa chØ lµ n (bit) th× kh«ng gia nhí cã thÓ lµ 2n byte. Thao t¸c ®äc/ghi 1 « nhí: Gi¶ sö CPU cÇn nhËn/ghi gi¸ trÞ 0 (1 byte) t¹i « nhí cã ®Þa chØ 125 th× c¸c b−íc sÏ lµ: [®äc] [ghi] ®Æt 125 lªn bus ®Þa chØ ®Æt gi¸ trÞ cÇn ghi lªn bus d÷ liÖu ®Æt tÝn hiÖu ®iÒu khiÓn read=0 ®Æt 125 lªn bus ®Þa chØ ®Æt tÝn hiÖu ®iÒu khiÓn write =0 nhËn gi¸ trÞ trªn bus d÷ liÖu set address set address assert control signal 'read' set data on the data bus assert control signal 'write' get the data from the data bus finish H×nh: §äc/ghi 1 byte §ã lµ 1 byte cßn nÕu cÇn ®äc/ghi 1 word (2 byte) hoÆc double word (2 word) t¹i 1 ®Þa chØ nµo ®ã bé vi xö lý x86 gi¶i quyÕt b»ng c¸ch ®Æt byte thÊp nhÊt t¹i ®Þa chØ chØ ®Þnh vµ byte cao t¹i « nã tiÕp theo, tøc lµ lÇn l−ît ®äc hay ghi 1 byte nh−ng theo vÞ trÝ tõ thÊp lªn cao. Nh−ng víi c¸c bé vi xö lý cã bus d÷ liÖu lµ 16 hoÆc32 bit th× mçi lÇn ®äc hay ghi CPU thùc hiÖn víi 2 hay 4 byte, bé nhí ®−îc tæ chøc d¹ng c¸c b¨ng (bank) 2 b¨ng (b¨ng ch½n, b¨ng lÎ) hoÆc 4 b¨ng (b¨ng 0,.., b¨ng 3) 8
  9. §äc/Ghi 2 / 4 byte I.1.4 – HÖ thèng I/O M¸y tÝnh cÇn ph¶i trao ®æi d÷ liÖu víi thÕ giíi bªn ngoµi th«ng qua bµn phÝm, chuét, æ ®Üa,.., mµn h×nh, m¸y in...(hay nãi c¸c thiÕt bÞ ngo¹i vi), viÖc trao ®æi th«ng tin gi÷a CPU vµ c¸c thiÕt bÞ ngo¹i vi ®−îc thùc hiÖn th«ng qua mét hÖ thèng ®ã lµ hÖ thèng vµo/ra (I/O). Cïng víi bus ®Þa chØ cã thÓ lµ 20, 24 hay 32 bit ®Ó x¸c ®Þnh ®Þa chØ cña bé nhí, hä 80x86 cßn cung cÊp bus ®Þa chØ I/O 16 bit. Nh− vËy hä m¸y x86 cã 2 kh«ng gian ®Þa chØ ph©n biÖt, ®ã lµ kh«ng gian ®Þa chØ bé nhí chÝnh vµ kh«ng gian ®Þa chØ I/O. Còng vËy c¸c ®−êng trªn bus ®iÒu khiÓn còng kh¸c nhau cho bé nhí vµ I/O. §Þa chØ I/O t−¬ng tù nh− ®Þa chØ bé nhí chØ cã kh¸c lµ nã lu«n lµ 16 bit, I/O vµ bé nhí dïng chung (share) data bus, vµ 16 bit thÊp cña bus ®Þa chØ (do I/O chØ cã 16 bit nªn I/O chØ dïng chung 16 bit). Cã nh÷n giíi h¹n nhÊt ®Þnh trªn hÖ thèng I/O cña m¸y tÝnh IBM PC ch¼ng h¹n nh− CPU ph¶i sö dông c¸c chØ lÖnh ®Æc biÖt ®Ó truy xuÊt thiÕt bÞ I/O, ng−êi ph¸t triÓn ph¶i tu©n thao c¸ch ®Þnh vÞ I/O cña nhµ thiÕt kÕ, vµ kh«ng qu¸ 65537 ®Þa chØ I/O, nh−êng nh− sè ®Þa chØ ®ã còng nhiÒu nh−ng nÕu b¹n lµm viÖc víi card mµn h×nh VGA th× b»ng Êy ®Þa chØ lµ ch−a ®ñ. RÊt may theo thiÕt kÕ, ng−êi ta cã thÓ ¸nh x¹ (map) c¸c thiÕt bÞ vµo ra vµo mét vïng nhí vµ sö dông kh«ng gian ®Þa chØ nµy nh− lµ víi ®Þa chØ cña I/O – chi tiÕt h¬n vÒ phÇn nµy c¸c b¹n cã thÓ tham kh¶o [4. ch−¬ng 3] I.2- Tæ chøc bé nhí vµ c¸c mode ®Þa chØ I.2.1 - C¸c vïng bé nhí Chóng ta cã thÓ h×nh dung kh«ng gian bé nhí lµ tËp c¸c « nhí ®−îc ®¸nh ®Þa chØ theo byte (tuÇn tù) tõ thÊp tíi cao, tæng dung l−îng tèi ®a cña kh«ng gian phô thuéc kÝch cì (bit) cña bus ®Þa chØ, nã ®−îc x¸c ®Þnh = 2n (víi n lµ kÝch th−íc cña bus ®Þa chØ ), gåm c¸c vïng: ¾ Vïng nhí quy −íc (Conventional Memory): gåm 640KB ®Çu tiªn (cã ®Þa chØ thÊp nhÊt tõ 00000h – tíi 9FFFFh), ®©y lµ vïng dµnh cho c¸c ch−¬ng tr×nh chuÈn cña DOS vµ c¸c ch−¬ng tr×nh th−êng tró, vµ hÇu hÕt c¸c øng dông ch¹y trªn DOS. ¾ Vïng nhí trªn(Upper Memory Area - UMA): Lµ vïng nhí gåm 384KB kÕ tiÕp trªn vïng nhí quy −íc (cã ®Þa chØ A0000h – FFFFFh). Nã th−êng dµnh cho c¸c thiÕt bÞ hÖ thèng hoÆc c¸c môc ®Ých ®Æc biÖt nh− vïng ¶nh ROM (ROM shadow) hay c¸c tr×nh ®iÒu khiÓn(driver) 9
  10. ¾ Vïng nhí cao (High Memory Area - HMA): Vïng nµy cã 64KB ®Çu tiªn trªn vïng 1MB (tõ 100000h – 10FFFFh, vïng ®Çu cña Extended Memory). Vïng nµy cã thÓ truy xuÊt bëi bé vi xö lý ngay trong chÕ ®é real mode (®iÒu nµy lµm nã kh¸c víi vïng cßn l¹i cña Extended Memory), nã th−êng dïng cho viÖc më r«ng bé nhí quy −íc(?) ¾ Vïng nhí më réng (Extended Memory): lµ tÊt c¶ vïng nhí cßn l¹i tõ sau HMA cho tíi hÕt. Nã dïng cho c¸c ch−¬ng tr×nh vµ d÷ liÖu khi ch¹y trong protected mode. C¸c vïng bé nhí vËt lý I.2.2 - §Þa chØ segment (ph©n ®o¹n) vµ offset (®é dÞch) Chóng ta ®· ®Ò cËp ë trªn, ®Þa chØ bé nhí ®−îc ®¸nh tuyÕn tÝnh, thùc tÕ lµ nh− vËy, nh−ng bé vi xö lý kh«ng dïng c¸c ®ã ®Ó ®Þnh vÞ mét « nhí cô thÓ mµ nã sö dông mét c¬ chÕ kh¸c lµ kh«ng gian nhí ®−îc chia thµnh c¸c ®o¹n, mçi ®o¹n(segment) 64KB vµ trong mçi ®o¹n l¹i ®Þnh vÞ mçi « theo ®é rêi offset (thø tù cña « trong ®o¹n). Nh− vËy ®Þa chØ lµ cÆp gåm ®Þa chØ segment vµ ®Þa chØ offset ký hiÖu lµ segment:offset, cÆp nµy kÕt hîp víi nhau theo c¸ch nµo ®ã cho ta ®Þa chØ thùc cña « nhí. Nh− chóng ta ®· nãi ë phÇn trªn, CPU chØ xö lý ®Þa chØ theo c¸c thanh ghi 16 bit, vµ 1 ®Þa chØ gåm 1 gi¸ trÞ lµ ®Þa chØ segment(16 bit) vµ ®Þa chØ offset (16 bit – còng v× offset lµ 16 bit nªn kÝch th−íc 1 ®o¹n lµ 64KB), chóng ®−îc BIU xö lý thµnh ®Þa chØ thùc ( ®Þa chØ vËt lý) 20 bit b»ng c¸ch dÞch tr¸i segment 4 bit (nh©n 16) råi céng víi ®Þa chØ offset. VÝ dô ta cã C000h:8000h sÏ x¸c ®Þnh ®Þa chØ thùc C000h*16+8000h = C8000h. Nh− vËy chóng ta dÔ thÊy cã thÓ cã nhiÒu cÆp ®Þa chØ segment:offset t−¬ng øng víi 1 ®Þa chØ vËt lý ch¼ng h¹n nh− C800:0000 còng t−¬ng øng víi ®Þa chØ vËt lý C8000h. I.2.3 - C¸c kiÓu ®Þa ®Þnh vÞ (mode ®Þa chØ) Ph−¬ng ph¸p x¸c ®Þnh vÞ trÝ trong bé nhí cña mét to¸n h¹ng ®−îc gäi lµ kiÓu ®Þnh vÞ ®Þa chØ – address mode – hay mode ®Þa chØ, víi hä 80x86 chóng ta cã c¸c kiÓu sau: ¾ Mode ®Þa chØ thanh ghi: KiÓu ®Þa chØ nµy thanh ghi ®−îc dïng nh− 1 to¸n h¹ng trong c¸c thao t¸c tøc lµ to¸n h¹ng lµ chÝnh thanh ghi 10
  11. vÝ dô: MOV AX,BX ¾ Mode ®Þa chØ tøc thêi: To¸n h¹ng lµ 1 h»ng gi¸ trÞ vÝ dô: mov ah,02 ¾ Mode ®Þa chØ trôc tiÕp: Trong mode nµy th× to¸n h¹ng lµ 1 ®Þa chØ « nhí (trong hîp ng÷ ®©y cã thÓ lµ 1 tªn nh·n) ¾ Mode ®Þa chØ gi¸n tiÕp thanh ghi: to¸n h¹ng lµ 1 « nhí, ®Þa chØ « nhí nµy n»m trong 1 thanh ghi con trá vÝ dô [BX] ¾ Mode ®Þa chØ t−¬ng ®èi c¬ së: Mét to¸n h¹ng lµ ®Þa chØ « nhí ®−îc x¸c ®Þnh bëi 1 thanh ghi con trá céng víi 1 gi¸ trÞ ®é rêi nµo ®ã, vÝ dô [BX]+5. Thùc chÊt kiÓu ®Þnh vÞ nµy còng t−¬ng tù nh− [BX + 5] ¾ Mode ®Þa chØ chØ sè ho¸ trùc tiÕp: Sö dông thanh ghi chØ sè ®Ó x¸c ®Þnh 1 « nhí theo thø tù, vÝ dô array[DI], array[SI] (array lµ 1 nh·n) ¾ Mode ®Þa chØ chØ sè ho¸ c¬ së: cos 1 to¸n h¹ng lµ ®Þa chØ « nhí ®−îc x¸c ®Þnh bëi thanh ghi con trá kÕt hîp víi 1 chØ sè d¹ng [BX][DI], trong ®ã BX trá tíi ®Çu vïng nhí, vµ DI cho biÕt thø tù (®é lÖch) cña « nhí trong vïng cã ®Þa chØ ®Çu x¸c ®Þnh bëi BX. VÝ dô: BX=0100, DI=2 th× [BX][DI] sÏ cho gi¸ trÞ cña « nhí cã ®Þa chØ (offset) t¹i 100+2 II - HÖ ®Õm vµ ®æi c¬ sè Víi chóng ta hÖ ®Õm thËp ph©n lµ quen thuéc, tù nhiªn vµ thuËn lîi, nh−ng chóng ta cã tù hái vËy trong m¸y c¸c sè cã ®−îc biÓu diÔn nh− vËy kh«ng hay nã ®−îc biÓu diÔn theo hÖ ®Õm kh¸c. Chóng ta biÕt r»ng m· lÖnh ch−¬ng tr×nh còng nh− d÷ liÖu ®Òu l−u trong bé nhí tr−íc khi ®−îc xö lý. C¸c « nhí ®Òu ®−îc h×nh thµnh tõ c¸c phÇn tö nhí cã 2 tr¹ng th¸i mµ chóng ta hiÓu lµ nã biÓu diÔn hai gi¸ trÞ 0 vµ 1 (bit) , vµ mäi d÷ liÖu cña chóng ta ®Òu biÓu diÔn qua hai con sè nµy. Nh− vËy th«ng tin trong m¸y tÝnh ®−îc biÓu diÔn qua hÖ ®Õm nhÞ ph©n. Tuy nhiªn khi chóng ta viÕt hoÆc hiÓn thÞ theo hÖ nhÞ ph©n th× th−êng lµ qu¸ dµi vµ bÊt tiÖn do ®ã th−êng chóng ta sö dông hÖ ®Õm 16 (hexadecimal – gäi t¾t lµ hex) a. HÖ thËp ph©n – c¬ sè 10 §©y lµ hÖ ®Õm quen thuéc víi chóng ta nhÊt, nã gåm 10 ch÷ sè 0,1, .. ,9, mét ®¬n vÞ cña ch÷ sè hµng bªn tr¸i b»ng 10 lÇn ®¬n vÞ ch÷ sè hµng bªn ph¶i kÕ tiÕp nã. b. HÖ nhÞ ph©n – hÖ ®Õm c¬ sè 2 Nh− ®· nãi ë trªn, ®©y lµ hÖ ®Õm chØ gåm 2 ch÷ sè 0 vµ 1. Mét sè nhÞ ph©n gi¸ trÞ 1 con sè còng phô thuéc vµo vÞ trÝ cña nã nh− sau: gi¶ sö cã sè x ®−îc viÕt trong hÖ nhÞ ph©n cã d¹ng: xkxk-1,..,x1x0 trong ®ã xi lµ mét ch÷ sè nhÞ ph©n th× gi¸ trÞ cña nã x = xk * 2k + xk-1 * 2k-1 +,..,+ x1* 21 + x0 *20 c. HÖ hexa - c¬ sè 16 Lµ hÖ ®Õm gåm 16 con sè 0, 1, , 9, A, B, C, D, E, F (®Ó biÓu diÔn c¸c gi¸ trÞ t−¬ng øng 0,1, ,9, 10, ,15). Vµ gi¸ trÞ cña 1 ®¬n vÞ hµng bªn tr¸i b»ng 16 lÇn 1 ®¬n vÞ hµng bªn ph¶i kÕ nã. Tøc lµ nÕu y=ykyk-1,..,y1y0 trong ®ã yi lµ mét ch÷ sè hex th× gi¸ trÞ cña y ®−îc x¸c ®Þnh: y = yk * 16k + yk-1 * 16k-1 +,..,+ y1* 161 + y0 * 160 11
  12. T¹i sao kh«ng chØ sö dông hÖ thËp ph©n mµ l¹i sö dông hÖ 16? theo khÝa c¹nh nµo ®ã th× sö con sè hex thuËn lîi h¬n sè hÖ 10, ch¼ng h¹n nh− 1 ch÷ sè hÖ 16 t−¬ng ®−¬ng víi 4 ch÷ sè hÖ 2, vµ 1 byte gåm ®óng 2 ch÷ sè hex. d. §æi c¬ sè Trong thùc tÕ chóng ta cã thÓ cã mét sè ®−îc cho trong mét c¬ sè nµy nh−ng chóng ta cÇn biÓu diÔn cña nã trong mét c¬ sè kh¸c. Trong phÇn nµy chóng ta nªu v¾n t¾t ph−¬ng ph¸p ®Ó ®æi biÓu diÔn cña mét sè nguyªn d−¬ng gi÷a c¸c c¬ sè. Bµi to¸n lµ chóng ta cã sè N trong hÖ c¬ sè P vµ chóng ta cÇn ®æi sang biÓu diÔn trong hÖ c¬ sè Q. Gi¶ sö sè ®ã trong hÖ Q lµ qk qk-1 …q1 q0. Nh− vËy gi¸ trÞ cña N ®−îc tÝnh lµ: N = qk * Qk + qk-1 * Qk-1 +,..,+ q1* Q1 + q0 c«ng viÖc cña ta lµ ph¶i x¸c ®Þnh c¸c ch÷ sè qi (i=0,..,k, qi ∈[0,Q-1]) C¸c b¹n thÊy r»ng nÕu ta thùc hiÖn chia N cho Q chóng ta sÏ ®−îc phÇn nguyªn lµ qk * Qk-1 + qk-1 * Qk-2 +,..,+ q1 vµ phÇn d− lµ q0. Nh− vËy sau mét phÐp chia chóng ta x¸c ®Þnh ®−îc phÇn d− chÝnh lµ ch÷ sè bªn ph¶i nhÊt cÇn t×m. TiÕp tôc thùc hiÖn phÐp chia víi phÇn nguyªn thu ®−îc chóng ta thu ®−îc q1 ,.. qu¸ tr×nh chia kÕt thóc khi ta nhËn ®−îc qk tøc lµ khi ta nhËn ®−îc phÇn nguyªn cña phÐp chia =0, c¸c sè d− thu ®−îc chÝnh lµ c¸c ch÷ sè cÇn t×m. Tõ ®ã ta cã thuËt to¸n tæng qu¸t nh− sau: VÝ dô: cho N = 745 trong hÖ 10, h·y t×m biÓu diÔn cña N trong hÖ 16 chóng ta thùc hiÖn liªn tiÕp phÐp chia N cho 16 LÇn chia PhÇn nguyªn PhÇn d− 1 46 9 2 2 E 3 0 2 c¸c sè d− thu ®−îc viÕt theo thø tù ng−îc sÏ cho ta biÓu diÔn cÇn t×m 12
  13. N=2E9h Tuy nhiªn víi mét sè tr−êng hîp cô thÓ ®Æc biÖt chóng ta kh«ng sö dông thuËt to¸n trªn mµ dïng c¸ch kh¸c hiÖu qu¶ h¬n ®ã lµ c¸c tr−êng hîp: ¾ §æi hÖ sè Q sang hÖ 10: gi¶ sö cã N = qk qk-1 …q1 q0. Nh− vËy biÓu diÔn cña N trong hÖ 10 lµ: N = q’k * Qk + q’k-1 * Qk-1 +,..,+ q’1* Q1 + q’0 . Trong ®ã q’i lµ gi¸ trÞ trong hÖ 10 t−¬ng øng víi gi¸ trÞ con sè qi trong hÖ Q. VÝ dô: N = 2B5(trong hÖ 16) ≡ 2*162 + 11*16+5 = 693(trong hÖ 10) ¾ §æi gi÷a c¬ sè 2 vµ 16: Chóng ta biÕt 1 ch÷ sè hÖ 16 t−¬ng ®−¬ng 4 ch÷ sè hÖ 2 do vËy khi ®æi tõ hÖ 16 sang hÖ 2chóng ta thay mçi ch÷ sè hÖ 16 b»ng 4 ch÷ sè hÖ 2 cã gi¸ trÞ t−¬ng ®−¬ng. VÝ dô: 2 4 F(hÖ 16) 0010 0100 1111 (hÖ 2) Vµ khi ®æi tõ hÖ 2 sang hÖ 16 chóng ta thay tõng nhãm 4 ch÷ sè nhÞ ph©n (tõ ph¶i sang tr¸i) b»ng 1 ch÷ sè cã gi¸ trÞ t−¬ng ®−¬ng trong hÖ 16. VÝ dô: 10001101011 ≡ 46B e. BiÓu diÔn sè nhÞ ph©n cã dÊu Khi l−u tr÷ sè nguyªn kh«ng cã dÊu(tøc lµ sè d−¬ng) trong mét « nhí cã n(n=8,16,32) bit th× toµn bé n bÝt ®−îc dïng ®Ó biÓu diÔn gi¸ trÞ cña sè. C©u hái ®Æt ra lµ sè ©m ®−îc l−u nh− thÕ nµo? Khi cÇn biÓu diÔn mét sè cã dÊu th× bit cao nhÊt ®−îc sö dông ®Ó biÓu diÔn dÊu, nÕu sè ©m th× bÝt dÊu cã gi¸ trÞ =1 vµ nÕu lµ sè d−¬ng th× bÝt dÊu cã gi¸ trÞ =0, vµ nh− vËy chØ cßn n-1 bit dïng ®Ó l−u tr÷ gi¸ trÞ cña sè. VÝ dô khi sö dông 1 byte ®Ó biÓu diÔn sè ©m th× bit 7 ®−îc dïng lµm dÊu, 7 bit cßn l¹i (bit 0,..,6) ®Ó l−u tr÷ gi¸ trÞ. Cã ph¶i sè –3 ®−îc biÓu diÔn theo c¸ch bit dÊu=1 vµ phÇn gi¸ trÞ biÓu diÔn sè 3 hay kh«ng? trong m¸y tÝnh kh«ng ph¶i nh− vËy mµ ng−êi ta sö dông ph−¬ng ph¸p bï 2, tøc lµ theo ý t−ëng sè ©m lµ 1 sè mµ céng víi sè d−¬ng ®èi cña nã cho ta gi¸ trÞ 0. Muèn t×m biÓu diÔn nhÞ ph©n cña 1 sè -a chóng ta thùc hiÖn theo c¸c b−íc : (1) - t×m d¹ng nhÞ ph©n cña sè d−¬ng a (2) - ®¶o bit (1 chuyÓn thµnh 0, 0 chuyÓn thµnh 1) cña biÓu diÔn (1) t×m ®−îc (3) - céng 1 vµo (2) sÏ thu ®−îc d¹ng cÇn t×m VÝ dô 1: H·y t×m biÓu diÔn nhÞ ph©n cña –1 (8 bit) (1) - d¹ng nhÞ ph©n cña sè d−¬ng 1 00000001 (2) - ®¶o bit 11111110 (3) - céng 1 11111111 ( -1) Nh−ng khi b¹n kiÓm tra l¹i : (-1) + 1 = 11111111 + 00000001 =100000000. KÕt qu¶ l¹i kh«ng ph¶i b»ng 0? ®óng b»ng 0, v× sè cña chóng ta lµ 8 bit, kÕt qu¶ phÐp céng mµ b¹n t×m ®−îc lµ 9 con sè nhÞ ph©n, 9 con sè trong 8 bit nh− vËy chØ cã 8 con sè bªn ph¶i ®−îc gi÷ l¹i cßn bit bªn tr¸i nhÊt bÞ bá qua tøc lµ chØ cßn 8 sè 0, vµ nh− vËy kÕt qu¶ = 0. VÝ dô 2: H·y t×m biÓu diÔn nhÞ ph©n cña –105 (8 bit) (1) - d¹ng nhÞ ph©n cña sè d−¬ng 105 01101001 13
  14. (2) - ®¶o bit 10010110 (3) - céng 1 10010111 (-105) Nh− vËy chóng ta hoµn toµn cã thÓ t×m biÓu diÔn nhÞ ph©n cña 1 sè nguyªn ©m bÊt kú, tuy nhiªn chóng ta ph¶i biÕt nã ®−îc biÓu diÔn trong bao nhiªu bit, ®iÒu ®ã lµ quan träng thËt vËy nÕu sè –105 trong 1 byte cã d¹ng 10010111 nh−ng nÕu trong 2 byte sÏ lµ 1111111110010111. VËy ng−îc l¹i cho 1 d¹ng nhÞ ph©n cña sè ©m, h·y x¸c ®Þnh gi¸ trÞ cña sè ®ã. Tøc lµ cho d¹ng nhÞ ph©n xkxk-1,..,x1x0, h·y x¸c ®ã lµ sè nµo. C«ng viÖc còng hÕt søc ®¬n gi¶n ®ã lµ b¹n còng thùc hiÖn theo c¸c b−íc sau: ¾ ®¶o bit cña xkxk-1,..,x1x0 ¾ céng 1 vµo d¹ng sau khi ®¶o bit ta ®−îc biÓu diÔn cña sè d−¬ng ®èi víi nã VÝ dô: cho 10110111 - ®¶o bit thu ®−îc : 01001000 - céng 1 : 01001001 (= 73) vËy ®ã lµ sè –73 C©u hái vµ bµi tËp III. Ng¾t vµ vector ng¾t -------------------------------------------------------------------------------------------- Môc ®Ých: PhÇn nµy giíi thiÖu vÒ ¾ kh¸i niÖm ng¾t ¾ vector ng¾t, b¶ng vector ng¾t ¾ c¸ch thùc hiÖn ng¾t ¾ giíi thiÖu mét sè ng¾t cña DOS, ROMBIOS Yªu cÇu: sinh viªn ph¶i n¾m v÷ng kh¸i niÖm ng¾t, c¬ chÕ cña ng¾t, c¸ch thùc hiÖn 1 ng¾t, biÕt c¸ch sö dông mét sè chøc n¨ng th«ng dông cña ng¾t 21h. Tµi liÖu tham kh¶o: [1- p.16- 18; 5-c17] ------------------------------------------------------------------------------------------- Khi t×m hiÓu ho¹t ®éng cña bé vi xö lý còng nh− ng«n ng÷ lËp tr×nh bËc thÊp, mét kh¸i niÖm quan träng ®ã lµ ng¾t (interrupt) vµ c¬ chÕ lµm viÖc cña nã. §iÒu nµy ®Æc biÖt quan träng víi nh÷ng ai ®i s©u vµo lÜnh vùc lËp tr×nh hÖ thèng. Trong gi¸o tr×nh nµy chóng ta kh«ng cã ý ®Þnh bµn vÒ ng¾t mét c¸ch ®Çy ®ñ nhÊt mµ chØ ®Ò cËp tíi nh÷ng vÊn ®Ò c¬ b¶n, chi tiÕt c¸c ng¾t b¹n ®äc cã thÓ tra cøu trong[4], [5.P.1005] III.1. Kh¸i niÖm ng¾t 14
  15. Ng¾t lµ g×? ®Ó tr¶ lêi c©u hái nµy b¹n h·y t−ëng t−îng lµ CPU ®ang tuÇn tù thùc thi c¸c chØ thÞ cña mét ch−¬ng tr×nh nµo ®ã, nÕu kh«ng cã g× bÊt th−êng th× nã sÏ liªn tôc thùc hiÖn viÖc n¹p vµ thi hµnh c¸c chØ thÞ trong tËp c¸c lÖnh. Nh−ng nÕu nã míi thùc hiÖn ®−îc mét sè lÖnh nµo ®ã x¶y ra sù kiÖn ng−êi sö dông bÊm 1 phÝm trªn bµn phÝm hoÆc 1 thao t¸c nµo ®ã kh¸c mµ ®ßi hái bé vi xö lý ph¶i nhËn biÕt vµ xö lý sù kiÖn ®ã, nh− vËy cã nghÜa lµ buéc bé vi xö lý t¹m ng−ng ch−¬ng tr×nh ®ang ch¹y ®Ó ®¸p øng yªu cÇu ph¸t sinh, vµ dÜ nhiªn khi xö lý xong yªu cÇu ph¸t sinh ®ã nã l¹i tiÕp tôc thùc hiÖn phÇn cßn l¹i cña ch−¬ng tr×nh. §ã lµ 1 ng¾t. Ng¾t lµ c¬ chÕ yªu cÇu bé vi xö lý ph¶i dõng ch−¬ng tr×nh ®ang thùc hiÖn ®Ó xö lý mét yªu cÇu kh¸c vµ sau xö lý xong yªu cÇu ®ã nã l¹i tiÕp tôc thùc hiÖn phÇn c«ng viÖc ®ang bá dë. C¸c yªu cÇu ng¾t cã thÓ ph¸t sinh tõ rÊt nhiÒu nguån hoÆc thiÕt bÞ kh¸c nhau cña m¸y tÝnh, mçi ng¾t cã t−¬ng øng 1 sè nguyªn gäi lµ sè hiÖu ng¾t, ng−êi ta ph©n c¸c ng¾t thµnh c¸c nhãm: ¾ Ng¾t phÇn cøng: lµ nh÷ng ng¾t do c¸c thiÕt bÞ ngo¹i vi nh−: bé thêi gian, bµn phÝm, c¸c cæng nèi tiÕp, cæng song song, c¸c æ ®Üa, ®ång hå CMOS, chuét,.. ph¸t ra yªu cÇu CPU gi¶i quyÕt c«ng viÖc nµo ®ã cho nã. C¸c thiÕt bÞ ngo¹i vi göi tÝn hiÖu ng¾t tíi CPU th«ng qua c¸c ®−êng d©y yªu cÇu ng¾t (IRQ-Interrupt Request). Mçi ®−êng yªu cÇu ng¾t ®−îc g¸n 1 sè hiÖu tõ 0 tíi 15 vµ ®−îc kÝ hiÖu lµ IRQ0, IRQ1,..,IRQ15 c¸c ®−êng cã sè hiÖu nhá h¬n ®−îc −u tiªn h¬n. IRQ Sè ThiÕt bÞ hiÖu IRQ0 08H ChÝp thêi gian IRQ1 09H bàn phím IRQ2 0AH xếp tầng cho mạch điều khiển 2(IRQ8-15) IRQ3 0BH cổng nối tiếp2 IRQ4 0CH cổng nối tiếp 1 IRQ5 0DH cổng song song 2 trong AT IRQ6 0EH æ ®Üa mÒm IRQ7 0FH cổng song song 1 IRQ8/0 70H ®ång hå thêi gian thùc IRQ9/1 71H v¹ch däc CGA IRQ10/2 72H dµnh riªng IRQ11/3 73H dµnh riªng IRQ12/4 74H dµnh riªng trong AT IRQ13/5 75H ngằt FPU IRQ14/6 76H ®iÒu khiÓn ®Üa cøng IRQ15/7 77H dµnh riªng C¸c thiÕt bÞ ngo¹i vi ®−îc kÕt nèi víi chip 8259 (PIC: programable interrupt controler) – bé ®iÒu khiÓn ng¾t lËp tr×nh ®−îc, con chip nµy thiÕt lËp ®é −u tiªn ng¾t vµ giao tiÕp víi CPU. 8259 gi¸m s¸t ho¹t ®éng cña c¸c ng¾t, khi thiÕt bÞ göi yªu cÇu thùc hiÖn mét c«ng viÖc nµo ®ã tíi CPU chip nµy chÆn tÝn hiÖu ng¾t ®ã so s¸nh ®é −u tiªn cña nã víi c¸c tÝn hiÖu ng¾t kh¸c mµ nã ®ang l−u nhËn chê CPU xö lý ®Ó ph¸t 1 lÖnh ng¾t ®Õn CPU. 15
  16. Mét chip 8259 cã thÓ ®ång thêi xö lý 8 yªu cÇu ng¾t. Trong AT cã thÓ kÕt hîp 2 con chip 8259 nªn cã thÓ xö lý ®−îc 16 yªu cÇu ng¾t. ¾ Ng¾t mÒm: Lµ c¸c ng¾t do c¸c ch−¬ng tr×nh øng dông ph¸t sinh nh− lµ c¸c ch−¬ng tr×nh con ®−îc gäi thi hµnh bëi chØ thÞ INT cña bé vi xö lý ®Ó thùc hiÖn mét phôc vô nµo. C¸c ng¾t mÒm cã thÓ cung cÊp bëi ROM-BIOS(Int 0, Int 1, Int 8, Int 8, Int 9,..) hoÆc cña DOS(Int 20h, Int 21h, ... ) ¾ C¸c ng¾t logic: §ã lµ c¸c ng¾t do chÝnh CPU ph¸t ra khi nã ph¸t hiÖn ®iÒu bÊt th−êng: Ng¾t 0: Khi gÆp phÐp chia cho 0 Ng¾t 1: Ng¾t ch¹y tõng b−íc Ng¾t 3: lÖnh ®iÓm dõng (break point) ph¸t sinh lÖnh nµy Ng¾t 4: Ng¾t trµn sè ¾ Ng¾t kh«ng che ch¾n ®−îc: Cïng víi chip 8259 cã 1 thanh ghi ®Æc biÖt gäi lµ thanh ghi mÆt n¹ ng¾t, mçi bit trong ®ã kÕt hîp víi 1 tÝn hiÖu yªu cÇu ng¾t, bit ®ã lµ mÆt n¹ cña ng¾t t−¬ng øng, nÕu nã cã gi¸ trÞ 1 th× yªu cÇu ng¾t cña thiÕt bÞ ®ã bÞ cÊm (ta nãi nã ®· bÞ che ch¾n), nÕu mÆt n¹ cã gi¸ trÞ =0 th× ng¾t cã thÓ ®−îc ®¸p øng viÖc cho phÐp hoÆc cÊm mét ng¾t cã thÓ thùc hiÖn ®−îc b»ng phÇn mÒm(chØ thÞ cli vµ sti) – c¸c ng¾t nµy gäi lµ ng¾t cã thÓ che ch¾n ®−îc. Cã ng¾t mµ b¹n kh«ng thÓ nµo cÊm ®−îc, ng¾t ®ã gäi lµ ng¾t kh«ng che ch¾n ®−îc. §ã lµ ng¾t Int 2: ng¾t b¸o hiÖu sù cè phÇn cøng. ¾ C¸c ng¾t kh¸c: Ngoµi c¸c ng¾t nªu trªn cßn mét sè ng¾t kh¸c, mét sè ng¾t kh«ng thùc hiÖn g× mµ chóng trá tíi c¸c b¶ng th«ng sè cña hÖ thèng, VÝ dô nh− ng¾t 1Dh trá tíi b¶ng th«ng sè VIDEO, ng¾t 1Eh : B¶ng th«ng sè ®Üa,.. III.2. Vector ng¾t, b¶ng vector ng¾t Nh− chóng ta nãi ë trªn khi CPU nhËn ®−îc mét yªu cÇu ng¾t, nÕu nã ph¶i ®¸p øng yªu cÇu ®ã nã sÏ cho thi hµnh mét modul (hay mét ch−¬ng tr×nh) nµo ®ã ®Ó xö lý yªu cÇu ng¾t vµ ng−êi ta gäi ®ã lµ ch−¬ng tr×nh xö lý ng¾t nh− vËy mçi mét yªu cÇu ng¾t nãi chung cã t−¬ng øng 1 ch−¬ng tr×nh xö lý ng¾t, ®o¹n ch−¬ng tr×nh ®ã ®· ®−îc n¹p trong bé nhí. VËy lµm thÕ nµo mµ CPU cã thÓ gäi ch−¬ng tr×nh ®ã ®Ó thùc hiÖn, hay cô thÓ h¬n lµm thÕ nµo CPU x¸c ®Þnh ®−îc ®Þa chØ cña ch−¬ng tr×nh xö lý ng¾t. VÊn ®Ò nµy thùc hiÖn nh− sau: Ng−êi ta dµnh vïng nhí kÝch th−íc 1KB ®Çu tiªn (tõ ®Þa chØ 0000:0000 tíi 0000:0400) trong ®ã cø 4 byte l−u tr÷ ®Þa chØ (segment:offset) cña 1 ch−¬ng tr×nh xö lý ng¾t, chóng ta gäi 4 byte nh− vËy lµ 1 vector ng¾t, tËp c¸c vector ng¾t lµ b¶ng vector ng¾t – l−u ý lµ c¸c byte ®−îc l−u tr÷ trong bé nhí theo trËt tù ®¶o ng−îc tøc lµ 2 byte cã ®Þa chØ thÊp l−u offset, 2 byte sau l−u segment cña ch−¬ng tr×nh con xö lý ng¾t. Trong b¶ng vector ng¾t, c¸c vector ng¾t ®−îc l−u tuÇn tù theo sè hiÖu ng¾t, tøc lµ vector ng¾t 0 n»m t¹i ®Þa chØ 0000:0000, vector ng¾t 1 n»m t¹i 0000:0004.. Nh− vËy cã tèi ®a 1024/4 = 256 vector ng¾t. 16
  17. III.3. C¸ch b−íc CPU xö lý mét tÝ hiÖu ng¾t Khi mét yªu cÇu ng¾t xuÊt hiÖn, CPU thùc hiÖn c¸c b−íc sau • §Æt thanh ghi cê vµo stack • §Æt ®Þa chØ (segment:offset)cña lÖnh tiÕp theo sÏ thùc hiÖn (®Þa chØ trë vÒ) vµo stack – ®Þa chØ segment ®−îc ®Æt vµo stack tr−íc sau ®ã lµ ®Þa chØ offset • CPU x¸c ®Þnh sè hiÖu ng¾t, n¹p vector ng¾t tõ ®Þa chØ 0: *4 • CPU chuyÓn ®iÒu khiÓn cho ®o¹n ch−¬ng tr×nh xö lý ng¾t Sau 4 b−íc trªn quyÒn ®iÒu khiÓn thuéc vÒ ch−¬ng tr×nh xö lý ng¾t. Khi tiÕn tr×nh xö lý ng¾t kÕt thóc nÕu nã muèn tr¶ ®iÒu khiÓn vÒ (cho CPU) th× nã ph¶i thùc hiÖn chØ lÖnh iret((interrupt return), iret sÏ kh«i phôc ®Þa chØ trë vÒ vµ thanh ghi cê tõ stack, vµ c«ng viÖc bÞ bá dë tr−íc khi ng¾t x¶y ra l¹i ®−îc tiÕp tôc thùc hiÖn. III.4. Mét sè ng¾t cña DOS, ROM-BIOS Trong bé nhí ROM cña m¸y tÝnh chøa mét sè d÷ liÖu vµ c¸c ch−¬ng tr×nh quan träng cÇn cho viÖc khëi ®éng còng nh− ho¹t ®éng cña m¸y tÝnh vµ c¸c thiÕt bÞ ngo¹i vi. ROM gåm 4 thµnh phÇn ®ã lµ: C¸c ch−¬ng tr×nh cho viÖc khëi ®éng, ROM-BIOS (hÖ thèng vµo ra c¬ së), ROM-BASIC vµ ROM më réng. Trong ®ã vai trß cña ROM-BIOS lµ cung cÊp cung cÊp c¸c phôc vô c¬ b¶n cÇn thiÕt cho ho¹t ®éng vµo/ra cña m¸y tÝnh mµ phÇn lín lµ cho c¸c thiÕt bÞ ngo¹i vi. Cã thÓ coi ROM-BIOS n»m gi÷a c¸c ch−¬ng tr×nh cña ng−êi dïng vµ phÇn cøng. C¸c ng¾t ®−îc cung cÊp bëi ROM-BIOS chóng ta gäi lµ c¸c ng¾t cña ROM- BIOS, mét ng¾t cã thÓ cã nhiÒu chøc n¨ng con, mçi ch−c n¨ng con ta gäi lµ 1 phôc vô. TÊt nhiªn kh«ng ph¶i chØ cã c¸c phôc vô cña ROM-BIOS mµ sau khi hÖ ®iÒu hµnh ®−îc n¹p (IO.SYS, MSDOS.SYS, COMMAND.COM) nã cung cÊp cho chóng ta mét sè c¸c ng¾t vµ gäi lµ ng¾t cña DOS. Mét ng¾t cña DOS cã thÓ cã nhiÒu chøc n¨ng con, mçi chøc n¨ng con chóng ta gäi lµ 1 hµm. {tham kh¶o [6-c.3]}. VÒ phÝa chóng ta th× dï lµ ng¾t cña ROM-BIOS hay cña DOS còng cã thÓ hiÓu nh− mét thñ tôc hay ch−¬ng tr×nh con(ch−¬ng tr×nh xö lý ng¾t) cã thÓ ®−îc gäi thùc hiÖn bëi chØ lÖnh INT theo có ph¸p: INT vÝ dô: int 21h 17
  18. Mét ch−¬ng tr×nh nãi chung th× cã thÓ cã d÷ liÖu vµo vµ cã thÓ cã kÕt qu¶ tr¶ vÒ. Víi ch−¬ng tr×nh xö lý ng¾t còng vËy, nh−ng c¶ ®Çu vµ vµ ®Çu ra (nÕu cã) ®Òu ®−îc thùc hiÖn th«ng qua c¸c thanh ghi, tªn thanh ghi vµ ý nghÜa ®−îc x¸c ®Þnh tr−íc bëi ng−êi thiÕt kÕ. VÝ dô : víi ng¾t 21h cã rÊt nhiÒu chøc n¨ng con, mçi chøc n¨ng con cã 1 sè hiÖu, khi gäi thùc hiÖn th× AH lu«n lµ sè hiÖu cña chøc n¨ng. a. Mét sè ng¾t cña ROM-BIOS Sè hiÖu M« t¶ chøc n¨ng ng¾t 0h Chia 0 1h Ch¹y tõng b−íc 2h Sù cè phÇn cøng 3h §iÓm dõng 4h Trµn sè 5h In mµn h×nh ra m¸y in 8h Ng¾t thêi thêi gian 9h Ng¾t bµn phÝm 0Eh Ng¾t ®Üa mÒm 10h Ng¾t mµn h×nh 11h Danh s¸ch c¸c thiÕt bÞ 12h X¸c ®Þnh kÝch thøc bé nhí 13h Phôc vô ®Üa 14h Cæng nèi tiÕp 16h Phôc vô bµn phÝm 17h M¸y in 18h ROM-BASIC 19h Khëi ®éng n¸y 1Ah Thêi gian Mét sè ng¾t cña ROM-BIOS Danh s¸ch ®Çy ®ñ c¸c ng¾t vµ phôc vô cña ROM-BIOS c¸c b¹n cã thÓ tra cøu trong [3.BIOS] hay [4.BIOS] b. Mét sè ng¾t cña DOS Sè hiÖu ng¾t M« t¶ chøc n¨ng 20h KÕt thóc ch−¬ng tr×nh d¹ng COM 21h C¸c phôc vô cña DOS 23h Ng¾t CTRL-Break 25h/26h §äc/ghi ®Üa tuyÖt ®èi 27h kÕt thóc vµ th−êng tró 1 ch−¬ng tr×nh 2Eh Thùc hiÖn 1 lÖnh cña DOS 2Fh Ng¾t ®a chøc n¨ng 33h Hç trî con chuét Mét sè ng¾t cña DOS 18
  19. c. Mét sè hµm (chøc n¨ng) th«ng dông cña ng¾t 21h Trong phÇn nµy chóng ta giíi thiÖu mét vµi hµm tiªu biÓu cña ng¾t 21h ®Ó dïng trong phÇn lËp tr×nh, Danh s¸ch ®Çy ®ñ c¸c ng¾t vµ c¸c chøc n¨ng cña DOS c¸c b¹n cã thÓ tra cøu trong [3.DOS] hay [4.DOS] à Hµm 01: §äc 1 kÝ tù tõ bµn phÝm §Çu vµo: AH = 01 Gäi ng¾t: INT 21h Tr¶ vÒ : AL chøa m· ASCII cña kÝ tù võa nhËp M« t¶: Ng¾t nµy ®îi ng−êi sö dông nhËp 1 kÝ tù tõ thiÕt bÞ vµo chuÈn (th−êng lµ bµn phÝm), hiÖn thÞ kÝ tù ®ã lªn mµn h×nh, m· kÝ tù võa nhËp ®−îc l−u trong AL. C¸c kÝ tù më réng trªn bµn phÝm nh− F1, F2,…, khi ®−îc bÊm sÏ tr¶ vÒ 2 byte, byte thø nhÊt cã gi¸ trÞ =0, byte thø 2 lµ m· ASCII më réng. Do ®ã, trong tr−êng hîp nµy AL cã gi¸ trÞ =0, nÕu tiÕp tôc gäi l¹i chøc n¨ng nµy sÏ thu ®−îc byte thø 2, nÕu ng−êi dïng bÊm Ctrl-Break th× INT 23h sÏ ®−îc gäi thùc hiÖn. à Hµm 02: In 1 kÝ tù §Çu vµo: AH=02 DL = M· kÝ tù cÇn in Gäi ng¾t Int 21h Tr¶ vÒ: Kh«ng M« t¶ : Chøc n¨ng nµy in 1 kÝ tù cã m· trong DL ra mµn h×nh, t¹i vÞ trÝ hiÖn thêi cña con trá mµn h×nh råi dÞch con trá sang ph¶i 1 cét. Trong hµm nµy còng nh− hµm 09, mét sè kÝ tù ®Æc biÖt ®−îc coi lµ ®iÒu khiÓn chø kh«ng ph¶i kÝ tù ®Ó in. VÝ dô kÝ tù cã m· 0Ah, 0Dh gi¸ trÞ ®iÒu khiÓn chuyÓn con trá mµn h×nh t−¬ng øng lµ xuèng dßng, vÒ ®Çu dßng, kÝ tù cã m· 7 ®iÒu khiÓn ph¸t 1 tiÕng bip ra loa,.. à Hµm 05: göi 1 kÝ tù ra m¸y in chuÈn §Çu vµo: AH = 05 DL = M· kÝ tù cÇn in Gäi ng¾t: INT 21h Tr¶ vÒ : Kh«ng M« t¶ : Chøc n¨ng nµy in 1 kÝ tù cã m· trong DL ra m¸y in (th−êng lµ LPT1) à Hµm 08: §äc 1 kÝ tù §Çu vµo: AH = 08 Gäi ng¾t: INT 21h Tr¶ vÒ : AL chøa m· ASCII cña kÝ tù võa nhËp M« t¶: Hµm nµy t−¬ng tù nh− hµm 01 nh−ng chØ kh¸c lµ kÝ tù nhËp vµo kh«ng ®−îc hiÖn thÞ trªn mµn h×nh. à Hµm 09: In 1 x©u kÝ tù ra mµn h×nh §Çu vµo: AH = 09 DS:DX lµ ®Þa chØ cña x©u cÇn in Gäi ng¾t: INT 21h Tr¶ vÒ : Kh«ng M« t¶: Khi cÇn in 1 x©u kÝ tù ra mµn h×nh chóng ta ph¶i x¸c ®Þnh ®Þa chØ cña x©u, DS chøa ®Þa chØ segment, DX chøa ®Þa chØ offset cña x©u, hµm nµyin c¸c kÝ tù tõ 19
  20. ®Çu x©u cho tíi khi gÆp kÝ tù $- cã m· 24h th× kÕt thóc. nh− vËy x©u cÇn in ph¶i kÕt thóc b»ng kÝ tù $. à Hµm 0Ah: NhËp 1 x©u kÝ tù vµo vïng ®Öm §Çu vµo: AH = 0Ah DS:DX lµ ®Þa chØ cña vïng ®Öm cÇn nhËp Gäi ng¾t: INT 21h Tr¶ vÒ : Kh«ng M« t¶: Chøc n¨ng nµy cho phÐp ng−êi sö dông nhËp 1 x©u tõ bµn phÝm. Tr−íc khi thùc hiÖn nhËp chóng ta ph¶i x¸c ®Þnh ®Þa chØ cña vïng ®Öm l−u x©u sÏ nhËp trong cÆp thanh ghi DS vµ DX. Byte ®Çu tiªn cña vïng ®Öm chøa 1 sè nguyªn lµ ®é dµi (max) tèi ®a cã thÓ nhËp cho x©u. C¸c kÝ tù ®−îc nhËn tõ bµn phÝm cho tíi khi gÆp ENTER hoÆc ®· nhËn ®ñ (max-1) kÝ tù. Khi thao t¸c nhËp kÕt thóc th× kÝ tù cuèi cïng lu«n ®−îc ®iÒn lµ kÝ tù cã m· 0Dh(Enter), byte thø 2 cña vïng ®Öm chøa ®é dµi thùc sù cña x©u (kh«ng tÝnh kÝ tù 0Dh) – hai byte nµy ®−îc tù ®éng ®iÒn. VÝ dô : b¹n cÇn nhËp 1 x©u kÝ tù, ®é dµi b¹n −íc l−îng kh«ng qu¸ 20 kÝ tù. VËy b¹n ph¶i chuÇn bÞ vïng ®Öm (buffer) nh− sau: Tr−íc lóc nhËp: 20 ? ? …. ? ? ? gi¶ sö b¹n nhËp lµ ABC XY (cuèi cïng lµ Enter), sau khi nhËp buffer cña b¹n lµ 20 6 A B C X Y 0D ? L−u ý buffer lµ vïng nhí tèi thiÓu ph¶i cã ®ñ 20+2=22 byte tù do. Trong kh nhËp nÕu gÆp Ctrl-Break th× int 23h ®−îc thùc hiÖn vµ vïng ®Öm kh«ng bÞ thay ®æi. à Hµm 0Bh: KiÓm tra tr¹ng th¸i vïng ®Öm nhËp §Çu vµo: AH = 0Bh Gäi ng¾t: INT 21h Tr¶ vÒ : AL M« t¶: Chøc n¨ng nµy kiÓm tra trong vïng ®Öm cña thiÕt bÞ vµo chuÈn(bµn phÝm) cã kÝ tù nµo s½n sµng hay kh«ng, nÕu cã AL sÏ b»ng FFh, ng−îc l¹i AL=0. à Hµm 4Ch: KÕt thóc ch−¬ng tr×nh §Çu vµo: AH = 4Ch Gäi ng¾t: INT 21h Tr¶ vÒ : kh«ng M« t¶: Chóng ta ®· cã ng¾t 20h kÕt thóc 1 ch−¬ng tr×nh d¹ng COM, cßn chøc n¨ng nµy cña ng¾t 21h cã thÓ kÕt thóc ch−¬ng tr×nh d¹ng COM hoÆc EXE. IV - Mét sè lÖnh vµ chØ dÉn th«ng dông Trong phÇn nµy chóng ta giíi thiÖu vÒ mét sè chØ dÉn vµ lÖnh th«ng dông cña bé vi xö lý vµ ch−¬ng tr×nh biªn dÞch assemble . IV.1 - C¸c chØ dÉn( Pseudo-Op: gi¶ lÖnh) Trong c¸c phÇn sau chóng ta quy −íc sö dông c¸c c¸ch viÕt nh− sau: à Thµnh phÇn trong cÆp ngoÆc lµ thµnh phÇn (tham sè) ph¶i cã. 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
3=>0