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 |
Chia sẻ: luyenbuizn | Lượt xem: 1078 | 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