Ngày nay công nghiệp máy tính đã trở thành mũi nhọn khi bước vào kỷ nguyên kỹ thuật hiện đại.Với tốc độ tăng trưởng đáng kể những sản phẩm liên quan đến máy tính từ phần mềm tới các thiết bị ghép nối.Việt Nam cũng đang góp phần vào sự phát triển của công nghệ máy tính, chuyển mình dần từ thị trường tiêu thụ các sản phẩm máy tính thành nơi phát triển công nghệ. Bên cạnh đó công nghệ phần mềm của Việt Nam có nhiều bước tiến triển góp phần thúc đẩy sự phát triển của nền công ngiệp máy tính nói riêng và nền kinh tế nói riêng. 
Đã có rất nhiều ngôn ngữ lập trình được sử dụng để tạo nên sự phát triển của nền công nghệ phần mềm. Một trong những ngôn ngữ lập trình xuất hiện sớm nhất đó là ngôn ngữ lập trình Assembler. Đây là một trong những ngôn ngữ lập trình bậc thấp thường được sử dụng để lập trình hệ thống, nó có một ưu điểm mà không một ngôn ngữ lập trình nào bì kịp, bởi lẽ nó tạo ra những chương trình có dung lượng rất nhỏ, nó thường được sử dụng để làm các chương trình quản lý trong công nghiệp ,diệt vius, tạo vius, tạo hệ điều hành, tạo mật khẩu 
Hiện nay hầu hết các chương trình khi viết xong đều được xác lập mật khẩu để bảo mật dữ liệu
Trong thời gian học tập tại khoá học 1996 – 2001 của trường Đại học Mở Hà Nội tôi đã được đào tạo một cách có hệ thống và tiếp thu những kiến thức về ngôn ngữ Assembler Để kết thúc khoá học tôi được nhận và hoàn thành đề tài “Xác lập mật khẩu cho chương trình dạng tệp có đuôi .COM”.
Mục tiêu của chương trình:
-Trước tiên chạy chương trình xác lập mật khẩu với những yêu cầu nhập tên tệp thực hiện dạng .COM
-Sau đó nhập mật khẩu; Sau khi tệp .COM đã xác lập mật khẩu thì từ đó trở đi chương trình chỉ được chạy khi vào đúng mật khẩu đã xác lập
 
 
 
              
                                            
                                
            
 
            
                 27 trang
27 trang | 
Chia sẻ: luyenbuizn | Lượt xem: 1314 | Lượt tải: 0 
              
            Bạn đang xem trước 20 trang nội dung tài liệu Xác lập mật khẩu cho chương trình dạng tệp có đuôi .Com, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lêi nãi ®Çu
