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

Kỹ thuật vi xử lý - Chương 3

Chia sẻ: Nguyen Nhi | Ngày: | Loại File: PDF | Số trang:19

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

Lập trình bằng hợp ngữ cho 8088 trên máy tính IBM PC và các máy t-ơng thích IBM PC 1. Giới thiệu chung Sau khi đã giới thiệu một số lệnh cơ bản của bộ vi xử lý 8088 ta sẽ dùng các lệnh đó để lập trình dùng hợp ngữ trên các máy tính IBM PC (hoặc các máy t-ơng thích máy IBM PC). Vì loại máy tính này có cấu trúc tiêu biểu của một hệ vi xử lý, hơn nữa ta cũng có thể sử dụng nhiều chức năng sẵn có cho ch-ơng trình thông...

Chủ đề:
Lưu

Nội dung Text: Kỹ thuật vi xử lý - Chương 3

  1. http://www.ebook.edu.vn Tr−êng ®¹i häc kü thuËt C«ng NghiÖp Ch−¬ng 3 LËp tr×nh b»ng hîp ng÷ cho 8088 trªn m¸y tÝnh IBM PC vµ c¸c m¸y t−¬ng thÝch IBM PC 1. Giíi thiÖu chung Sau khi ®· giíi thiÖu mét sè lÖnh c¬ b¶n cña bé vi xö lý 8088 ta sÏ dïng c¸c lÖnh ®ã ®Ó lËp tr×nh dïng hîp ng÷ trªn c¸c m¸y tÝnh IBM PC (hoÆc c¸c m¸y t−¬ng thÝch m¸y IBM PC). V× lo¹i m¸y tÝnh nµy cã cÊu tróc tiªu biÓu cña mét hÖ vi xö lý, h¬n n÷a ta còng cã thÓ sö dông nhiÒu chøc n¨ng s½n cã cho ch−¬ng tr×nh th«ng qua c¸c dÞch vô (c¸c ch−¬ng tr×nh con phôc vô ng¾t) cña c¸c ng¾t cña DOS vµ cña BIOS. Cã thÓ sö dông ch−¬ng tr×nh dÞch hîp ng÷ MASM 5.10 (Macro Assembler phiªn b¶n 5.10) cña Microsoft víi c¸c ®Þnh nghÜa ®o¹n ®¬n gi¶n vµ chÕ ®é bé nhí nhá. Ngoµi ra ta còng cã thÓ sö dông ch−¬ng tr×nh dÞch hîp ng÷ TASM 2.0 (Turbo Assembler phiªn b¶n 2.0) cña Borland International ®Ó thùc hiÖn dÞch ch−¬ng tr×nh cña chóng ta. Ng«n ng÷ assembly (hîp ng÷) C¸c ch−¬ng tr×nh thùc hiÖn chuyÓn ®æi ch−¬ng tr×nh cña ng−êi sö dông ®−îc viÕt b»ng mét ng«n ng÷ nµo ®ã sang mét ng«n ng÷ kh¸c ®−îc gäi lµ ch−¬ng tr×nh dÞch (translate). Ng«n ng÷ ®−îc sö dông ®Ó viÕt ch−¬ng tr×nh nguån ®−îc gäi lµ ng«n ng÷ nguån cßn ng«n ng÷ cña ch−¬ng tr×nh mµ do ch−¬ng tr×nh nguån chuyÓn sang ®−îc gäi lµ ng«n ng÷ ®Ých. Ng−êi ta ®· ph©n ch−¬ng tr×nh dÞch lµm 2 lo¹i dùa trªn mèi quan hÖ gi÷a ng«n ng÷ nguån vµ ng«n ng÷ ®Ých nh− sau: Khi ng«n ng÷ nguån vÒ c¨n b¶n lµ mét sù biÓu diÔn b»ng ký hiÖu cho mét ng«n - ng÷ m¸y b»ng sè th× ch−¬ng tr×nh dÞch ®−îc gäi lµ assembler vµ ng«n ng÷ nguån ®−îc gäi lµ ng«n ng÷ assembly (hîp ng÷). Khi ng«n ng÷ nguån lµ mét ng«n ng÷ bËc cao nh− Pascal, C, . . . vµ ng«n ng÷ - ®Ých lµ ng«n ng÷ m¸y hoÆc lµ mét biÓu diÔn b»ng ký hiÖu cho mét ng«n ng÷ nh− vËy th× ch−¬ng tr×nh dÞch ®−îc gäi lµ compiler. Ng«n ng÷ assembly thuÇn khiÕt lµ ng«n ng÷ mµ trong ®ã mçi lÖnh (chØ thÞ) cña nã khi ®−îc dÞch sinh ra ®óng mét chØ thÞ m¸y, ®iÒu ®ã cã nghÜa lµ cã sù t−¬ng øng 1 - 1 gi÷a c¸c lÖnh m¸y vµ c¸c lÖnh trong ng«n ng÷ assembly. NÕu mçi dßng trong ch−¬ng tr×nh assembly chøa mét chØ thÞ assmebly vµ mçi word trong bé nhí chøa mét lÖnh m¸y th× ch−¬ng tr×nh dµi n dßng sÏ sinh ra mét ch−¬ng tr×nh ng«n ng÷ m¸y dµi n word . Sö dông ng«n ng÷ assmebly ®Ó lËp tr×nh dÔ h¬n sö dông ng«n ng÷ m¸y (d¹ng sè, lµ d·y c¸c bit) rÊt nhiÒu. ViÖc sö dông tªn vµ ®Þa chØ b»ng ký hiÖu thay cho sè nhÞ ph©n (hoÆc hÖ 8, 10, 16) t¹o nªn sù kh¸c biÖt lín. Mäi ng−êi dÔ dµng cã thÓ nhí ®−îc c¸c ký hiÖu (symbol) viÕt t¾t cho lÖnh céng (add), trõ (substract), nh©n (multiply) vµ chia (divide) lµ ADD, SUB, MUL, DIV nh−ng Ýt ai cã thÓ nhí ®−îc c¸c lÖnh m¸y cho c¸c phÐp to¸n ®ã d−íi d¹ng sè, vÝ dô lµ: 24576, 57344, 28672 vµ 29184 (trõ khi lµm viÖc qu¸ nhiÒu víi chóng mµ tù nhiªn nhí ®−îc). Ng−êi lËp tr×nh b»ng ng«n ng÷ assembly chØ cÇn nhí c¸c tªn b»ng ký hiÖu gîi nhí ADD, SUB, MUL, DIV, . . . v× chóng sÏ ®−îc assembler dÞch ra c¸c lÖnh m¸y. Tuy nhiªn nÕu ai muèn lËp tr×nh b»ng ng«n ng÷ m¸y th× hä cÇn ph¶i nhí m· lÖnh d−íi d¹ng sè (hoÆc liªn tôc tra cøu). §èi víi ®Þa chØ, còng rót ra c¸c nhËn xÐt t−¬ng tù. Ng−êi lËp tr×nh b»ng ng«n ng÷ asembly cã thÓ ®Æt tªn b»ng ký hiÖu gîi nhí cho c¸c « nhí vµ giao cho assembly ph¶i 28 NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh
  2. http://www.ebook.edu.vn Tr−êng ®¹i häc kü thuËt C«ng NghiÖp cung cÊp ®óng ®Þa chØ b»ng sè, trong khi ®ã ng−êi lËp tr×nh b»ng ng«n ng÷ m¸y lu«n lu«n ph¶i lµm viÖc víi c¸c gi¸ trÞ b»ng sè cña c¸c ®Þa chØ. V× vËy mµ tõ khi cã ng«n ng÷ assembly ra ®êi cho ®Õn nay, kh«ng cßn ai viÕt ch−¬ng tr×nh b»ng ng«n ng÷ m¸y n÷a. Ngoµi sù t−¬ng øng (¸nh x¹) 1 - 1 cña c¸c lÖnh assembly vµo c¸c lÖnh m¸y, ng«n ng÷ assembly cßn cã mét tÝnh chÊt kh¸c n÷a lµm cho nã kh¸c h¼n c¸c ng«n ng÷ lËp tr×nh bËc cao, ®ã lµ ng−êi lËp tr×nh b»ng ng«n ng÷ assembly cã thÓ truy cËp tíi tÊt c¶ c¸c ®Æc ®iÓm trong m¸y tÝnh vËt lý. VÝ dô, nÕu cã mét bit b¸o trµn sè (Overflow bit) th× ch−¬ng tr×nh b»ng ng«n ng÷ assembly cã thÓ truy cËp vµ kiÓm tra trùc tiÕp bit nµy, trong khi ®ã ch−¬ng tr×nh b»ng ng«n ng÷ bËc cao (Pascal, C . . .) kh«ng thÓ lµm ®−îc viÖc ®ã. Mét sù kh¸c biÖt lín vµ quan trong n÷a gi÷a ch−¬ng tr×nh assembly vµ ch−¬ng tr×nh b»ng ng«n ng÷ bËc cao lµ ch−¬ng tr×nh b»ng ng«n ng÷ assembly chØ cã thÓ ch¹y ®−îc trªn mét hä m¸y, trong khi ®ã ch−¬ng tr×nh ®−îc viÕt b»ng ng«n ng÷ bËc cao nãi chung cã thÓ ch¹y ®−îc trªn nhiÒu hä m¸y, ®©y chÝnh lµ mét −u ®iÓm lín cña ng«n ng÷ bËc cao so víi ng«n ng÷ assembly. Nãi chung, tÊt c¶ c¸c viÖc cã thÓ thùc hiÖn ®−îc b»ng ng«n ng÷ m¸y ®Òu cã thÓ thùc hiÖn ®−îc b»ng ng«n ng÷ assembly, tuy nhiªn ng«n ng÷ bËc cao kh«ng lµm ®−îc nh− vËy mét c¸ch hiÖu qu¶. Khi x©y dùng c¸c øng dông lín, th«ng th−êng ng−êi ta chän ng«n ng÷ bËc cao v× nã h−íng tíi thuËt to¸n gi¶i quyÕt vÊn ®Ò (Ng«n ng÷ h−íng bµi to¸n - problem-oriented language) mµ kh«ng chän ng«n ng÷ assembly v× khi ®ã ng−êi lËp tr×nh ph¶i chó ý tíi c¸c chi tiÕt nhá nhÆt khi lËp tr×nh. Ng−îc l¹i, khi x©y dùng c¸c ch−¬ng tr×nh nhá thùc hiÖn c¸c thao t¸c can thiÖp s©u vµo phÇn cøng m¸y tÝnh th× ng−êi ta th−êng chän ng«n ng÷ assembly v× tÝnh tèi −u, hiÖu qu¶ vµ kh¶ n¨ng m¹nh mÏ cña nã. 2. Giíi thiÖu khung ch−¬ng tr×nh Víi bÊt kú ng«n ng÷ nµo, khi ta lËp tr×nh b»ng ng«n ng÷ ®ã ta còng ph¶i tu©n thñ ch−¬ng tr×nh viÕt ®óng có ph¸p, quy ®Þnh khung ch−¬ng tr×nh. Tõ ®ã ch−¬ng tr×nh míi ®−îc dÞch ra m· m¸y, råi míi t¹o ra c¸c ch−¬ng tr×nh ch¹y ®−îc (phÇn më réng: *.EXE hoÆc *.COM). Mét ch−¬ng tr×nh hîp ng÷ bao gåm c¸c dßng lÖnh, mçi lÖnh ®−îc viÕt trªn mét dßng Mét dßng lÖnh cã thÓ lµ lÖnh thËt d−íi d¹ng gîi nhí (nmenomic) hay d¹ng ký hiÖu - (symbolic) cña bé vi xö lý. HoÆc h−íng dÉn ch−¬ng tr×nh dÞch (Essembler directive). - LÖnh thËt d−íi d¹ng gîi nhí sÏ ®−îc dÞch ra m· m¸y cßn h−íng dÉn ch−¬ng tr×nh dÞch th× kh«ng, nã chØ cã t¸c dông chØ dÉn cho ch−¬ng tr×nh dÞch thùc hiÖn c«ng viÖc trong qu¸ tr×nh dÞch. LÖnh cã thÓ ®−îc viÕt d−íi d¹ng ch÷ hoa hay ch÷ th−êng ®Òu ®−îc, chóng ®−îc cho lµ t−¬ng ®−¬ng v× ®èi víi c¸c dßng lÖnh, ch−¬ng tr×nh dÞch kh«ng ph©n biÖt kiÓu ch÷. a. CÊu tróc cña mét lÖnh hîp ng÷ Mét dßng lÖnh cña ch−¬ng tr×nh hîp ng÷ (assembly) cã cÊu tróc nh− sau: Tªn (Nh·n) M· lÖnh C¸c to¸n h¹ng Gi¶i thÝch NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh 29
  3. http://www.ebook.edu.vn Tr−êng ®¹i häc kü thuËt C«ng NghiÖp VÝ du: + LAP: Mov CL, AH ;Sè lÇn lÆp ®−îc ®Æt trong thanh ghi CL LAP lµ nh·n Mov lµ m· lÖnh CL, AH lµ c¸c to¸n h¹ng Vµ tr−êng gi¶i thÝch b¾t ®Çu b»ng dÊu chÊm phÈy (;) + Main Proc Main lµ tªn Proc lµ m· cña lÖnh gi¶ () hay h−íng dÉn ch−¬ng tr×nh dÞch (dïng ®Ó b¾t ®Çu ch−¬ng tr×nh hoÆc b¾t ®Çu ch−¬ng tr×nh con) Mét lÖnh kh«ng nhÊt thiÕt ph¶i cã ®Çy ®ñ c¸c tr−êng nh− trªn. Tuú tõng c«ng viÖc cô thÓ mµ lÖnh cã thÓ khuyÕt mét hoÆc mét sè tr−êng nµo ®ã. Tr−êng tªn (Nh·n) Tr−êng nµy chøa nh·n, tªn biÕn, tªn h»ng hoÆc tªn thñ tôc cña ch−¬ng tr×nh. Tªn vµ nh·n sÏ ®−îc ch−¬ng tr×nh dÞch g¸n b»ng c¸c ®Þa chØ cô thÓ cña « nhí. Quy t¾c ®Æt tªn (còng kh¸ gièng nh− quy t¾c ®Æt tªn trong ng«n ng÷ Pascal) Dïng c¸c ký tù thuéc bé ch÷ c¸i (kh«ng ph©n biÖt ch÷ hoa, ch÷ th−êng) - Kh«ng ®−îc b¾t ®Çu b»ng ch÷ sè, kh«ng ®−îc chøa dÊu c¸ch - §é dµi: 1..21 ký tù - Cã thÓ sö dông c¸c ký tù ®Æc biÖt nh−: ?, ., _, @, $, % - Trong tr−êng hîp nÕu dïng dÊu chÊm (.), th× nã ph¶i ®−îc ®Æt ë vÞ trÝ ®Çu tiªn - cña tªn hoÆc nh·n. Nh·n th−êng kÕt thóc b»ng dÊu hai chÊm (;) - Tr−êng m· lÖnh Tr−êng nµy gåm m· c¸c lÖnh thËt hoÆc gi¶ (h−íng dÉn ch−¬ng tr×nh dÞch) LÖnh thËt: lÖnh d¹ng gîi nhí (nmemonic) cña bé vi xö lý. LÖnh nµy sÏ ®−îc - ch−¬ng tr×nh dÞch dÞch ra m· m¸y. H−íng dÉn ch−¬ng tr×nh dÞch th× kh«ng ®−îc dÞch. - Tr−êng c¸c to¸n h¹ng Tr−êng nµy lµ d÷ liÖu cho c¸c thao t¸c Tuú tõng lÖnh cô thÓ mµ cã thÓ cã 2, 1 hoÆc kh«ng cã to¸n h¹ng nµo VÝ dô: Mov al, al ;LÖnh nµy cã 2 to¸n h¹ng Rol bx, cl ;LÖnh nµy cã 2 to¸n h¹ng Not bl ;LÖnh nµy cã 1 to¸n h¹ng Ret n ;LÖnh nµy cã 1 to¸n h¹ng Ret ;LÖnh nµy kh«ng cã to¸n h¹ng nµo Sti ;LÖnh nµy kh«ng cã to¸n h¹ng nµo Nop ;LÖnh nµy kh«ng cã to¸n h¹ng nµo Víi h−íng dÉn ch−¬ng tr×nh dÞch, tr−êng nµy chøa c¸c th«ng tin kh¸c nhau liªn quan ®Õn c¸c lÖnh gi¶ cña h−¬ng dÉn. 30 NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh
  4. http://www.ebook.edu.vn Tr−êng ®¹i häc kü thuËt C«ng NghiÖp Tr−êng gi¶i thÝch Tr−êng nµy ®−îc b¾t ®Çu b»ng dÊu chÇm phÈy (;), sau ®ã lµ dßng gi¶i thich. Ch−¬ng tr×nh dÞch sÏ bá qua kh«ng dÞch tr−êng nµy. LÖnh tuy ®−îc viÕt d−íi d¹ng gîi nhí cña bé vi xö lÝ, tuy nhiªn chóng ta lu«n nªn cã tr−êng nµy. Lêi gi¶i thÝch cÇn s¸t nghÜa cña c«ng viÖc thùc hiÖn (kh«ng nªn gi¶i thÝch ý nghÜa cña c©u lÖnh). b. D÷ liÖu cho ch−¬ng tr×nh hîp ng÷ D÷ liÖu cho (cña) mét ch−¬ng tr×nh hîp ng÷ cã thÓ ë d¹ng hÖ 2, hÖ 10, hÖ 16 hoÆc d¹ng ký tù. §èi víi ch−¬ng tr×nh Debug (dïng ®Ó t×m lçi cho c¸c ch−¬ng tr×nh hîp ng÷) th× d÷ liÖu b»ng sè ®−äc ngÇm ®Þnh ë d¹ng hÖ 16. Cßn ®èi víi assembly th× d÷ liÖu b»ng sè ®−îc ngÇm ®Þnh ë hÖ 10. Khi cung cÊp d÷ liÖu cho ch−¬ng tr×nh, sè cho ë hÖ nµo th× ph¶i kÌm hËu tè cña hÖ ®ã (trõ hÖ 10 - ngÇm ®Þnh). Riªng ®èi víi hÖ 16, nÕu sè b¾t ®Çu b»ng ch÷ c¸i (a..f hoÆc A..F) th× ph¶i thªm sè 0 ë tr−íc ®Ó ch−¬ng tr×nh dÞch kh«ng nhÇm víi mét tªn hoÆc nh·n nµo ®ã. (B-Binary: HÖ 2; D-Decimal: HÖ 10; H-Hexa: HÖ 16). VÝ dô: 1001b ;sè ë hÖ 2 100 ;sè ë hÖ 10 0ah ;sè ë hÖ 16 NÕu d÷ liÖu cho d−íi d¹ng ký tù th× ph¶i bao ®ãng (®Æt) ký tù trong cÆp dÊu nh¸y ®¬n. VÝ dô: 'a' ;Ký tù a 'abcd' ;Chuçi ký tù Víi kiÓu ký tù, ngoµi c¸ch trªn ta cßn cã thÓ dïng m· ASCII cña ksy tù ®ã. VÝ dô: '0' ;Ký tù 0 30h ;M· ASCII cña ký tù 0 Víi 2 c¸ch viÕt trong vÝ dô trªn lµ nh− nhau ®èi víi ch−¬ng tr×nh dÞch assembler. c. BiÕn vµ h»ng Mét biÕn bÊt kú ®−îc sö dông trong ch−¬ng tr×nh hîp ng÷ ph¶i ®−îc ®Þnh nghÜa, ch−¬ng tr×nh dÞch sÏ g¸n cho biÕn ®ã mét ®Þa chØ x¸c ®Þnh trong bé nhí. BiÕn ®¬n Mét biÕn ®¬n trong ch−¬ng tr×nh hîp ng÷ ®−îc ®Þnh nghÜa theo mÉu sau: Tªn_biÕn KiÓu Gi¸ trÞ khëi t¹o Tªn: do ng−êi sö dông tù ®Æt theo quy t¾c ®Æt tªn KiÓu: lµ kÝch th−íc (ph¹m vi) biÓu diÔn cña biÕn. Cã c¸c kiÓu sau: DB (Define Byte): KiÓu byte (1 byte) DW (Define Word): KiÓu word (2 byte) DD (Define Double Word): KiÓu double word (4 byte) DF (Define Farword): KiÓu farword (6 byte), chØ dïng víi bé vi xö lý 80386 DQ (Define Quadword): KiÓu Quadword (8 byte) NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh 31
  5. http://www.ebook.edu.vn Tr−êng ®¹i häc kü thuËt C«ng NghiÖp DT (Define Ten byte): KiÓu Ten byte (10 byte) Trong mét biÕn cã kÝch t−íc lín h¬n 1 byte th× byte cao ë ®Þa chØ cao, byte thÊp ë ®Þa chØ thÊp (Theo quy −íc Big-endian cña Intel). VÝ dô: Ab db 4 ;§Þnh nghÜa mét biÕn cã tªn lµ Ab, kÝch th−íc 1 byte vµ ®−îc ;khëi t¹o gi¸ trÞ b»ng 4. Ab1 db ? ;§Þnh nghÜa mét biÕn cã tªn lµ Ab1, kÝch th−íc 1 byte vµ ®−îc ;ch−a ®−îc khëi t¹o gi¸ trÞ. Ab2 dw 100h ;§Þnh nghÜa mét biÕn cã tªn lµ Ab2, kÝch th−íc 2 byte vµ ®−îc ;®−îc khëi t¹o gi¸ trÞ b»ng 100h = 256. Ab3 dw ? ;§Þnh nghÜa mét biÕn cã tªn lµ Ab3, kÝch th−íc 2 byte vµ ®−îc ;ch−a ®−îc khëi t¹o gi¸ trÞ. BiÕn m¶ng Mét biÕn m¶ng trong ch−¬ng tr×nh hîp ng÷ ®−îc ®Þnh nghÜa theo mÉu sau: Tªn_biÕn KiÓu C¸c gi¸ trÞ khëi t¹o Tªn: do ng−êi sö dông tù ®Æt theo quy t¾c ®Æt tªn. KiÓu: lµ kÝch th−íc (ph¹m vi) biÓu diÔn cña biÕn nh− ®· biÕt. BiÕn m¶ng lµ biÕn h×nh thµnh tõ mét d·y liªn tiÕp c¸c phÇn tö cïng kiªu. Khi ®Þnh nghÜa biÕn m¶ng ta g¸n tªn cho mét d·y liªn tiÕp c¸c phÇn tö cã cïng ®é dµi (kÝch th−íc) trong bé nhí cïng víi c¸c gi¸ trÞ ban ®Çu t−¬ng øng. VÝ dô: Ar db 1, 3, 2, 4 ;§Þnh nghÜa mét biÕn cã tªn lµ Ar, gåm 4 phÇn tö, mçi phÇn tö cã kÝch th−íc 1 ;byte (gåm 4 byte ®−îc dµnh chç cho nã trong bé nhí tõ ®Þa chØ øng víi Ar ®Ó ;chøa c¸c gi¸ trÞ khëi ®Çu lµ: 1, 2, 3 vµ 4). PhÇn tö ®Çu tiªn cña m¶ng cã ®Þa ;chØ trïng víi ®Þa chØ cña Ar vµ cã gi¸ trÞ lµ 1, phÇn tö thø 2 cã ®Þa chØ lµ Ar+1 ;vµ cã gi¸ trÞ lµ 2, phÇn tö tiÕp theo cã . . . Ta cã thÓ dïng to¸n tö DUP ®Ó khëi ®Çu gi¸ trÞ c¸c phÇn tö cña m¶ng víi cïng mét gi¸ trÞ. VÝ dô: Ar1 dw 100 DUP(5) ;§Þnh nghÜa mét biÕn cã tªn lµ Ar1, gåm 100 phÇn tö, mçi phÇn tö cã kÝch ;th−íc 2 byte (gåm 200 byte ®−îc dµnh chç cho nã trong bé nhí tõ ®Þa chØ øng ;víi Ar1 ®Ó chøa víi cïng mét gi¸ trÞ khëi ®Çu cho mçi 2 byte (word) lµ 5). ;PhÇn tö ®Çu tiªn cña m¶ng cã ®Þa chØ trïng víi ®Þa chØ cña Ar1, c¸c phÇn tö tiÕp ;theo cã ®Þa chØ Ar1+2, Ar1+4, Ar1+6, . . . Ar2 dd 20 DUP(?) ;§Þnh nghÜa mét biÕn cã tªn lµ Ar2, gåm 20 phÇn tö, mçi phÇn tö cã kÝch th−íc ;4 byte (gåm 80 byte ®−îc dµnh chç cho nã trong bé nhí tõ ®Þa chØ øng víi Ar2 ;vµ ch−a ®−îc khëi ®Çu gi¸ trÞ). PhÇn tö ®Çu tiªn cña m¶ng cã ®Þa chØ trïng víi ;®Þa chØ cña Ar, c¸c phÇn tö tiÕp theo cã ®Þa chØ Ar2+4, Ar2+8, Ar2+12, . . . §Æc biÖt ta cã thÓ dïng to¸n tö DUP lång nhau ®Ó khëi ®Çu gi¸ trÞ c¸c phÇn tö cña m¶ng. VÝ dô: Ar3 db 2, 2, 2 DUP(1, 3 DUP(5), 4) 32 NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh
  6. http://www.ebook.edu.vn Tr−êng ®¹i häc kü thuËt C«ng NghiÖp ;§Þnh nghÜa mét biÕn cã tªn lµ Ar3, gåm 12 phÇn tö, mçi phÇn tö cã kÝch th−íc 1 byte (gåm 12 byte ®−îc dµnh chç cho nã trong bé nhí tõ ®Þa chØ øng víi Ar3 ®Ó chøa c¸c gi¸ trÞ khëi ®Çu cho mçi byte). PhÇn tö ®Çu tiªn cña m¶ng cã ®Þa chØ trïng víi ®Þa chØ cña Ar3, c¸c phÇn tö tiÕp theo cã ®Þa chØ Ar3+1, Ar3+2, . . . D·y thø tù gi¸ trÞ c¸c phÇn tö lµ: 2, 2, 1, 5, 5, 5, 4, 1, 5, 5, 5, 4 BiÕn x©u BiÕn kiÓu x©u ký tù lµ tr−êng hîp dÆc biÖt cña biÕn m¶ng mµ c¸c phÇn tö cña m¶ng lµ ký tù. Mét x©u ký tù cã thÓ ®−îc ®Þnh nghÜa b»ng c¸c ký tù, x©u ký tù hoÆc b»ng m· ASCII cña c¸c ký tù. Chóng ta cã thÓ ®Þnh nghÜa biÕn x©u ký tù theo c¸c dßng vÝ dô sau, chóng lµ t−¬ng ®−¬ng nhau: VÝ dô: Str1 db 'Co non' Str2 db 'C', 'o', ' ', 'n', 'o', 'n' Str3 db 'C', 'o', ' ', 'non' Str4 db 43h, 6fh, 32h, 6eh, 6fh, 6eh Str5 db 43h, 'o', 32h, 'n', 6fh, 6eh H»ng Trong ch−¬ng tr×nh hîp ng÷, c¸c gi¸ trÞ kh«ng ®æi th−êng ®−îc g¸n tªn lµm cho ch−¬ng tr×nh râ rµng, dÔ ®äc h¬n - gäi lµ c¸c h»ng. H»ng trong ch−¬ng tr×nh cã thÓ lµ kiÓu sè hoÆc kiÓu ký tù. ViÖc g¸n tªn cho h»ng ®−îc thùc hiÖn nhê lÖnh gi¶ EQU (Equate) theo mÉu sau: Tªn_h»ng Equ Gi¸ trÞ khëi t¹o VÝ dô: Cr Equ 0dh ;Carriage return Lf Equ 0ah ;Line feed Pa Equ 3f8h Clause Equ 'Co non xanh tan chan troi' Str db Clause,'$' Str1 db Clause, Cr, Lf., '$' d. Khung cña mét ch−¬ng tr×nh hîp ng÷ Mét ch−¬ng tr×nh m· m¸y ®−îc n¹p vµo bé nhí th−êng bao gåm c¸c vïng nhí kh¸c nhau: - Vïng d÷ liÖu: Dïng ®Ó chøa c¸c biÕn, kÕt qu¶ trung gian hay kÕt qu¶ khi ch¹y ch−¬ng tr×nh. - Vïng m· lÖnh: Dïng ®Ó chøa m· lÖnh cña ch−¬ng tr×nh. - Vïng ng¨n xÕp: Dïng ®Ó phôc vô cho c¸c ho¹t ®éng cña ch−¬ng tr×nh nh− gäi ch−¬ng tr×nh con, trë vÒ ch−¬ng tr×nh chÝnh tõ ch−¬ng tr×nh con. Mét ch−¬ng tr×nh hîp ng÷ còng cã cÊu tróc nh− vËy, ®Ó khi ®−îc dÞch nã sÏ t¹o ra m· t−¬ng øng víi ch−¬ng tr×nh m· m¸y nãi trªn (cã cÊu tróc gièng nh− vËy). Chóng ta sÏ khai b¸o quy m« sö dông bé nhí ®èi víi c¸c vïng nhí ®ã ®Ó sö dông mét c¸ch phï hîp, tiÕt kiÖm, hiÖu qu¶ vµ ®óng víi cÊu tróc ch−¬ng tr×nh. Khai b¸o quy m« sö dông bé nhí Khai b¸o nµy x¸c ®Þnh kÝch th−íc cho ®o¹n m· vµ d÷ liÖu cña ch−¬ng tr×nh. NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh 33
  7. http://www.ebook.edu.vn Tr−êng ®¹i häc kü thuËt C«ng NghiÖp Sö dông h−íng dÉn ch−¬ng tr×nh dÞch .Model ®Æt tr−íc c¸c h−íng dÉn kh¸c trong ch−¬ng tr×nh theo mÉu nh− sau: .Model KÝch_th−íc VÝ dô: .Model Small .Model Tiny Cã c¸c kiÓu KÝch_th−íc bé nhí cho ch−¬ng tr×nh hîp ng÷ nh− sau: - Tiny (hÑp): M· lÖnh vµ d÷ liÖu n»m gän trong mét ®o¹n - Small (nhá): M· lÖnh trong mét ®o¹n, d÷ liÖu trong mét ®o¹n - Medium (Trung b×nh): M· lÖnh h¬n mét ®o¹n, d÷ liÖu trong mét ®o¹n - Compact (Gän): M· lÖnh trong mét ®o¹n, d÷ liÖu h¬n mét ®o¹n - Large (Lín), Huge (RÊt lín - khæng lå): M· lÖnh vµ d÷ liÖu h¬n mét ®o¹n. C¸c m¶ng cã thÓ lín h¬n 64KByte Khai b¸o ®o¹n ng¨n xÕp Ng¨n xÕp lµ vïng nhí phôc vô cho c¸c ho¹t ®éng cña ch−¬ng tr×nh khi gäi che¬ng tr×nh con vµ trë vÒ ch−¬ng tr×nh chÝnh tõ ch−¬ng tr×nh con. Tuú theo cÊu trócvµ quy m« cña ch−¬ng tr×nh mµ ta khai b¸o kÝch th−íc cña ®o¹n nµy. ViÖc khai b¸o ®−îc thùc hiÖn nhê h−íng dÉn ch−¬ng tr×nh dÞch .Stack theo mÉu sau: .Stack KÝch_th−íc VÝ dô: .Stack 100 .Stack 100h ;256 Chó ý: NÕu ta kh«ng khai b¸o kÝch th−íc cña ®o¹n nµy th× ch−¬ng tr×nh dÞch sÏ tù ®éng g¸n gi¸ trÞ 1 Kbyte cho vïng ng¨n xÕp nµy. §©y lµ kÝch th−íc qu¸ lín ®èi víi mét øng dông th«ng th−êng. Nãi chung ta nªn chän lµ 100 hoÆc 100h lµ ®ñ. Khai b¸o ®o¹n d÷ liÖu PhÇn nµy ®Ó ®Þnh nghÜa c¸c biÕn cña ch−¬ng tr×nh. H»ng còng nªn ®Þnh nghÜa ë ®©y ®Ó ®¶m b¶o sù thèng nhÊt (mÆc dï ta cã thÓ ®Þnh nghÜa h»ng ë chç kh¸c, lý do lµ lÖnh gi¶ EQU kh«ng cÊp ph¸t bé nhí cho h»ng (tªn h»ng kh«ng t−¬ng øng víi mét ®Þa chØ nµo) nªn ta cã thÓ ®Þnh nghÜa h»ng tù do tho¶i m¸i trong ch−¬ng tr×nh. ViÖc khai b¸o ®o¹n d÷ liÖu ®−îc thùc hiÖn nhê h−íng dÉn ch−¬ng tr×nh dÞch .Data. §Þnh nghÜa c¸c biÕn, m¶ng vµ h»ng ®−îc thùc hiÖn tiÕp ngay sau ®ã b»ng c¸c lÖnh gi¶ thÝch hîp, cña thÓ nh− sau: VÝ dô: .Data Chao db 'Xin chao ban!','$' Crlf db 0dh, 0ah, '$' Pa Equ 300h Khai b¸o ®o¹n m· lÖnh PhÇn nµy chøa toµn bé m· lÖnh cña ch−¬ng tr×nh. ViÖc khai b¸o ®o¹n m· ®−îc thùc hiÖn nhê h−íng dÉn ch−¬ng tr×nh dÞch .Code nh− sau: .Code Tªn_CTC Proc C¸c lÖnh ;C¸c lÖnh cña thanh ch−¬ng tr×nh chÝnh 34 NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh
  8. http://www.ebook.edu.vn Tr−êng ®¹i häc kü thuËt C«ng NghiÖp Call Tªn_ctc ;Gäi ch−¬ng tr×nh con . . . Tªn_CTC Endp Tæng qu¸t: Mét thñ tôc ®−îc ®Þnh nghÜa nhê cÆp thñ tôc 'Proc - Endp ', ch−¬ng tr×nh chÝnh còng lµ mét thñ tôc ®−îc ®Þnh nghÜa nh− trªn. LÖnh gi¶ Proc dïng ®Ó b¸o b¾t ®Çu mét thñ tôc vµ lÖnh gi¶ Endp dïng ®Ó b¸o kÕt thóc thñ tôc ®ã. Mét ch−¬ng tr×nh con còng ®−îc ®Þnh nghÜa d−íi d¹ng mét thñ tôc nhê c¸c lÖnh gi¶ 'Proc - Endp ' nh− sau: Tªn_ctc Proc C¸c lÖnh cña ch−¬ng tr×nh con ë ®©y Ret Tªn_ctc Endp Chó ý: Trong ch−¬ng tr×nh con, t¹i cuèi ch−¬ng tr×nh cã lÖnh Ret lµ lÖnh trë vÒ ch−¬ng tr×nh chÝnh tõ ch−¬ng tr×nh con. §Ó kÕt thóc toµn bé ch−¬ng tr×nh, ta dïng h−íng dÉn ch−¬ng tr×nh dÞch End nh− sau: End Tªn_CTC Khung cña ch−¬ng tr×nh hîp ng÷ ®Ó dÞch ra ch−¬ng tr×nh *.exe .Model Small .Stack 100 .Data ;§Þnh nghÜa c¸c biÕn, m¶ng, h»ng ë ®©y .Code Tªn_CTC Proc ;Khëi t¹o ®o¹n d÷ liÖu Mov ax, @Data Mov ds, ax Mov es, ax ;NÕu cÇn ;C¸c lÖnh cña ch−¬ng tr×nh chÝnh ;Trë vÒ DOS dïng hµm 4ch cña ng¾t 21h Mov ah, 4ch Int 21h Tªn_CTC Endp ;C¸c ch−¬ng tr×nh con nÕu cã ®−îc ®Þnh nghÜa ë ®©y End Tªn_CTC Khi ch−¬ng tr×nh *.exe ®−îc n¹p vµo bé nhí, DOS sÏ lËp ra mét mét m¶ng gäi lµ ®o¹n mµo ®Çu ch−¬ng tr×nh (Program Segment Prefix - PSP) gåm 256 byte dïng ®Ó chøa c¸c th«ng tin liªn quan ®Õn ch−¬ng tr×nh vµ c¶ DOS, ®−îc g¾n vµo ®Çu ch−¬ng tr×nh. DOS sö dông c¸c th«ng tin nµy ®Ó gióp ch¹y ch−¬ng tr×nh, PSP ®−îc DOS khëi t¹o cho mäi ch−¬ng tr×nh dï chóng ®−îc viÕt b»ng ng«n ng÷ nµo. Do ngay khi ch−¬ng tr×nh ®−îc n¹p vµo bé nhí, DOS còng ®−a c¸c th«ng sè liªn quan ®Õn ch−¬ng tr×nh vµo c¸c thanh ghi DS vµ ES (cô thÓ lµ DS vµ ES trá vµo ®Çu cña PSP) mµ kh«ng chøa gi¸ trÞ ®Þa chØ cña c¸c thanh ghi ®o¹n d÷ liÖu cña ch−¬ng tr×nh. §Ó ch−¬ng tr×nh ch¹y ®óng, ta ph¶i khëi ®Çu cho c¸c thanh ghi DS vµ Mov ax, @Data ES nhê c¸c lÖnh: Mov ds, ax Mov es, ax Víi 8088/8086 vµ mét sè bé vi xö lý kh¸c thuéc hä 80x86 NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh 35
  9. http://www.ebook.edu.vn Tr−êng ®¹i häc kü thuËt C«ng NghiÖp cña Intel, v× lý do kü thuËt mµ chóng kh«ng cho phÐp chuyÓn gi¸ trÞ sè (chÕ ®é ®Þa chØ trùc tiÕp) vµo c¸c thanh ghi ®o¹n nªn ta ph¶i dïng thanh ghi ax lµm trung gian. Thanh ghi ax còng cã thÓ thay thÕ b»ng c¸c thanh ghi ®a n¨ng kh¸c. @Data lµ tªn cña ®o¹n d÷ liÖu, .Data d®Þnh nghÜa bëi h−íng dÉn ch−¬ng tr×nh dÞch ch−¬ng tr×nh dÞch sÏ dÞch tªn @Data thµnh gi¸ trÞ ®Þa chØ cña ®o¹n d÷ liÖu. Ch−¬ng tr×nh vÝ dô1.asm ®Ó dÞch ra *,exe, thùc hiÖn xuÊt mét dßng ký tù lªn mµn h×nh. Dßng ký tù ë ®©y lµ lêi chµo bÊt kú ®−îc hiÖn gi÷a 2 dßng trèng: .Model Small .Stack 100 .Data Chao db 'Xin chao, chuc mung ban da thanh cong voi chuong trinh dau tay$' Crlf db 0dh, 0ah, '$' .Code Vidu1 Proc Mov ax, @Data ;LÊy ®Þa chØ cña ®o¹n d÷ liÖu Mov ds, ax ;Khëi t¹o ®o¹n d÷ liÖu Mov es, ax ;VÒ ®Çu dßng míi dïng hµm 9 cña ng¾t 21h ®Ó "hiÓn thÞ" cÆp ký tù ;xuèng dßng (lf: line feed) vµ vÒ ®Çu dßng (cr: carriage return) Mov ah, 9 Lea dx, crlf Int 21h ;HiÓn thÞ lêi chµo dïng hµm 9 cña ng¾t 21h Mov ah, 9 Lea dx, Chao Int 21h ;VÒ ®Çu dßng míi dïng hµm 9 cña ng¾t 21h Mov ah, 9 Lea dx, crlf Int 21h ;VÒ DOS dïng hµm 4ch cña ng¾t 21h Mov ah, 4ch Int 21h Vidu1 Endp End Vidu1 NhËn xÐt vÒ ch−¬ng tr×nh trªn: Khung cña ch−¬ng tr×nh hîp ng÷ ®Ó dÞch ra ch−¬ng tr×nh *.com Víi khung ch−¬ng tr×nh hîp ng÷ ®Ó dÞch ra tÖp ch−¬ng tr×nh ch¹y ®−îc *.exe th× cã mÆt ®Çy ®ñ c¸c ®o¹n. Ngoµi tÖp ch−¬ng tr×nh ch¹y ®−îc cã phÇn më réng .exe ra ta cßn cã kh¶ n¨ng dÞch ch−¬ng tr×nh hîp ng÷ cã kÕt cÊu (cÊu tróc) thÝch hîp ra mét lo¹i ch−¬ng tr×nh ch¹y ®−îc kiÓu kh¸c víi phÇn më réng .com. §©y lµ ch−¬ng tr×nh ng¾n gän vµ ®¬n gi¶n h¬n nhiÒu so víi tÖp ch−¬ng tr×nh *.exe mµ trong ®ã c¸c ®o¹n: ®o¹n m·, ®o¹n d÷ liÖu vµ ®o¹n ng¨n xÕp cña ch−¬ng tr×nh ®−îc gãi gän trong mét ®o¹n (64Kbyte) duy nhÊt lµ ®o¹n m·. Víi nh÷ng øng dông mµ d÷ liÖu vµ m· lÖnh cña ch−¬ng tr×nh kh«ng yªu cÇu nhiÒu vÒ kh«ng gian nhí th× ta cã thÓ ghÐp lu«n chóng chung vµo cïng mét ®o¹n m· råi t¹o ra tÖp *.com. ViÖc t¹o ra tÖp nµy kh«ng chØ tiÕt 36 NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh
  10. http://www.ebook.edu.vn Tr−êng ®¹i häc kü thuËt C«ng NghiÖp kiÖm ®−îc thêi gian vµ bé nhí khi cho ch¹y ch−¬ng tr×nh mµ cßn tiÕt kiÖm c¶ kh«ng gian nhí khi ph¶i l−u tr÷ chóng trªn bé nhí ngoµi (®Üa tõ). §Ó cã thÓ t¹o ra ®−îc ch−¬ng tr×nh víi phÇn më réng .com th× ch−¬ng tr×nh nguån hîp ng÷ ph¶i cã kÕt cÊu thÝch hîp, mét vÝ dô nh− sau: .Model Tiny .Code ORG 100h Start: Jmp Continue ;§Þnh nghÜa c¸c biÕn, m¶ng, h»ng ë ®©y Continue: Tªn_CTC Proc ;C¸c lÖnh cña ch−¬ng tr×nh chÝnh ;Trë vÒ DOS dïng ng¾t 20h Int 20h Tªn_CTC Endp ;C¸c ch−¬ng tr×nh con nÕu cã ®−îc ®Þnh nghÜa ë ®©y End Start Nh×n vµo khung ch−¬ng tr×nh hîp ng÷ ®Ó dÞch ra ch−¬ng tr×nh .com ta thÊy kh«ng cã khai b¸o ®o¹n ng¨n xÕp vµ ®o¹n d÷ liÖu, khai b¸o quy m« sö dông bé nhí lµ Tiny (tuy nhiªn cã thÓ sö dông quy m« bé nhí lµ Small). ë ®Çu ®o¹n m· cã lÖnh gi¶ Org (Origin: ®iÓm xuÊt ph¸t) vµ lÖnh Jmp (nh¶y). LÖnh Org 100h dïng ®Ó g¸n ®i¹ chØ b¾t ®Çu cho ch−¬ng tr×nh lµ 100h trong ®o¹n m·, bá qua vïng nhí kÝch th−íc 100h (256 byte) cho ®o¹n mµo ®Çu (PSP) tõ ®Þa chØ 0 ®Õn ®Þa chØ 255. LÖnh Jmp dïng ®Ó nh¶y qua phÇn bé nhí dµnh cho viÖc ®Þnh nghÜa c¸c d÷ liÖu (vÒ nguyªn t¾c, d÷ liÖu cã thÓ ®−îc ®Æt ë ®Çu hoÆc cuèi ®o¹n m· nh−ng ë ®©y, nã ®−îc ®Æt ë ®Çu ®Ó cã thÓ ¸p dông c¸c ®Þnh nghÜa ®¬n gi¶n ®· nãi). §Ých cña lÖnh nh¶y lµ phÇn b¾t ®Çu cña ch−¬ng tr×nh chÝnh. H×nh vÏ: TÖp ch−¬ng tr×nh .com trong bé nhí Nh×n vµo h×nh vÏ ta thÊy mét ch−¬ng tr×nh .com cïng ®−îc n¹p vµo bé nhí sau vïng PSP nh− ch−¬ng tr×nh .exe. Ng¨n xÕp cho ch−¬ng tr×nh ®−îc ®Æt cuèi ®o¹n m·, ®Ønh cña ng¨n xÕp lóc ban ®Çu lµ « nhí cã ®Þa chØ FFFEh. §Æc ®iÓm cña ch−¬ng tr×nh *.com V× dung l−îng nhí cùc ®¹i cña mét ®o¹n lµ 64Kbyte, nªn ta ph¶i ch¾c ch¾n r»ng ch−¬ng tr×nh cña ta cã sè l−îng byte cña m· lÖnh vµ d÷ liÖu lµ kh«ng lín (kh«ng v−ît qu¸ giíi h¹n cho phÐp cña mét ®o¹n, nÕu kh«ng nã sÏ lµm cho c¶ nhãm në ra vÒ phÝa ®Þa chØ cao cña ®o¹n). Ch−¬ng tr×nh ph¶i sö dông ng¨n xÕp mét c¸ch h¹n chÕ, nÕu kh«ng nã sÏ lµm cho ®Ønh ng¨n xÕp d©ng lªn vÒ phÝa ®Þa chØ thÊp cña ®o¹n khi ho¹t ®éng.Chóng ta ph¶i ®¶m b¶o r»ng kh«ng thÓ x¶y ra hiÖn t−îng chïm lªn nhau cña c¸c th«ng tin t¹i vïng ng¨n xÕp vµ th«ng tin t¹i vïng m· lÖnh vµ d÷ liÖu. Khi kÕt thóc ch−¬ng tr×nh kiÓu *.com, ®Ó trë vÒ DOS ta dïng ng¾t 20h cña DOS ®Ó lµm cho ch−¬ng tr×nh gän h¬n. MÆc dï ta vÉn cã thÓ dïng hµm 4ch cña ng¾t 21h ®Ó trë vÒ DOS nh− ®· dïng trong ch−¬ng tr×nh ®Ó dÞch ra *.exe. NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh 37
  11. http://www.ebook.edu.vn Tr−êng ®¹i häc kü thuËt C«ng NghiÖp Khi kÕt thóc toµn bé ch−¬ng tr×nh ta dïng h−íng dÉn ch−¬ng tr×nh dÞch END kÌm theo nh·n Start. Nh·n Start t−¬ng øng ®Þa chØ lÖnh ®Çu tiªn cña ch−¬ng tr×nh trong ®o¹n m·. Chóng ta cã thÓ viÕt l¹i ch−¬ng tr×nh trong vÝ dô tr−íc (®Ó dÞch ra *.exe) thùc hiÖn viÖc xuÊt mét x©u ký tù lªn mµn h×nh theo khung ch−¬ng tr×nh ®Ó dÞch ra *.com: .Model Tiny .Code ORG 100h Start: Jmp Continue Chao db 'Xin chµo . . .$' Crlf db 0dh, 0ah,'$' Continue: Main Proc Mov ah, 9 ;VÒ ®Çu dßng míi dïng hµm 9 cña ng¾t 21h Lea dx, Crlf Int 21h ;HiÓn thÞ lêi chµo Mov ah, 9 Lea dx, Chao Int 21h Mov ah, 9 ;VÒ ®Çu dßng míi dïng hµm 9 cña ng¾t 21h Lea dx, Crlf Int 21h Int 20h ;Trë vÒ DOS dïng ng¾t 20h Main Endp ;C¸c ch−¬ng tr×nh con nÕu cã ®−îc ®Þnh nghÜa ë ®©y End Start 3. C¸ch t¹o vµ cho ch¹y mét ch−¬ng tr×nh hîp ng÷ T¹o tÖp v¨n b¶n ch−¬ng C¸c b−íc thùc hiÖn viÖc t¹o ra vµ cho ch¹y mét tr×nh nguån *.asm ch−¬ng tr×nh hîp ng÷ nh− sau: i. So¹n th¶o v¨n b¶n ch−¬ng tr×nh nguån (dïng c¸c phÇn mÒm so¹n th¶o nh−: SK, NCedit, Bked, Turbo Dïng masm (tasm) dÞch ra m· m¸y *.obj Pascal, . . .), nªn dïng NCedit cho ®¬n gi¶n. TÖp ch−¬ng tr×nh nguån nµy ph¶i ®−îc g¸n phÇn më réng lµ .asm. Dïng link ®Ó nèi (c¸c) tªp *.obj thµnh *.exe ii. Dïng ch−¬ng tr×nh dÞch MASM (hoÆc TASM) ®Ó dÞch tÖp *.asm ra m· m¸y d−íi d¹ng *.obj. NÕu trong b−íc nµy trong ch−¬ng tr×nh nguån cã lçi có ph¸p th× S ta quay l¹i b−íc i ®Ó söa l¹i ch−¬ng tr×nh nguån. DÞch ®−îc ra *.com iii. Dïng ch−¬ng tr×nh LINK ®Ó nèi mét hay nhiÒu tÖp *.obj l¹i víi nhau thµnh mét ch−¬ng tr×nh ch¹y ®−îc § *.exe. iv. NÕu ch−¬ng tr×nh viÕt ra ®Ó dÞch ra kiÓu ch−¬ng tr×nh Dïng exe2bin dÞch *.exe *.com th× ta ph¶i dïng ch−¬ng tr×nh EXE2BIN cña thµnh *.com DOS ®Ó dÞch tiÕp tÖp *.exe ra tÖp ch−¬ng tr×nh *.com. Cho ch¹y v. Cho ch¹y ch−¬ng tr×nh võa dÞch Ch−¬ng tr×nh 38 NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh
  12. http://www.ebook.edu.vn Tr−êng ®¹i häc kü thuËt C«ng NghiÖp 4. C¸c cÊu tróc lËp tr×nh c¬ b¶n trong assembly Th«ng th−êng trong thùc tÕ, ng−êi ta th−êng ph©n tÝch bµi to¸n vµ thiÕt kÕ ch−¬ng tr×nh (hÖ thèng nãi chung) b»ng ph−¬ng ph¸p thiÕt kÕ tõ trªn xuèng (top-down) t−¬ng øng víi kü thuËt lËp tr×nh cã cÊu tróc. Néi dung cña ph−¬ng ph¸p lµ chia bµi to¸n tæng thÓ (hay ch−¬ng tr×nh ®ang thiÕt kÕ) thµnh nh÷ng bµi to¸n nhá h¬n (cã thÓ lµ c¸c khèi chøc n¨ng). C¸c bµi to¸n nhá nµy l¹i ®−îc chia thµnh c¸c bµi to¸n nhá h¬n n÷a cho ®Õn khi mçi bµi to¸n nhá nµy trë thµnh nh÷ng bµi to¸n ®¬n gi¶n, dÔ thùc hiÖn. ViÖc lËp tr×nh gi¶i quyÕt bµi to¸n nhá ®Ó t¹o thµnh khèi chøc n¨ng thµnh phÇn ng−êi ta th−êng sö dông c¸c cÊu tróc lËp tr×nh c¬ b¶n ®Ó thùc hiÖn nhiÖm vô c¸c khèi ®ã. Víi c¸ch tiÕn hµnh nh− vËy lµm cho ch−¬ng tr×nh viÕt ra trë thµnh –cã cÊu tróc–, mang theo nh÷ng −u ®iÓm lµ râ rµng, dÔ ph¸t triÓn, dÔ hiÖu chØnh hoÆc c¶i tiÕn vµ n©ng cÊp. Khi ph©n tÝch vµ viÕt ch−¬ng tr×nh ®Ó gi¶i quyÕt c¸c c«ng viÖc kh¸c nhau ta cã c¸c cÊu tróc lËp tr×nh c¬ b¶n sau: CÊu tróc tuÇn tù CÊu tróc lùa chän • if dk then s1 [else s2] • case V of . . . [else] CÊu tróc lÆp • while dk do s • repeat s1, s2, . . ., sn until dk • for index=v1 to v2 do s C¸c cÊu tróc lËp tr×nh c¬ b¶n trªn ®Òu cã mét ®Æc ®iÓm lµ –tÝnh cÊu tróc–. ChØ cã mét lèi vµo cÊu tróc vµ mét lèi ra cÊu tróc ®ã. Chóng ta ®· ®−îc lµm quen víi c¸c cÊu tróc lËp tr×nh c¬ b¶n khi viÕt ch−¬ng tr×nh trªn ng«n ng÷ bËc cao. C«ng viÖc cña chóng ta giê ®©y lµ lµm thÕ nµo ®Ó thùc hiÖn c¸c cÊu tróc lËp tr×nh nµy b»ng hîp ng÷ (assembly). Chóng ta sÏ lÇn l−ît nghiªn cøu c¸ch m« t¶ c¸c cÊu tróc lËp tr×nh c¬ b¶n: a. CÊu tróc tuÇn tù §©y lµ cÊu tróc lËp tr×nh th«ng dông vµ ®¬n gi¶n nhÊt. Trong cÊu tróc nµy c¸c c«ng viÖc (c¸c lÖnh) ®−îc tiÕn hµnh (thùc hiÖn) tuÇn tù, lÖnh nµy lµ tiÕp theo cña lÖnh kia. LÖnh cuèi cïng thùc hiÖn th× sÏ hoµn tÊt c«ng viÖc cña khèi chøc n¨ng vµ ra khái cÊu tróc. M« t¶: vµo i1 i1 ;lÖnh 1 i2 ;lÖnh 2 i2 . . . in ;lÖnh n Më réng: C¸c lÖnh i1, i2, –, in còng cã thÓ lµ mét cÊu tróc bÊt kú in VÝ dô: ra TÝnh biÓu thøc b2 - 4ac, víi: al chøa a, bl chøa b vµ cl chøa c mul cl ;tÝnh ax al*cl mov cl,2 ;sè lÇn dÞch to¸n h¹ng ax NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh 39
  13. http://www.ebook.edu.vn Tr−êng ®¹i häc kü thuËt C«ng NghiÖp shl ax,cl ;ax*4 mov ax,cx ;l−u kÕt qu¶ sang cx mov al,bl ;n¹p biÕn b vµo al mul bl ;ax al*bl ax-cx, ax chøa kÕt qu¶ cña biÓu thøc b2 – 4ac sub ax,cx ; ax b. CÊu tróc lùa chän if dk then cv vµo NÕu ®iÒu kiÖn (dk) cho gi¸ trÞ ®óng th× thùc hiÖn cv (c«ng viÖc). Ng−îc l¹i c«ng viÖc bÞ bá qua. §Ó thùc hiÖn ®iÒu nµy, ta sö s dông cÆp lÖnh so s¸nh (cmp) vµ lÖnh nhÈy cã ®iÒu kiÖn ®Ó nhÈy dk qua mét sè lÖnh (c«ng viÖc nµo ®ã) trong ch−¬ng tr×nh hîp ng÷. ® VÝ dô: cv NhËp mét ký tù tõ bµn phÝm, kiÓm tra xem nÕu ký tù ®ã kh«ng lµ ký tù ®iÒu khiÓn th× hiÓn thÞ lªn mµn h×nh ë ®Çu dßng tiÕp theo, ra ng−îc l¹i (lµ ký tù ®iÒu khiÓn) th× kh«ng lµm g× vµ ra khái cÊu tróc. mov ah,1 ;NhËp 1 ký tù int 21h ;b»ng hµm 2 cña ng¾t 21h mov bl,al ;CÊt m· ASCII cña ký tù nhËn ®−îc lea dx,crlf ;Xuèng dßng b»ng c¸ch hiÓn thi x©u mov ah,9 ;cã c¸c ký tù CR vµ LF int 21h ;b»ng hµm 9 cña ng¾t 21h cmp bl,20h ;KiÓm tra ký tù nhËn ®−îc jb Ra ;Lµ ký tù ®iÒu khiÓn => kh«ng lµm g×, mov dl,bl ;kh«ng lµ ký tù ®iÒu khiÓn th× mov ah,2 ;hiÓn thÞ ký tù ®ã int 21h ; b»ng hµm 2 cña ng¾t 21h Ra: ;Ra khái cÊu tróc if dk then cv1 else cv2 vµo NÕu ®iÒu kiÖn (dk) cho gi¸ trÞ ®óng th× thùc hiÖn cv1 (c«ng viÖc 1). Ng−îc l¹i, thùc hiÖn cv2 (c«ng viÖc 2) qua. s ® §Ó thùc hiÖn ®iÒu nµy, ta sö dông cÆp lÖnh so s¸nh dk (cmp) vµ lÖnh nhÈy cã ®iÒu kiÖn ®Ó nhÈy qua mét sè lÖnh (c«ng viÖc nµo ®ã) trong ch−¬ng tr×nh hîp ng÷. cv1 cv2 VÝ dô: NhËp mét ký tù tõ bµn phÝm, kiÓm tra xem nÕu ký tù ®ã kh«ng lµ ký tù ®iÒu khiÓn th× hiÓn thÞ lªn mµn h×nh ë ra ®Çu dßng tiÕp theo, ng−îc l¹i (lµ ký tù ®iÒu khiÓn) th× hiÓn thÞ mét th«ng b¸o. mov ah,1 ;NhËp 1 ký tù int 21h ;b»ng hµm 2 cña ng¾t 21h mov bl,al ;CÊt m· ASCII cña ký tù nhËn ®−îc lea dx,crlf ;Xuèng dßng b»ng c¸ch hiÓn thi x©u mov ah,9 ;cã c¸c ký tù CR vµ LF int 21h ;b»ng hµm 9 cña ng¾t 21h cmp bl,20h ;KiÓm tra ký tù nhËn ®−îc jb Dkhien ;Lµ ký tù ®iÒu khiÓn => hiªn thÞ th«ng b¸o (Dkhien), mov dl,bl ;kh«ng lµ ký tù ®iÒu khiÓn th× 40 NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh
  14. http://www.ebook.edu.vn Tr−êng ®¹i häc kü thuËt C«ng NghiÖp mov ah,2 ;hiÓn thÞ ký tù ®ã int 21h ;b»ng hµm 2 cña ng¾t 21h jmp Ra ;Xong c«ng viÖc th× ra khái cÊu tróc Dkhien:lea dx,mesg ;mesg lµ biÕn x©u chøa dßng th«ng b¸o mov ah,9 ;Dïng hµm 9 int 21h ; cña ng¾t 21h Ra: ;Ra khái cÊu tróc c. CÊu tróc Case VÝ dô: vµo NhËp mét ký tù tõ bµn phÝm, kiÓm tra xem: nÕu ký tù ®ã lµ ký tù –1–, th× hiÓn thÞ th«ng b¸o 1. E nÕu ký tù ®ã lµ ký tù –2–, th× hiÓn thÞ th«ng b¸o 2. n1 nn n2 nÕu ký tù ®ã lµ ký tù –3–, th× hiÓn thÞ th«ng b¸o 3. cv cv cv nÕu kh«ng lµ c¸c ký tù trªn th× hiÓn thÞ th«ng b¸o 4. mov ah,1 ;NhËp 1 ký tù int 21h ;b»ng hµm 2 cña ng¾t 21h ra mov bl,al ;CÊt m· ASCII cña ký tù nhËn ®−îc lea dx,crlf ;Xuèng dßng b»ng c¸ch hiÓn thi x©u mov ah,9 ;cã c¸c ký tù CR vµ LF int 21h ;b»ng hµm 9 cña ng¾t 21h cmp bl,'1' ;KiÓm tra ký tù nhËn ®−îc xem cã b»ng ký tù '1' je Tb1 ;b»ng, th× hiÓn thÞ th«ng b¸o 1. Kh«ng, kiÓm tra tiÕp cmp bl,'2' ;KiÓm tra ký tù nhËn ®−îc xem cã b»ng ký tù '2' je Tb2 ;b»ng, th× hiÓn thÞ th«ng b¸o 2. Kh«ng, kiÓm tra tiÕp cmp bl,'3' ;KiÓm tra ký tù nhËn ®−îc xem cã b»ng ký tù '3' je Tb3 ;b»ng, th× hiÓn thÞ th«ng b¸o 3. Kh«ng, kiÓm tra tiÕp jmp Tb4 ;NÕu kh«ng b»ng c¸c ký tù trªn th× hiÓn thÞ th«ng b¸o 4 Tb1: ;HiÓn thÞ th«ng b¸o 1 jmp Ra ;hiÓn thÞ xong th× ra khái cÊu tróc Tb2: ;HiÓn thÞ th«ng b¸o 2 jmp Ra ;hiÓn thÞ xong th× ra khái cÊu tróc Tb3: ;HiÓn thÞ th«ng b¸o 3 jmp Ra ;hiÓn thÞ xong th× ra khái cÊu tróc Tb4: ;HiÓn thÞ th«ng b¸o 4 Ra: ;Ra khái cÊu tróc d. CÊu tróc For – do vµo §©y lµ vßng lÆp víi sè lÇn lÆp n biÕt tr−íc. Ban ®Çu biÕn chØ sè lÇn lÆp k ®−îc g¸n b»ng kh«ng, chõng nµo nã cßn nhá h¬n n k=0 th× thùc hiÖn lÆp l¹i c«ng viÖc (cv), k ®−îc t¨ng 1 sau mçi lÇn thùc s hiÖn cv. k0? SÏ cßn lÆp khi biÓu cv thøc so s¸nh nµy lµ ®óng, tÊt nhiªn k sÏ ®−îc gi¶m 1 sau mçi lÇn lÆp. §iÒu nµy hoµn toµn phï hîp víi sù lµm viÖc cña lÖnh LOOP inc k mµ chóng ta ®· biÕt. ra VÝ dô: HiÓn thÞ lªn mµn h×nh 80 dÊu * trªn mét dßng mov ah,2 ;Dïng hµm 2 cña ng¾t 21h NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh 41
  15. http://www.ebook.edu.vn Tr−êng ®¹i häc kü thuËt C«ng NghiÖp mov dl,'*' ;®Ó hiÓn thÞ ký tù mov cl,80 for: int 21h loop for e. CÊu tróc While – do vµo §©y lµ vßng lÆp víi sè lÇn lÆp kh«ng biÕt tr−íc. Chõng nµo biÓu thøc ®iÒu kiÖn cßn ®óng th× thùc hiÖn lÆp l¹i c«ng viÖc (cv), s ®Ó ®¶m b¶o cho tÝnh dõng cña gi¶i thuËt th× c«ng viÖc (cv) ph¶i dk cã sù t¸c ®éng ®Õn dk d−íi h×nh thøc nµo ®ã. ® Nh×n vµo s¬ ®å khèi cña vßng lÆp nµy ta thÊy rÊt gièng víi cv cÊu tróc cña vßng lÆp for - to tuy nhiªn ta kh«ng thÓ dïng lÖnh LOOP ®Ó ®iÒu khiÓn cho vßng lÆp nµy v× lÖnh LOOP lÆp l¹i ®o¹n ch−¬ng tr×nh do NHAN chØ ra víi sè nguyªn lÇn ®−îc x¸c ®Þnh ra tr−íc trong thanh ghi CX. Ta sÏ sö dông c¸c lÖnh nh¶y cã ®iÒu kiÖn ®Ó ®iÒu cho vßng lÆp nµy. VÝ dô: TÝnh tæng ax = 1+4+7+ . . . Céng cho ®Õn khi ax> 100 xor ax,ax ;Ban ®Çu tæng tÝch luü b»ng 0 mov bx,1 ;§Æt phÇn tö ®Çu tiªn vµo thanh ghi bx while: cmp ax,100 ;KiÓm tra ®iÒu kiÖn (yªu cÇu) cña bµi to¸n ja End_while ;ax>100 (®óng), ra khái cÊu tróc (cã thÓ dïng jnbe) add ax,bx ;ng−îc l¹i, céng tiÕp add bx,3 ;chuyÓn lªn phÇn tö tiÕp theo cña d·y jmp while ;Sau khi cËp nhËt ax, kiÓm tra l¹i ®iÒu kiÖn cña bµi to¸n End_while: Ra khái cÊu tróc f. CÊu tróc Repeat – until vµo §©y lµ vßng lÆp víi sè lÇn lÆp kh«ng biÕt tr−íc. Thùc hiÖn lÆp l¹i cc«ng viÖc (cv) cho ®Õn khi biÓu thøc ®iÒu kiÖn (dk) ®óng. §Ó ®¶m b¶o cho tÝnh dõng cña gi¶i thuËt th× c«ng viÖc (cv) ph¶i cã sù t¸c ®éng ®Õn cv dk d−íi h×nh thøc nµo ®ã. s dk Thùc tÕ, trong nhiÒu tr−êng hîp cÊu tróc while - do vµ cÊu tróc repeat - until cã thÓ thay thÕ cho nhau ®−îc. Sù kh¸c nhau ë chç: víi ® cÊu tróc repeat - until th× c«ng viÖc ®−îc thùc hiÖn Ýt nhÊt 1 lÇn cßn ra trong cÊu tróc while - do th× c«ng viÖc cã thÓ kh«ng ®−îc thùc hiÖn lÇn nµo. Ta sÏ sö dông c¸c lÖnh nh¶y cã ®iÒu kiÖn ®Ó ®iÒu cho vßng lÆp nµy. VÝ dô: TÝnh tæng ax = 1+4+7+ . . . + (3*(n-1)+1) Céng cho ®Õn khi sè h¹ng trong d·y trªn >100, sè h¹ng nµy kh«ng ®−îc céng vµo ax xor ax,ax ;Ban ®Çu tæng tÝch luü b»ng 0 mov bx,1 ;§Æt phÇn tö ®Çu tiªn vµo thanh ghi bx repeat: add ax,bx ;Céng vµo tæng tÝch luü add bx,3 ;ChuyÓn lªn phÇn tö tiÕp theo cña d·y cmp bx,100 ;KiÓm tra ®iÒu kiÖn (yªu cÇu) cña bµi to¸n jbe repeat ;nÕu ch−a tho¶ m·n th× céng tiÕp sè h¹ng tiÕp theo vµo ax ;Ra khái cÊu tróc 42 NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh
  16. http://www.ebook.edu.vn Tr−êng ®¹i häc kü thuËt C«ng NghiÖp 5. TruyÒn tham sè Khi x©y dùng c¸c øng dông cô thÓ, ta cÇn quan t©m tíi viÖc truyÒn tham sè gi÷a ch−¬ng tr×nh chÝnh cho ch−¬ng tr×nh con hoÆc gi÷a c¸c modul ch−¬ng tr×nh víi nhau. Víi assembly, ng−êi ta th−êng dïng c¸c c¸ch truyÒn sau: TruyÒn tham sè qua thanh ghi (truyÒn tham trÞ) TruyÒn tham sè qua « nhí (biÕn) TruyÒn tham sè qua « nhí cã ®Þa chØ trong mét thanh ghi nµo ®ã (tham biÕn) TruyÒn tham sè qua ng¨n xÕp (stack). C¸c vÝ dô minh ho¹: 6. C¸c vÝ dô cô thÓ a. Mét sè ng¾t cña DOS vµ cña BIOS Khi x©y dùng c¸c øng dông b»ng hîp ng÷ (assemby), th−êng lµ c¸c c«ng viÖc cho phÐp can thiÖp x©u vµo phÇn cøng m¸y tÝnh, c¸c thao t¸c cÊp thÊp nhÊt cña c¸c thµnh phÇn trong m¸y tÝnh. §Ó c¸c thao t¸c trªn cã thÓ ®¹t hiÖu qu¶ cao, ta nªn sö dông c¸c dÞch cô cña BIOS vµ cña DOS. §©y lµ c¸c ng¾t lµm viÖc víi ®é tin cËy rÊt cao vµ cã s½n (mÆc dï ta vÉn cã thÓ t¹o ra c¸c ng¾t riªng ®Ó thùc hiÖn c¸c c«ng viÖc t−¬ng tù nh−ng sù ng¾n gän, tÝnh tèi −u vµ ®é tin cËy th× khã cã thÓ s¸nh víi c¸c ng¾t cña BIOS vµ cña DOS). C¸c ng¾t cña BIOS Sè hiÖu Hµm C«ng dông Tham sè vµo Tham sè ra ng¾t 10h 0 Chän chÕ ®é hiÓn thÞ ah=0; al=chÕ ®é Kh«ng cho mµn h×nh. (VGA, 16 mau>: al=3) 1 Thay ®æi kÝch th−íc con ah=1; 4 bit thÊp cña Kh«ng trá, ph¶i chän dßng quÐt ch=dßng quÐt ®Çu; 4 bit b¾t ®Çu vµ kÕt thóc cña thÊp cña cl=dßng quÐt cuèi con trá. 2 DÞch chuyÓn con trá (vÞ ah=2; bh=sè trang; Kh«ng trÝ). dh=hµng; dl=cét 3 X¸c ®Þnh vÞ trÝ vµ kÝch ah=3; bh=sè trang; ch=dßng quÐt ®Çu; th−íc hiÖn thêi cña con cl=dßng quÐt cuèi; trá. dh=dßng; dl=cét 5 Chän trang hiÓn thÞ. ah=5; al=sè trang; Kh«ng dh=dßng; dl=cét 6 Cuèn mµn h×nh hay cöa ah=6; al=sè dßng cuèn Kh«ng sæ lªn mét sè dßng x¸c (al=0 th× cuèn c¶ mµn h×nh ®Þnh. hay cöa sæ); bh=thuéc tÝnh cña c¸c dßng trèng; (ch,cl)=(dßng,cét) gãc trªn tr¸i cña cöa sæ; (dh,dl)=(dßng,cét) gãc d−íi ph¶i cña cöa sæ 7 Cuèn mµn h×nh hay cöa ah=6; al=sè dßng cuèn Kh«ng sæ xuèng mét sè dßng (al=0 th× cuèn c¶ mµn h×nh x¸c ®Þnh. hay cöa sæ); bh=thuéc tÝnh cña c¸c dßng trèng; (ch,cl)=(dßng,cét) gãc trªn tr¸i cña cöa sæ; (dh,dl)=(dßng,cét) gãc d−íi ph¶i cña cöa sæ 8 §äc ký tù víi thuéc tÝnh ah=8; bh=sè trang ah=thuéc tÝnh; al=m· NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh 43
  17. http://www.ebook.edu.vn Tr−êng ®¹i häc kü thuËt C«ng NghiÖp t¹i vÞ trÝ con trá (m· ASCII cña ký tù ASCII). 9 HiÖn ký tù víi thuéc tÝnh ah=9; al=m· ASCII cña ký Kh«ng t¹i vÞ trÝ con trá. tù; bh=sè trang; bl=thuéc tÝnh; cx=sè lÇn viÕt ký tù 0ah ViÕt ký tù t¹i vÞ trÝ con ah=0ah; al=m· ASCII cña Kh«ng trá, ký tù nhËn thuéc tÝnh ký tù; bl=sè trang; cx=sè cña ký tù viÕt tr−íc. lÇn viÕt ký tù 0bh ThiÕt lËp b¶ng mµu, nÒn vµ viÒn. 0ch ViÕt ®iÓm ¶nh ®å ho¹ 0dh §äc ®iÓm ¶nh ®å ho¹ 0eh ViÕt ký tù trong chÕ ®é telex 0fh X¸c ®Þnh chÕ ®é mµn h×nh 10h (hµm ThiÕt lËp thanh ghi mµu con 10h) 10h (hµm ThiÕt lËp nhãm c¸c con 12h) thanh ghi mµu 10h (hµm X¸c ®Þnh thanh ghi mµu con 15h) 10h (hµm LÊy nhãm thanh ghi con 17h) mµu 11h X¸c ®Þnh cÊu h×nh cña thiÕt bÞ 12h X¸c ®Þnh kÝch th−íc bé nhí quy −íc Thµnh c«ng: 13h 2 §äc sector ah=2; al=sè sector; CF=0; ah=0; al=sè cung ghi/®äc ch=track; cl=sector; ®−îc ®äc ®Üa dh=head; dl=æ ®Üa (0-7f víi Kh«ng thµnh c«ng: ®Üa mÒm, 80-ffh víi ®Üa CF=1; ah=m· lçi cøng); ES:BX=seg:off cña vïng ®Öm chøa dù liÖu ®äc Thµnh c«ng: 3 Ghi sector ah=3; al=sè sector; CF=0; ah=0; al=sè cung ch=track; cl=sector; ®−îc ghi dh=head; dl=æ ®Üa (0-7f víi Kh«ng thµnh c«ng: ®Üa mÒm, 80-ffh víi ®Üa CF=1; ah=m· lçi cøng); ES:BX=seg:off cña vïng ®Öm chøa dù liÖu ghi 16h 0 §äc ký tù tõ bµn phÝm ah=0; ah=scan code cña phÝm; Bµn phÝm al=m· ASCII cña ký tù 2 LÊy c¸c cê bµn phÝm ah=2; al=c¸c cê (8); al7=1: PhÝm insert ®−îc Ên; al6=1: PhÝm Caps Lock ®−îc Ên; al5=1: PhÝm Num Lock ®−îc Ên; al4=1: PhÝm Scrol Lock ®−îc Ên; al3=1: PhÝm Alt ®−îc Ên; al2=1; PhÝm Ctrl ®−îc Ên; al1=1: PhÝm Shif tr¸i ®−îc Ên; al0=1: PhÝm Shif ph¶i ®−îc Ên 10h §äc ký tù tù bµn phÝm ah=10h ah=scan code cña phÝm; (lo¹i 101 phÝm) al=m· ASCII cña ký tù 17h 0 ViÕt ký tù ra m¸y in M¸y in 44 NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh
  18. http://www.ebook.edu.vn Tr−êng ®¹i häc kü thuËt C«ng NghiÖp C¸c ng¾t cña DOS Sè hiÖu Hµm C«ng dông Tham sè vµo Tham sè ra ng¾t 21h 0 KÕt thóc viÖc thi hµnh ah=0; CS=®Þa chØ ®o¹n cña Kh«ng mét ch−¬ng tr×nh ®o¹n mµo ®Çu (PSP) 1 Vµo mét ký tù tõ bµn ah=1 al=m· ASCII cña ký tù phÝm (®îi ®äc 1 ký tù tõ thiÕt bÞ vµo chuÈn (nÕu ch−a cã), sau ®ã ®−a ký tù tíi thiÕt bÞ ra chuÈn vµ ®−a m· ASCII cña ký tù vµo al 2 HiÓn thÞ lªn mµn h×nh ah=2; dl=m· ASCII cña ký Kh«ng (®−a ký tù cã m· ASCII tù cÇn (®−a ra) hiÓn thÞ trong dl tíi thiÕt bÞ ra chuÈn) 5 In ký tù (®−a ký tù cã m· ah=5; dl=m· ASCII cña ký Kh«ng ASCII trong dl tíi thiÕt bÞ tù cÇn (®−a ra) in in chuÈn) 9 HiÓn thÞ chuçi (®−a ah=9; ds:dx=trá tíi chuçi ký Kh«ng chuçi ký tù tíi thiÕt bÞ ra tù kÕt thóc b»ng –$– chuÈn) 2ah X¸c ®Þnh ngµy th¸ng ah=2ah; al=ngµy (0=chñ nhËt, 1=thø hai, –, 6=thø b¶y); cx=n¨m (1980..2099); dh=th¸ng (1..12); dl=ngµy (1..31) 2bh §Æt ngµy th¸ng ah=2bh; al=00h nÕu ngµy hîp lÖ; cx=n¨m(1980..2099); al=ffh nÕu ngµy kh«ng dh=th¸ng (1..12); hîp lÖ dl=ngµy (1..31) 2ch X¸c ®Þnh thêi gian ah=2ch; ch=giê (0..23); cl=phót(0..59); dh=gi©y (0..59); dl=phÇn tr¨m gi©y(0..99) 2dh §Æt thêi gian ah=2dh; ch=giê (0..23); al=00f nÕu tgian hîp lÖ; cl=phót(0..59); al=ffh nÕu thêi gian kh«ng dh=gi©y (0..59); dl=phÇn hîp lÖ tr¨m gi©y(0..99) 30h X¸c ®Þnh sè phiªn b¶n ah=30h; bx=0000h; cx=0000h; cña DOS hiÖn hµnh al=sè chÝnh cña phiªn b¶n (tr−íc dÊu chÊm); ah=sè phô cña phiªn b¶n (sau dÊu chÊm) 31h KÕt thóc ch−¬ng tr×nh vµ ah=31h; al=m· tr¶ l¹i; Kh«ng ë l¹i th−êng tró (kÕt thóc dx=kÝch th−íc bé nhí tÝnh ch−¬ng tr×nh hiÖn t¹i vµ theo ®¬n vÞ 16 byte dµnh ra mét vïng nhí tÝnh theo ®¬n vÞ 16 byte) 33h KiÓm tra Ctrl-Break ah=33h; dl=tr¹ng th¸i hiÖn hµnh (thiÕt lËp hoÆc x¸c ®Þnh al=00h ®Ó x¸c ®Þnh tr¹ng (00h=OFF, 01h=ON) tr¹ng th¸i Break) th¸i hiÖn t¹i cña Ctrl-Break al=01h ®Ó thiÕt lËp tr¹ng th¸i hiÖn t¹i cña Ctrl-Break dl=00h ®Ó thiÕt lËp tr¹ng th¸i OFF cña Ctrl-Break dl=01h ®Ó thiÕt lËp tr¹ng th¸i ON cña Ctrl-Break NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh 45
  19. http://www.ebook.edu.vn Tr−êng ®¹i häc kü thuËt C«ng NghiÖp 35h X¸c ®Þnh vector ng¾t ah=35h; al=sè hiÖu ng¾t; es:bx=con trá trá ®Õn (nhËn ®Þa chØ cña mét ch−¬ng tr×nh phôc vô vector ng¾t) ng¾t 36h X¸c ®Þnh dung l−îng ah=36h; dl=æ ®Üa bx=sè free cluster; cßn trèng trªn ®Üa (0=default, 1=A, –); dx=sè cluster/®Üa; cx=sè byte/sector; ax=sè sector/cluster, =ffffh nÕu æ ®Üa kh«ng hîp lÖ 39h T¹o th− môc con ah=39h; ds:dx=con trá trá ax=m· lçi nÕu CF=1 (MkDir) ®Õn mét chuçi ASCIIZ (®−êng dÉn-path) 3ah Xo¸ thu môc con ah=3ah; ds:dx=con trá trá ax=m· lçi nÕu CF=1 (RmDir) ®Õn mét chuçi ASCIIZ (®−êng dÉn-path) 3bh Thay ®æi th− môc hiÖn ah=3bh; ds:dx=con trá trá ax=m· lçi nÕu CF=1 t¹i (ChDir) ®Õn mét chuçi ASCIIZ (®−êng dÉn-path) 3ch T¹o lËp mét tÖp (Creat) ah=3ch; ds:dx=con trá trá ax=m· lçi nÕu CF=1, – T¹o ra mét tÖp míi ®Õn mét chuçi ASCIIZ =thÎ 16 bit nÕu CF=0 hoÆc c¾t bá tÖp cò ®Ó cã (®−êng dÉn-path); cx=thuéc ®ä dµi b»ng 0 ®Ó chuÈn tÝnh cña tÖp bÞ ghi míi. 3dh Më mét tÖp cho tr−íc ah=3dh; ds:dx=con trá trá ax=m· lçi nÕu CF=1, ®Õn mét chuçi ASCIIZ =thÎ 16 bit nÕu CF=0 (®−êng dÉn-path); al=m· truy nhËp 3eh §ãng mét thÎ tÖp cho ah=3eh; bx=thÎ tÖp ®−a l¹i ax=m· lçi nÕu CF=1, tr−íc bëi thao t¸c më hay t¹o tÖp kh«ng cã nghÜa khi CF=0 3fh §äc tõ mét tÖp hay tõ ah=3fh; bx=thÎ tÖp; ax=sè byte ®äc ®−îc, mét thiÕt bÞ (chuyÓn mét ds:dx=®Þa chØ bé ®Öm; =m· lçi nÕu CF=1 sè byte cho tr−íc tõ mét cx=sè byte ®äc; tÖp vµo bé ®Öm cho tr−íc) 40h Ghi vµo mét tÖp hay vµo ah=40h; bx=thÎ tÖp; ax=sè byte viÕt ®−îc, mét thiÕt bÞ (chuyÓn mét ds:dx=®Þa chØ bé ®Öm (d÷ =m· lçi nÕu CF=1 sè byte cho tr−íc tõ bé liÖu ®Ó viÕt); cx=sè byte ®Öm vµo mét tÖp cho ®−îc viÕt; tr−íc) 41h Xo¸ mét tÖp trong mét ah=41h; ds:dx=®Þa chØ cña ax=m· lçi nÕu CF=1, th− môc ®· ®Þnh (Unlink) mét ASCIIZ kh«ng cãnghÜa nÕu CF=0 – Xo¸ mét danh môc t−¬ng øng víi tªn tÖp trong th− môc 42h Di chuyÓn con trá ah=42h; ds:dx=kho¶ng ax=m· lçi nÕu CF=1; ghi/®äc tÖp (LSeek) – c¸ch (offset) di chuyÓn theo dx:ax=vÞ trÝ con trá míi theo ph−¬ng thøc ®Þnh byte; al=ph−¬ng thøc di nÕu CF=0 tr−íc chuyÓn (0, 1, 2); bx=thÎ tÖp 47h X¸c ®Þnh th− môc hiÖn ah=47h; ds:si=con trá chØ ds:si tªn ®−êng dÉn ®Çy thêi. §−a ®−êng dÉn ®Çy tíi vïng nhí 64 byte cña ®ñ tõ th− môc gèc nÕu ®ñ (b¾t ®Çu tõ th− môc ng−êi sö dông; dl=sè hiÖu æ CF=0; gèc) cña th− môc hiÖn ®Üa (0=default, 1=A, . . .) ax=m· lçi nÕu CF=1 t¹i cho æ ®Üa cho tr−íc vµo vïng nhí cã ®Þa chØ ds:si 48h CÊp ph¸t bé nhí theo sè ah=48h; bx=sè ®¬n vÞ 16 ax:0=®Þa chØ khèi nhí cÊp ®¬n vÞ 16 byte byte nhí yªu cÇu; ph¸t; (paragraph) yªu cÇu ax=m· lçi nÕu CF=1; ax kh«ng cã nghÜa g× nÕu CF=0 46 NguyÔn TiÕn Duy – Trung t©m Kü thuËt m¸y tÝnh – Bé m«n Kü thuËt m¸y tÝnh
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

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