Kế toán nguyên liệu vật liệu và công cụ dụng cụtại công ty tnhh công nghệ tin học hà nội

  • Số trang: 24 |
  • Loại file: DOC |
  • Lượt xem: 10 |
  • Lượt tải: 0
nganguyen

Đã đăng 34173 tài liệu

Mô tả:

Website: http://www.docs.vn Email : lienhe@docs.vn Tel (: 0918.775.368 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 KT tÖp ®ã cã tån t¹i kh«ng SAI ®óng Tho¸t KT .COM®ã d· xl mk ch a sai Xl MK cho tÖp .COM X¸c lËp l¹i mËt khÈu KT 2 lÇn vµo MK cã gièng nhau hay ko? sai ®ó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. . 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 Lu ®å thuËt to¸n FIle.com ®· ®îc x¸c lËp mËt khÈu Start NhËp mËt khÈu §óng KiÓm tra mËt khÈu Sai End Kh«i phôc l¹i ch¬ng tr×nh Ch¹y ch¬ng tr×nh *.COM 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 1. 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 2. 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 3. 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 4. 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 6. 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 7. 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 mem, reg reg, mem Cê reg, data mem, data : 8. 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 9. 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 10. 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 11. 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 12. 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 13. 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.  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
- Xem thêm -