Ngµy nay c«ng nghiÖp m¸y tÝnh ®· trë thµnh mòi nhän khi bíc vµo kû nguyªn kü thuËt hiÖn ®¹i.Víi tèc ®é t¨ng trëng ®¸ng kÓ nh÷ng s¶n phÈm liªn quan ®Õn m¸y tÝnh tõ phÇn mÒm tíi c¸c thiÕt bÞ ghÐp nèi.ViÖt Nam còng ®ang gãp phÇn vµo sù ph¸t triÓn cña c«ng nghÖ m¸y tÝnh, chuyÓn m×nh dÇn tõ thÞ trêng tiªu thô c¸c s¶n phÈm m¸y tÝnh thµnh n¬i ph¸t triÓn c«ng nghÖ. Bªn c¹nh ®ã c«ng nghÖ phÇn mÒm cña ViÖt Nam cã nhiÒu bíc tiÕn triÓn gãp phÇn thóc ®Èy sù ph¸t triÓn cña nÒn c«ng ngiÖp m¸y tÝnh nãi riªng vµ nÒn kinh tÕ nãi riªng. 
§· cã rÊt nhiÒu ng«n ng÷ lËp tr×nh ®îc sö dông ®Ó t¹o nªn sù ph¸t triÓn cña nÒn c«ng nghÖ phÇn mÒm. Mét trong nh÷ng ng«n ng÷ lËp tr×nh xuÊt hiÖn sím nhÊt ®ã lµ ng«n ng÷ lËp tr×nh Assembler. §©y lµ mét trong nh÷ng ng«n ng÷ lËp tr×nh bËc thÊp thêng ®îc sö dông ®Ó lËp tr×nh hÖ thèng, nã cã mét u ®iÓm mµ kh«ng mét ng«n ng÷ lËp tr×nh nµo b× kÞp, bëi lÏ nã t¹o ra nh÷ng ch¬ng tr×nh cã dung lîng rÊt nhá, nã thêng ®îc sö dông ®Ó lµm c¸c ch¬ng tr×nh qu¶n lý trong c«ng nghiÖp ,diÖt vius, t¹o vius, t¹o hÖ ®iÒu hµnh, t¹o mËt khÈu…
HiÖn nay hÇu hÕt c¸c ch¬ng tr×nh khi viÕt xong ®Òu ®îc x¸c lËp mËt khÈu ®Ó b¶o mËt d÷ liÖu
Trong thêi gian häc tËp t¹i kho¸ häc 1996 – 2001 cña trêng §¹i häc Më Hµ Néi t«i ®· ®îc ®µo t¹o mét c¸ch cã hÖ thèng vµ tiÕp thu nh÷ng kiÕn thøc vÒ ng«n ng÷ Assembler §Ó kÕt thóc kho¸ häc t«i ®îc nhËn vµ hoµn thµnh ®Ò tµi “X¸c lËp mËt khÈu cho ch¬ng tr×nh d¹ng tÖp cã ®u«i .COM”.
Môc tiªu cña ch¬ng tr×nh:
-Tríc tiªn ch¹y ch¬ng tr×nh x¸c lËp mËt khÈu víi nh÷ng yªu cÇu nhËp tªn tÖp thùc hiÖn d¹ng .COM
-Sau ®ã nhËp mËt khÈu; Sau khi tÖp .COM ®· x¸c lËp mËt khÈu th× tõ ®ã trë ®i ch¬ng tr×nh chØ ®îc ch¹y khi vµo ®óng mËt khÈu ®· x¸c lËp
Ch¬ng I
C¬ së lý thuyÕt
C¸c file COM ®îc lu trªn ®Üa lµ h×nh ¶nh chÝnh x¸c cña néi dung bé nhí sau khi c¸c file nµy ®îc n¹p. Sau khi ®îc n¹p, c¸c file .COM khong cÇn thªm mét th«ng tin nµo n÷a vµ cã thÓ ch¹y ngay, do vËy, c¸c ch¬ng tr×nh COM cã thÓ ®îc n¹p vµ khëi ®éng nhanh h¬n so víi c¸ ch¬ng tr×nh EXE. Ngay sau khi ch¬ng tr×nh COM ®îc n¹p vµo bé nhí, ngay díi PSP, nã ®îc thùc hiÖn b¾t ®Çu tõ « nhí s¸t « nhí cuèi cïng cña PSP, nghÜa lµ tõ ®Þa chØ offset 100h. ¤ nhí nµy thêng chøa mét lÖnh nh¶y, lÖnh nµy nh¶y ®Õn phÇn ®Çu thùc cña ch¬ng tr×nh.
	Mét ch¬ng tr×nh COM kh«ng thÓ vît qu¸ 64KB(65536 byte), tÝnh c¶ ®é dµi cña PSP (256 byte) vµ Ýt nhÊt 1tõ (2 byte) cho ng¨n xÕp. §é dµi mét ch¬ng tr×nh COMkh«ng vît qu¸ 64 KB, nhng DOS vÉn dµnh c¶ bé nhí cho tr¬ng tr×nh lo¹i nµy. Nã kh«ng ®Ó l¹i mét phÇn nhí tù do nµo (díi quan ®iÓm cña DOS), vµ ch¬ng tr×nh COM kh«ng thÓ gäi mét ch¬ng tr×nh kh¸c th«ng qua hµm EXEC. VÊn ®Ò nµy cã thÓ gi¶i quyÕt ®îc, nÕu ch¬ng tr×nh COM th«ng qua mét hµm cña DOS gi¶i phãng bé nhí mµ nã kh«ng dïng ®Õn.
	Khi ®iÒu khiÓn ®îc truyÒn cho ch¬ng tr×nh COM, c¸c thanh ghi ®o¹n ®Òu híng tíi ®Çu cña PSP. §Çu cña ch¬ng tr×nh COM (so víi ®Çu cña PSP) lu«n ®îc ®Æt ë ®Þa chØ 100h. Con trá ng¨n xÕp nhËn gi¸ trÞ FFFEh vµ nã híng tíi ®o¹n cuèi cña ®o¹n 64KB mµ ch¬ng tr×nh COM chiÕm, ng¨n xÕp tiÕn l¹i gÇn cuèi ch¬ng tr×nh cø 2 byte mét, ngêi lËp tr×nh cÇn ®¶m b¶o lµm sao cho ng¨n xÕp kh«ng lín ®Õn møc ®ông vµo phÇn cu«Ý ch¬ng tr×nh
	Tån t¹i nhiÒu kh¶ n¨ng ®Ó kÕt thóc mét ch¬ng tr×nh COM vµ ®Ó tr¶ ®iÒu khiÓn vÒ cho DOS hay ch¬ng tr×nh gäi.
	NÕu ch¬ng tr×nh ch¹y díi DOS 1.0, nã cã thÓ kÕt thóc b»ng c¸ch gäi hµm 00h cña ng¾t 21h hoÆc gäi ng¾t 20h. Mét kh¶ n¨ng kh¸c , tho¹t ®Çu cã vÎ l¹, lµ kÕt thóc ch¬ng tr×nh b»ng mét “Near Return” (lÖnh assembler RET). Khi lÖnh nµy ®îc thùc hiÖn, ch¬ng tr×nh ®îc tiÕp tôc tõ ®Þa chØ offset ®Æt trong 2byte ë ®Ønh ng¨n xÕp. Mµ hµm EXEC l¹i ®Æt gi¸ trÞ 0 vµo 2byte nµy tríc khi trao ®iÒu khiÓn cho ch¬ng tr×nh COM. Nh vËy, ch¬ng tr×nh ®îc tiÕp tôc thùc hiÖn t¹i ®Þa chØ CS:0000. V× ®Þa chØ nµy chÝnh lµ ®Ønh PSP, nã chøa lêi gäi ng¾t 20h, nªn ch¬ng tr×nh sÏ ®îc kÕt thóc b»ng ng¾t 20h.
	§èi víi c¸c thÕ hÖ sau cña DOS, hµm 4Ch cña ng¾t 21h têng dïng ®Ó kÕt thóc ch¬ng tr×nh. Nã kÕt thóc ch¬ng tr×nh vµ gäi mét ch¬ng tr×nh th«ng b¸o, ch¬ng tr×nh th«ng b¸o nµy cho kÕt qu¶ díi d¹ng mét gi¸ trÞ sè . DOS kh«ng ®Æt ë ®©y mét gi¸ trÞ cè ®Þnh nµo, nhng viÖc truyÒn gi¸ trÞ chØ cã ý nghÜa nÕu ch¬ng tr×nh ®îc goi vµ ch¬ng tr×nh gäi ®Òu g¸n cho gi¸ trÞ ®ã mét ý nghÜa nh nhau. ThÝ dô, mét kh¶ n¨ng hay ®îc dïng lµ th«ng b¸o cho ch¬ng tr×nh gäi, th«ng qua gi¸ trÞ 0, r»ng ch¬ng tr×nh ®îc gäi kÕt thóc b×nh thêng, trong khi mäi gi¸ trÞ kh¸c th«ng b¸o sù xuÊt hiÖn lçi trong khi thùc hiÖn ch¬ng tr×nh ®îc gäi. Mét ngêi lËp tr×nh ng«n ng÷ bËc cao kh«ng cÇn ph¶i quan t©m ®Õn viÖc x©y dùng mét ch¬ng tr×nh COM, v× tr×nh biªn dÞch (compiler) sÏ lµm thay mäi c«ng viÖc cÇn thiÕt. Ngîc l¹i, mét ngêi lËp tr×nh Assembler ph¶i quan t©m ®Õn nhiÒu vÊn ®Ì khi x©y dùng mét ch¬ng tr×nh COM.
	Ch¬ng tr×nh COM ®îc lu díi d¹ng ph¶n ¸nh chÝnh x¸c néi dung bé nhí RAM sau khi d· ®îc n¹p. DOS kh«ng n¹p ch¬ng tr×nh nµy vµo mét ®Þa chØ x¸c ®Þnh tríc. Chóng cã thÓ ®îc n¹p vµo mét ®Þa chØ bÊt kú(lµ béi nguyªn cña 16). Do vËy, c¸c ch¬ng tr×nh COM kh«ng nhÊt thiÕt ph¶i chøa ®Þa chØ ®o¹n râ rµng. NÕu ®Þa chØ offset lu«n dùa vµo ®o¹n hiÖn thêi vµ nã chØ mét ®Þa chØ bÊt kú trong ®o¹n ®ã, th× vÊn ®Ò l¹i kh«ng ph¶i nh vËy ®èi víi c¸c ®Þa chØ ®o¹n, v× c¸c ®Þa chØ nµy x¸c ®Þnh c¸c ®o¹n cè ®Þnh c¸ch nhau 16 byte.
