Xác lập mật khẩu cho chương trình dạng tệp có đuôi .Com

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

 

 

 

doc27 trang | Chia sẻ: luyenbuizn | Lượt xem: 1078 | Lượt tải: 0download
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 l­u 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, nh­ng 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, nh­ng 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 l­u 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.Nh­ng 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. Nh­ng 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, nh­ng 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 l­u 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 l­u 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 ch­a? . 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 ch­a ®­î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 ch­a 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. L­u ®å 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 ch­a 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 ch­a? . NÕu kh«ng ®óng th× kh«ng cho ch­¬ng tr×nh ch¹y vµ tho¸t. L­u ®å 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 ch­ong 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éi Khoa 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:

  • doc77858.DOC
Tài liệu liên quan