KÝch thíc mét ch¬ng tr×nh COM bÞ h¹n chÕ lµ 64KB nªn ngêi lËp tr×nh bÞ giíi h¹n chØ ®îc dïng c¸c lÖnh NEAR, c¸c lÖnh nµy chØ thay ®æi ®Þa chØ offset cña con trá lÖnh. C¸c lÖnh FAR kh«ng ®îc phÐp dïng trong ch¬ng tr×nh bëi v× tÊt c¶ c¸c lÖnh FAR cho phÐp tiÕp tôc ch¬ng tr×nh ë mét chç kh¸c cña ch¬ng tr×nh b»ng c¸ch x¸c ®Þnh l¹i kh«ng chØ ®Þa chØ offset mµ c¶ ®Þa chØ ®o¹n cña con trá lÖnh (CS:IP). Do ®ã c¸c gi¸ trÞ kh«ng ®æi cã thÓ ®îc n¹p vµo mét thanh ghi , thÝ dô nh ®Þa chØ ®o¹n cña RAM mµn h×nh.Nhng kh«ng thÓ n¹p mét ®Þa chØ ®o¹n cña c¸c lÖnh hay d÷ liÖu cña ch¬ng tr×nh COM vµo mét thanh ghi ®o¹n. Bëi lÏ c¸c ®Þa chØ nµy thay ®æi mçi khi ch¬ng tr×nh ®îc gäi ch¹y. Mét ch¬ng tr×nh COM kh«ng ®îc chøa nhiÒu ®o¹n vµ c¸c biÕn ph¶i n»m trong mét ®o¹n duy nhÊt-®o¹n m· lÖnh. V× chØ cã mét ®o¹n, nªn DOS cã thÓ n¹p ch¬ng tr×nh vµo c¸c vÞ trÝ kh¸c nhau, tuú theo t×nh tr¹ng cña RAM cßn tù do. C¸c tr¬ng tr×nh COM kh«ng gÆp khã kh¨n g× khi ®Þnh nghÜa ng¨n xÕp. Nã ®îc ®Æt tù ®éng vµo cuèi ®o¹n COM 64KB.
Khi gäi mét ch¬ng tr×nh COM, DOS dµnh cho ch¬ng tr×nh nµy toµn bé RAM cßn tù do, ®a sè ch¬ng tr×nh sÏ mÊt ®i khái bé nhí sau khi kÕt thóc vµ bé nhí mµ nã chiÕm sÏ ®îc gi¶i phãng. Nhng nÕu mét ch¬ng tr×nh COM ®îc chuyÓn thµnh néi tró, cã nghÜa lµ nã sÏ tån t¹i trong bé nhí sau khi thùc hiÖn, th× mét sè vÊn ®Ò sÏ xuÊt hiÖn, v× díi quan ®iÓm cña DOS, kh«ng cßn bé nhí tù do kh«ng thÓ n¹p vµ thùc hiÖn mét ch¬ng tr×nh kh¸c.
VÊn ®Ò còng sÏ xuÊt hiÖn, khi ch¬ng tr×nh COM trong qua tr×nh thùc hiÖn yªu cÇu n¹p vµ thùc hiÖn mét ch¬ng tr×nh kh¸c th«ng qua hµm EXEC. §iÒu nµy còng kh«ng thùc hiÖn ®îc, bëi v× DOS cho r»ng kh«ng cßn bé nhí tù do ®Ó nhËn ch¬ng tr×nh ®îc gäi. Tuy nhiªn , hai trêng hîp trªn cã thÓ ®îc gi¶i quyÕt b»ng c¸ch gi¶i phãng vïng nhí mµ ch¬ng tr×nh kh«ng dïng ®Õn.
Cã hai kh¶ n¨ng ®Ó thùc hiÖn ®iÒu nµy: hoÆc lµ chØ gi¶i phãng phÇn bé nhí n»m ngoµi ®o¹n COM 64 KB, hoÆc gi¶i phãng tÊt c¶ c¸c phÇn nhí mµ ch¬ng tr×nh kh«ng dïng ®Õn, tÝnh c¶ vïng nhí kh«ng sö dông n»m trong ®o¹n COM. C¸ch thø hai cho phÐp gi¶i phãng ®îc nhiÒu RAM h¬n, nhng ng¨n xÕp l¹i n»m ngoµi phÇn ch¬ng tr×nh COM (nã ë cuèi ®o¹n 64 KB). Cho nªn trong trêng hîp nµy cÇn thiÕt ph¶i chuyÓn ng¨n xÕp ®Õn cuèi tr¬ng tr×nh vµ chØ gi¶i phãng vïng nhí n»m sau ®u«i ng¨n xÕp. §Ó lµm ®iÒu nµy, ta ph¶i cho ng¨n xÕp mét kÝch thíc x¸c ®Þnh. §èi víi ®a sè c¸c ch¬ng tr×nh th× 512 byte lµ qu¸ ®ñ.
Trong khi kÝch thíc cña ch¬ng tr×nh COM kh«ng vît qu¸ 64 KB, th× mätt ch¬ng tr×nh EXE cã thÓ lín ngang phÇn RAM tù do mµ DOS qu¶n lý. §ãi víi cr COM, trong ®o¹n 64 KB ph¶i ®Æt c¶ m· lÖnh, d÷ liÖu vµ ng¨n xÕp. KÕt qu¶ lµ tÊt c¶ c¸c thanh ghi ®o¹n ®Òu nhËn cïng mét gi¸ trÞ khi khëi ®Çu vµ trong qu¸ tr×nh thùc hiÖn ch¬ng tr×nh, gi¸ trÞ nµy chØ ra ®Þa chØ b¾t ®Çu cña mét ®o¹n 64 KB( chØ cã néi dung cña thanh ghi ES lµ cã thÓ bÞ thay ®æi, v× nã kh«ng cã ý nghÜa trùc tiÕp víi viÖc thùc hiÖn ch¬ng tr×nh). §èi víi c¸c file EXE, sù tæ chøc c¸c ®o¹n kh«ng ngÆt nghÌo nh vËy. M· lÖnh, d÷ liÖu ng¨n xÕp ®îc ®Æt trong c¸c ®o¹n kh¸c nhau, mçi lo¹i cã thÓ ®îc ph©n bè trong nhiÒu ®o¹n. V× lÏ ®ã mµ c¸c thanh ghi ®o¹n cã gi¸ trÞ kh¸c nhau trong qu¸ tr×nh thùc hiÖn ch¬ng tr×nh EXE. C¸c file COM lu trªn dÜa mÒm hay ®Üa cøng lµ h×nh ¶nh chÝnh x¸c cña RAM khi thùc hiÖn ch¬ng tr×nh, trong khi c¸c file EXE l¹i ®îc lu trªn ®Üa theo mét c¸ch ®îc m· ho¸.
Ch¬ng II
Giíi thiÖu ch¬ng tr×nh
 Ch¬ng tr×nh ®îc chia lµm 2 phÇn:
PhÇn Cµi dÆt (INSTALL):
PhÇn nµy thùc hiÖn c¸c chøc n¨ng sau:
-Vµo tªn tÖp cã d¹ng .COM cÇn cµi mËt khÈu
-KiÓm tra liÖu tÖp .COM ®ã tríc ®· ®îc x¸c lËp mËt khÈu hay cha?
 . NÕu tÖp .COM ®ã ®· x¸c lËp mËt khÈu råi th× 9 byte cuèi cña tÖp .COM míi (®îc h×nh thµnh b»ng néi dung tÖp .COM + néi dung ®o¹n ch¬ng tr×nh gép vµo thªm sau) sÏ chøa ch÷ "PROTECTED". Kh«ng tiÕn hµnh cµi ®Æt vµ kÕt thóc phÇn ch¬ng tr×nh cµi ®Æt.
. NÕu tÖp .COM cha ®îc x¸c lËp mËt khÈu th× 9 byte cuèi cña tÖp .COM ®ã kh«ng ch÷ Protected. SÏ tiÕn hµnh nhËp mËt khÈu( 2lÇn : lÇn ®Çu nhËp mËt khÈu vµo, kiÓm tra (verify) liÖu nhí ®óng mËt khÈu hay cha b»ng c¸ch nhËp mËt khÈu lÇn n÷a vµ kiÓm tra mËt khÈu gi÷a 2 lÇn nhËp?). §äc 3 byte ®Çu cña tÖp .COM vµ cÊt néi dung 3byte ®ã vµo mét biÕn nhí (®Ó sau nµy cã thÓ phôc håi ®îc). TÝnh ®é dµi cña c¸c byte tÖp .COM cò vµ cÊt bíc nh¶y ®ã vµo biÕn 3 byte cã tªn JMPCODE: byte 1 lµ 0e9h - m· cña lÖnh JMP vµ 2 byte sau lµ bíc nh¶y). Sau ®ã tiÕn hµnh ghi thªm ®o¹n ch¬ng tr×nh cÇn gép vµo tÖp .COM.
Lu ®å thuËt to¸n X¸c lËp mËt khÈu cho File .com
B¾t ®Çu
Vµo tÖp d¹ng .COM
SAI
KT tÖp ®ã cã tån t¹i kh«ng
®óng
KT .COM®ã d· xl mk cha
Tho¸t
Xl MK cho tÖp .COM
sai
X¸c lËp l¹i mËt khÈu
sai
KT 2 lÇn vµo MK cã gièng nhau hay ko?
®óng
CÊt 3 byte ®Çu cña tÖp .COM vµo biÕn nhí
X¸c lËp bíc nh¶y 
Ghi ®oan ch¬ng tr×nh can gép vµo tÖp .COM
PhÇn ch¬ng tr×nh sÏ gép vµo tÖp .COM sau khi ®· cµi mËt khÈu (®o¹n tõ START CODE ®Õn END CODE).
PhÇn nµy sÏ ®îc ch¹y khi tiÕn hµnh ch¹y tÖp >COM ®· ®îc x¸c lËp mËt khÈu. Khi mét tÖp .COM ®· ®îc x¸c lËp mËt khÈu th× 3 byte ®Çu cña tÖp .COM ®ã chøa chøa lÖnh nh¶y ®Õn phÇn ch¬ng tr×nh gép thªm vµo vµ phÇn ch¬ng tr×nh gép thªm vµo sÏ tiÕn hµnh c¸c chøc n¨ng sau:
- Yªu cÇu nhËp mËt khÈu.
- KiÓm tra mËt khÈu võa nhËp cã ®óng víi mËt khÈu ®· x¸c lËp hay cha?
 . NÕu kh«ng ®óng th× kh«ng cho ch¬ng tr×nh ch¹y vµ tho¸t.
Lu ®å thuËt to¸n FIle.com ®· ®îc x¸c lËp mËt khÈu
 . Cßn nÕu ®óng mËt khÈu th× håi phôc l¹i phÇn m· ë 3 byte ®Çu cña tÖp .COM (tríc khi cµi ®Æt mËt khÈu), ®a phÇn ®Þa chØ OFFSET vÒ 100h vµ tiÕp tôc ch¹y phÇn ch¬ng tr×nh .COM
Start
NhËp mËt khÈu
§óng
KiÓm tra mËt khÈu
Kh«i phôc l¹i ch¬ng tr×nh
Sai
Ch¹y ch¬ng tr×nh *.COM
End
	Toµn bé ch¬ng tr×nh sÏ cã d¹ng sau:
; T¹o Macro cho hiÖn ra mµn h×nh mét x©u ký tù
 HienString macro xau
mov dx, offset xau
mov ah,9 ;Nap so ham vao AH
int 21h
endm ;KÕt thóc macro
CODE segment 
 assume CS:CODE, DS:CODE, ES:CODE, SS:CODE
 ORG 100h
 BEGIN:
 jmp INSTALL
;B¾t ®Çu ®o¹n chong tr×nh vµ phÇn d÷ liÖu sÏ gép (append) vµo tÖp .COM cÇn x¸c lËp mËt khÈu
START_CODE:
 call NEXT
 NEXT:
 pop SI
 jmp CHECK
; B¾t ®Çu vïng d÷ liÖu cÇn ®îc gép vµo tÖp .COM
 ;SI+4
 MESS db 0ah,0dh,'PASSWORD : $'
 ;SI+18
 FIRSTTHREE db 3 dup(?)
 ;SI+21
 KEYWORDLEN dw ?
 ;SI+23
 KEYWORD db 30 dup(?)
 ;SI+53
 CHFLAG db 1 
 ;SI+54
 KEYWORDERR db 10,13,10,13,10,13,'Access is denied !!! $'
;Ket thucs vïng du lieu se gop vao tep .COM
 CHECK:
 mov DX,SI ; hien xau ky tu MESS
 mov AH,9
 add DX,4
 int 21h
 mov BX,SI
 add BX,21 ; BX tro den KEYWORDLEN
 mov CX,WORD PTR[BX] ; CX chua do dai cua KEYWORD (mat ;khau)
 inc BX
 inc BX ;BX tro den vung nho KEYWORD
 mov DI,SI
 add DI,53 ; DI tro den bien CHFLAG
 STAR_CHECK:
 mov AH,8 ; Nhap cac ky tu mat khau(khong hien)
 int 21h
 cmp AL,0dh
 jz END_CHECK ;Neu la ENTER ket thuc nhap mat khau
 jcxz WRONG
 cmp AL,BYTE PTR[BX] ;SS voi cac ky tu mat khau da xac lap
 jnz WRONG ; Neu sai thi nhay
 mov DL,'*' ; Hien dau'*' ra man hinh
 mov AH,2
 int 21h
 inc BX ; Tro den byte tiep theo cua KEYWORD
 dec CX ; Giam so luong byte cua bien KEYWORD
 jmp STAR_CHECK
 WRONG:
 mov BYTE PTR[DI],0
 mov DL,'*'
 mov AH,2
 int 21h
 jmp STAR_CHECK 
 END_CHECK:
 cmp BYTE PTR[DI],1 ; Hoi co CHFLAG(1=dung;0=sai mat khau)
 jnz INCORPASS
 cmp CX,0
 ja INCORPASS
;Tra 3 byte cu dau cua tep.COM (khi chua gop) cat o bien FIRSTTHREE
;vao o ca o nho co dia chi OFFSET la 100h,101h va 102h
 add SI,18
 mov DI,100h
 mov CX,3
 cld ; Huong chuyen theo chieu tang cua dia chi
 rep MOVSB
;Quay ve dau chuong trinh cu
 mov AX,100h
 push AX
 ret
;Phan thong bao khi vao sai mat khau. Hien xau 'Acces is denied !!!'
 INCORPASS:
 mov DX,DI
 inc DX
 mov AH,9
 int 21h
 mov AH,4ch
 int 21h
 psign db 'PROTECTED'
 END_CODE:
;Ket thuc doan ma chuong trinh gop vao tep .COM
 INSTALL:
 call CLRSCR
 jmp EXEC
 Buff db 50
 db ?
 db 50 dup(?)
 FILENAMELEN db ?
 FILENAME db 50 dup(?)
 KEYWORD2 db 30 dup(?)
 FILEHAND dw ?
 FILELEN dw ?
 JMPCODE db 0e9h,?,?
 FSIGN db 9 dup(?)
 MESS0 db 10,13,'Xac lap mat khau cho tep dang .COM$'
 MESSN db 10,13,'Ch¬ng tr×nh viÕt bëi NguyÔn Quèc ViÖt$' 
 MESS1 db 10,13,'Nhap ten FILE.COM: $'
 MESS2 db 10,13,'Nhap mat khau:$'
 MESS3 db 10,13,'Nhap lai:$'
 MESS4 db 10,13,'DA NHAN ! $'
 ERR1 db 10,13,'Khong the mo tep !$'
 ERR2 db 10,13,'Khong the doc tep !$'
 ERR3 db 10,13,'Khong the ghi tep !$'
 ERR4 db 10,13,'Tep da duoc xac lap mat khau roi !$'
 ERR5 db 10,13,'mat khau khong hop le !$'
 EXEC :
 HienString MESS0
 HienString MESSN
 HienString MESS1
;Vao ten tep .COM can xac lap mat khau
 lea BX,FILENAME ; BX tro den dia chi dau chua ten tep
 call GET_FILE_NAME ; Goi chuong trinh con vao tep
;Mo tep .COM de doc /ghi
 mov AL,2 ;Mode doc/ghi
 mov DX,OFFSET FILENAME
 mov AH,3dh ;chuc nang mo tep
 int 21h 
 jnc NEXT1
 HienString ERR1 ;Thong bao khong mo duoc tep
 jmp FINISH
 NEXT1:
 mov FILEHAND,AX ;Cat the tep(filehandle)vao bien FILEHAND
;Xac lap kich thuoc cua tep bang cach di chyen den cuoi tep
 mov AL,2 
 xor CX,CX
 xor DX,DX
 mov BX,FILEHAND
 mov AH,42h ;Chucnang dich chuyen con tro tep 
 int 21h
 mov FILELEN,AX
;Tro den 9 byte cuoi cua tep( Cac bute nhan dang lieu tep .COM da duoc xac ;lap mat khau hay chua? Neu da duoc xac lap thi 9 byte nay chua 9 ky tu ;"PROTECTED"
 mov AL,0
 xor CX,CX
 mov DX,FILELEN
 sub DX,9
 mov BX,FILEHAND
 mov AH,42h
 int 21h
;Doc 9 byte cuoi tep va de vao bien nho FSIGN
 lea DX,FSIGN
 mov CX,9
 mov BX,FILEHAND
 mov AH,3fh
 int 21h
 jnc NEXT2
 HienString ERR2
 jmp CLOSE
;SO sanh voi noi dung cua bien PSIGN de kiem tr lieu tep .COM 
;do da duoc xac lap mat khau hay chua?
 NEXT2:
 mov SI,OFFSET PSIGN ;Tro den byte dau cua PSIGN
 mov DI,OFFSET FSIGN ;Tro den byte dau cua FSIGN
 mov CX,9 ; So luong byte can so sanh la 9
 cld ;So sanh tung byte theo chieu tang dia chi
 repz cmpsb ;Lap viec so sanh voi dieu kien dung la: noi dung ;ZF=1 va noi dung CX=0
 cmp CX,0
 jnz NEXT3
 HienString ERR4
 jmp CLOSE
;Nhap mat khau neu tep .COM truoc do chua duoc xac lap mat khau
 NEXT3:
 HienString MESS2
 mov DI,OFFSET KEYWORD
 cld
 xor CX,CX ;CX=0
 START_REPEAT1:
 mov AH,8 
 int 21h
 cmp AL,0dh
 jz END_REPEAT1
 cmp CX,30
 jae END_REPEAT1
 stosb
 inc CX
 mov DL,'*'
 mov AH,2
 int 21h
 jmp START_REPEAT1
 END_REPEAT1:
 mov KEYWORDLEN,CX ; KEYWORDLEN=so luong byte mat khau
;Nhap lai mat khau (lan thu 2)
 HienString MESS3
 mov DI,OFFSET KEYWORD2
 cld
 xor CX,CX
START_REPEAT2:
 mov AH,8
 int 21h
 cmp AL,0dh
 jz END_REPEAT2
 cmp CX,30
 jae END_REPEAT2
 stosb 
 inc CX ;Tang so dem so luong ky tu mat khau
 mov DL,'*' ; Hien dau '*' ra man hinh
 mov AH,2 
 int 21h
 jmp START_REPEAT2
 END_REPEAT2:
;So sanh giua hai lan nhap mat khau( so sanh theo tung byte)
 cmp CX,KEYWORDLEN ; So sanh do dai mat khau giua hai lan nhap
 jnz PASSNMERR ; Neu khac nhau thi nhay
 mov SI,OFFSET KEYWORD ; SI tro den xau ky tu vao lan 1
 mov DI,OFFSET KEYWORD2 ; DI tro den xau ky tu vao lan 2
 cld ; DF= 0 -So sanh theo chieu tang dia chi
 repz cmpsb ; Vong lap so sanh mat khau 2 lan vao
 jcxz NEXT4
PASSNMERR:
 HienString ERR5 ; Hien thong bao mat khau khong hop le
 jmp NEXT3
 NEXT4:
; Dich ve dau tep .COM
 mov AL,0
 mov BX,FILEHAND
 xor CX,CX
 xor DX,DX
 mov AH,42h
 int 21h
; Doc 3 byte dau cua tep.COM va cat vao bien FIRSTTHREE
 mov AH,3fh
 mov DX,FILEHAND
 mov DX,OFFSET FIRSTTHREE
 mov CX,3
 int 21h
 jnc NEXT5 ; Doc tot thi nhay
 jmp READERR
 NEXT5:
;Tinh dia chi (phan OFFSET)cho lenh CALL de nhay ve dia chi chua lenh ;dau tien cua phan chuong trinh cua chung ta duoc gop them vao tep.COM khi ;tep nay duoc xac lap mat khau
 mov BX,OFFSET JMPCODE ;Tro den bien JMPCODE
 mov AX,FILELEN
 sub AX,3
 mov WORD PTR[BX+1],AX ; Cat do dai vao bytethu 2 va 3
; Chuyen ve dau tep
 mov AL,0
 mov BX,FILEHAND
 xor CX,CX
 xor DX,DX
 mov AH,42h
 int 21h
; Thay noi dung 3 byte dau cua tep.COM bang ma lenh CALL va 2 byte
;chua buoc nhay(bo qua phan ma chuong trnh.COM cu)
 mov BX,FILEHAND
 mov DX,OFFSET JMPCODE
 mov CX,3
 mov AH,40h
 int 21h
 jnc NEXT6
 jmp WRITERR
 NEXT6:
; Chuyen con tro ve cuoi tep
 mov AL,2 ; Mode buoc dich chuyen so voi cuoi tep
 mov BX,FILEHAND ; BX chua the tep
 xor CX,CX ; Buoc dich CX:DX=0 so voi cuoi tep
 xor DX,DX
 mov AH,42h ; chuc nang chuyen con tro tep
 int 21h
; Ghi them vao cuoi tep.COM phan chuong trinh cua chung ta doan tu
;START_CODE den END_CODE
 mov BX,FILEHAND
 mov DX,OFFSET START_CODE
 mov CX,OFFSET END_CODE
 sub CX,DX
 mov AH,40h
 int 21h
; Dong tep
 mov BX,FILEHAND
 mov AH,3eh
 int 21h
; Hien thong bao sai
 HienString MESS4
 jmp FINISH
; Phan cac thong bao sai
 OPENERR:
 HienString ERR1
 jmp FINISH
 READERR:
 HienString ERR2
 jmp CLOSE
 WRITERR:
 HienString ERR3
 jmp CLOSE
 PROTECTERR:
 HienString ERR4
;Dong tep
CLOSE:
 mov BX,FILEHAND
 mov AH,3eh
 int 21h
 FINISH:
 mov AH,8 ; cho 1 ky tu tu ban phim( khong hien ra)
 int 21h
 mov AH,4ch ; Ve DOS
 int 21h
;-------------------------------------------------------
; chuong trinh con vao ten tep can doc
;Vao: DX:BX tro den dia chi dau bien xau chua ten tep
;Ra: Ten tep nam o bien xau ten_tep
;----------------------------------------------------------
CLRSCR PROC
 push AX
 mov AH,0fh
 int 10h
 mov AH,0
 int 10h
 pop AX
 ret
 CLRSCR ENDP
GET_FILE_NAME PROC
 push AX BX DX DI ; Bao ve noi dung cac thanh ghi
 lea DX,Buff ; DX tro den vung dem Buff de chua cac ky tu
 mov AH,0ah ; doc duoc bang chuc nang 0ah cua int 21h.
 int 21h 
 lea DI,Buff
 inc DI
 GF1:
 inc DI
 mov AL,[DI]
 cmp AL,0dh
 je GF2
 mov [BX],AL
 inc BX
 jmp GF1
 GF2:
 xor AL,AL
 mov [BX],AL
 pop DI DX BX AX
 ret
GET_FILE_NAME ENDP
CODE ENDS
 END BEGIN
Phô lôc
Mét sè lÖnh assembler dïng
trong ch¬ng tr×nh
LÖnh MOV
Chøc n¨ng : ChuyÓn d÷ liÖu tõ to¸n h¹ng nguån sang to¸n h¹ng ®ich
Có ph¸p :	mov	DST,SRC
	 	reg reg	mem data
	reg data	segreg reg16	
	reg mem	segreg mem16
	mem reg	reg16 segreg
	mem16 segreg
LÖnh PUSH
Chøc n¨ng : ChuyÓn d÷ liÖu to¸n h¹ng nguån vµo ®Ønh ng¨n xÕp
Có ph¸p :	PUSH	SRC
3. LÖnh POP
Chøc n¨ng : ChuyÓn d÷ liÖu to¸n h¹ng nguån vµo ®Ønh ng¨n xÕp
Có ph¸p :	POP	DST
LÖnh IN
Chøc n¨ng : §äc d÷ liÖu tõ mét cæng 8/16 bit vµ ®a vµo AL/AX
Có ph¸p :	IN	AL/AX, ®Þa chØ cæng
Chó ý : NÕu ®Þa chØ cæng < 256 th× ®Þa chØ ®îc trùc tiÕp ®øng trong lÖnh IN
	cßn nÕu ®Þa chØ cæng >255 th× DX sÏ thay ®Þa chØ ®øng trong lÖnh IN
LÖnh OUT
Chøc n¨ng : ChuyÓn gi¸ trÞ 1 byte hoÆc 1 tõ tõ thanh ghi AL hoÆc AX ra cæng (PORT)
Có ph¸p :	OUT	§Þa chØ cæng, AL/AX
Chó ý :	NÕu ®Þa chØ cæng < 256 th× ®Þa chØ ®îc trùc tiÕp ®øng trong lÖnh IN
	cßn nÕu ®Þa chØ cæng >255 th× DX sÏ thay ®Þa chØ ®øng trong lÖnh IN
5. LÖnh INC
Chøc n¨ng : T¨ng gi¸ trÞ cña to¸n h¹ng ®Ých lªn 1
Có ph¸p :	INC	DST
	reg8/16
	mem
Cê :	C¸c cê bÞ thay ®æi: OF, SF, ZF, PF,CF
LÖnh DEC
Chøc n¨ng : Gi¶m gi¸ trÞ cña to¸n h¹ng ®Ých ®i 1
Có ph¸p :	DEC	DST
	reg8/16
	mem
Cê :	C¸c cê bÞ thay ®æi: OF, SF, ZF, AF, PF
LÖnh XOR
Chøc n¨ng : Thùc hiÖn chøc n¨ng EXCLUSIF OR gi÷a hai to¸n h¹ng. KÕt qu¶ ®Æt ë to¸n h¹ng ®Ých (c¸c bit cña kÕt qu¶ cã gi¸ trÞ 1 nÕu gi¸ trÞ c¸c bit t¬ng øng cña 2 to¸n h¹ng lµ kh¸c nhau).
Có ph¸p :	XOR	DST,SRC
	reg, reg	reg, data
	mem, reg	mem, data
	reg, mem	
Cê :
LÖnh CMP
Chøc n¨ng : So s¸nh gi¸ trÞ cña to¸n h¹ng ®Ých vµ to¸n h¹ng nguån. Néi dung cña hai to¸n h¹ng kh«ng thay ®æi sau lÖnh nµy. LÖnh nµy cã t¸c dông dùng c¸c cê t¬ng øng.
Có ph¸p :	CMP	DST, SRC
Cê :	reg, reg	reg, data
	mem, reg	mem, data
	reg, mem	
LÖnh TEST
Chøc n¨ng : So s¸nh néi dung cña hai to¸n h¹ng b»ng c¸ch thùc hiÖn lÖnh AND (Vµ LOGIC) gi÷a hai to¸n h¹ng (néi dung cña hai to¸n h¹ng kh«ng thay ®æi). KÕt qu¶ cã t¸c dông ®Õn tr¹ng th¸i c¸c cê.
Có ph¸p :	TEST	DST, SRC
Cê :	reg, reg	reg, data
	mem, reg	mem, data
	reg, mem	
LÖnh LOOP
Chøc n¨ng : LÆp khèi lÖnh tõ nh·n ®Õn lÖnh LOOP cho ®Õn khi gi¸ trÞ cña CX=0. Mçi khi thùc hiÖn mét vßng lÆp gi¸ trÞ cña CX gi¶m ®i 1.
Có ph¸p :	LOOP	nh·n
LÖnh INT
Chøc n¨ng : Thùc hiÖn ng¾t mÒm
Có ph¸p :	INT	Sè ng¾t (sè d¹ng HEXA)
Cê :	IF=0, OF=0
LÖnh JMP
Chøc n¨ng : Nh¶y kh«ng ®iÒu kiÖn
Có ph¸p :	JMP	addr
	label
	tªn ch¬ng tr×nh con
	reg
	mem
Chó ý :	Bíc nh¶y cña lÖnh nh¶y nµy n»m trong 64K
C¸c lÖnh nh¶y cã ®iÒu kiÖn
Chøc n¨ng : Thùc hiÖn viÖc nh¶y nÕu tho¶ m·n ®iÒu kiÖn
Có ph¸p :	
JE/JZ	Label
	Nh¶y nÕu cê ZF=1 hoÆc 2 to¸n h¹ng phÐp so s¸nh b»ng nhau.
JNE/JNZ	Label
	Nh¶y nÕu cê ZF=0 hoÆc 2 to¸n h¹ng phÐp so s¸nh kh¸c nhau.
JL/JNGE	Label
Nh¶y nÕu gi¸ trÞ to¸n h¹ng bªn tr¸i <gi¸ trÞ to¸n h¹ng bªn ph¶i cña phÐp so s¸nh; gi¸ trÞ cê CF=1.
JB/JNAE/JC	Label
Nh¶y nÕu gi¸ trÞ to¸n h¹ng bªn tr¸i <gi¸ trÞ to¸n h¹ng bªn ph¶i cña phÐp so s¸nh; gi¸ trÞ cê SF # OF.
JLE/JNG	Label
Nh¶y nÕu gi¸ trÞ to¸n h¹ng bªn tr¸i < hoÆc = gi¸ trÞ to¸n h¹ng bªn ph¶i cña phÐp so s¸nh; gi¸ trÞ cê SF # OF hoÆc gi¸ trÞ cê ZF=1.
JBE/JNA	Label
Nh¶y nÕu gi¸ trÞ to¸n h¹ng bªn tr¸i < hoÆc = gi¸ trÞ to¸n h¹ng bªn ph¶i cña phÐp so s¸nh; gi¸ trÞ cê CF=1 hoÆc gi¸ trÞ cê SF=1.
JG/JNLE	Label
Nh¶y nÕu gi¸ trÞ to¸n h¹ng bªn tr¸i >gi¸ trÞ to¸n h¹ng bªn ph¶i cña phÐp so s¸nh.
JA/JNBE	Label
Nh¶y nÕu gi¸ trÞ to¸n h¹ng bªn tr¸i > gi¸ trÞ to¸n h¹ng bªn ph¶i cña phÐp so s¸nh; gi¸ trÞ cê CF=0, vµ cê ZF=0.
JGE/JNL	Label
Nh¶y nÕu gi¸ trÞ to¸n h¹ng bªn tr¸i > hoÆc = gi¸ trÞ to¸n h¹ng bªn ph¶i cña phÐp so s¸nh; gi¸ trÞ cê SF=OF.
JAE/JNB/JNC	Label
Nh¶y nÕu gi¸ trÞ to¸n h¹ng bªn tr¸i > hoÆc = gi¸ trÞ to¸n h¹ng bªn ph¶i cña phÐp so s¸nh; gi¸ trÞ cê CF=0.
JP/JPE	Label
Nh¶y nÕu parity lµ ch½n; gi¸ trÞ cê PF=1
JNP/JPO	Label
Nh¶y nÕu kh«ng cã parity hoÆc parity lµ lÎ; gi¸ trÞ cê PF=0
JO	 Label
Nh¶y nÕu trµn ; gi¸ trÞ cê OF=1
JNO Label
Nh¶y nÕu trµn ; gi¸ trÞ cê OF=0
JS Label
Nh¶y nÕu cê dÊu SF=1
JNS Label
Nh¶y nÕu cê dÊu SF=0
JCXZ Label
Nh¶y nÕu gi¸ trÞ cña thanh ghi CX=0
Chó ý : Bíc nh¶y cña c¸c lÖnh nh¶y cã ®iÒu kiÖn kh«ng vît qu¸ 128 byte.
Mét sè Ng¾t assembler dïng
trong ch¬ng tr×nh
Trong ch¬ng tr×nh d· sö dông mét sè ng¾t mÒm
.Chøc n¨ng 0ah cña ng¾t int 21h cña DOS
 Chøc n¨ng: NhËn mét chuçi ký tù tõ bµn phÝm vµ ®a c¸c ký tù ®ã vµo mét vïng nhí ®Öm ®îc trá bëi DS:DX (SEG: OFFSET)
 vµo : AH=0Ah
 ra: DS:DX chøa c¸c ký tù
Chøc n¨ng 42h cña ng¾t int 21h cña DOS
Chøc n¨ng: DÞch chuyÓn con trá tÖp
vµo : AH=42h
ra: BX chøa the tÖp
Chøc n¨ng 3fh cña ng¾t int 21h cña DOS
Chøc n¨ng: §äc tÖp
Vµo AH= 3fh
RA: BX chøa thÎ tÖp
Chøc n¨ng 40h cña ng¾t int 21h cña DOS
 Chøc n¨ng: Ghi tÖp
 Vµo : AH=40h
 Ra: Ghi thªm vµo cuèi tÖp
Tµi liÖu tham kh¶o
[1]. Turbo Assembler vµ øng dông - PTS. §Æng Thµnh Phu - Nhµ xuÊt b¶n khoa häc vµ kü thuËt.
[2]. KiÕn tróc m¸y tÝnh
[3]. LËp tr×nh b»ng ng«n ng÷ Assembler cho m¸y tÝnh PC-IBM - NguyÔn M¹nh Giang - Nhµ xuÊt b¶n gi¸o dôc.
[4]. Gi¸o tr×nh LËp tr×nh hîp ng÷ (Assembly) vµ m¸y vi tÝnh IBM-PC - YthaYu & Charles Marut - Nhµ xuÊt b¶n gi¸o dôc.
[5]. M¹ng m¸y tÝnh - NguyÔn Gia HiÓu - Trung t©m khoa häc tù nhiªn vµ c«ng nghÖ quèc gia.
Môc Lôc
CH¦¥NG I C¬ së lý thuyÕt 4 
Ch¬ng II Giíi thiÖu ch¬ng tr×nh 8 
Phô lôc Mét sè lÖnh assembler dïngtrong ch¬ng tr×nh 23
viÖn ®¹i häc më hµ néiKhoa c«ng nghÖ tin häc	---------*----------
nhËn xÐt híng dÉn thùc tËp tèt nghiÖp
Tªn ®Ò tµi:	Sinh viªn thùc hiÖn:	Líp:	
NhËn xÐt vÒ néi dung bµi thùc hµnh TN
NhËn xet vÒ sinh viªn trong thêi gian lµm tèt nghiÖp
§Ò tµi ®¹t / kh«ng ®¹t tiªu chuÈn thùc hµnh tèt nghiÖp.	Hµ néi ngµy th¸ng n¨m 2001	Gi¸o viªn híng dÉn	(Ch÷ ký, hä tªn)
            Các file đính kèm theo tài liệu này:
 77858.DOC 77858.DOC