微機(jī)原理課程設(shè)計--加密解密程序設(shè)計_第1頁
已閱讀1頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  課 程 設(shè) 計</b></p><p><b>  課程設(shè)計任務(wù)書</b></p><p>  學(xué)生姓名: 專業(yè)班級: </p><p>  指導(dǎo)教師: 工作單位: 自動化學(xué)院 </p><p>  題

2、 目: 加密解密程序設(shè)計</p><p><b>  初始條件:</b></p><p>  掌握8086匯編語言程序設(shè)計方法,設(shè)計不同的加密算法并完成對數(shù)據(jù)的加密和解密工作。</p><p>  要求完成的主要任務(wù): (包括課程設(shè)計工作量及其技術(shù)要求,以及說明書撰寫等具體要求)</p><p>  1 . 程序運(yùn)行

3、后,首先顯示‘Please Input Data:’,并響鈴一聲,然后從鍵盤接受以字母開始的101個字節(jié)型數(shù)據(jù),若首字母為‘E’,則將后續(xù)的100個數(shù)據(jù)進(jìn)行加密后,顯示在屏幕上;若首字母為‘R’,則將后續(xù)的100個數(shù)據(jù)解密,并顯示在屏幕上。</p><p>  2 . 撰寫課程設(shè)計說明書。內(nèi)容包括:摘要、目錄、正文、參考文獻(xiàn)、附錄(程序清單)。正文部分包括:設(shè)計任務(wù)及要求、方案比較及論證、軟件設(shè)計說明(軟件思想,

4、流程,源程序設(shè)計及說明等)、程序調(diào)試說明和結(jié)果分析、課程設(shè)計收獲及心得體會。</p><p><b>  時間安排:</b></p><p>  2012年12月30 日-----12月31 日 查閱資料及方案設(shè)計</p><p>  2013年01月01 日-----01月05 日 編程</p><p>

5、;  2013年01月 06日-----06月08 日 調(diào)試程序</p><p>  2013年01月09 日-----01月10 日 撰寫課程設(shè)計報告</p><p>  指導(dǎo)教師簽名: 2013 年 01 月 11 日</p><p>  系主任(或責(zé)任教師)簽名: 年 月 日&l

6、t;/p><p><b>  目錄</b></p><p><b>  摘要1</b></p><p>  1設(shè)計任務(wù)及要求2</p><p>  1.1程序設(shè)計任務(wù)2</p><p>  1.2程序設(shè)計要求及目的2</p><p><b&g

7、t;  1.3需求分析2</b></p><p>  2匯編語言之加密解密技術(shù)3</p><p>  2.1匯編語言簡介3</p><p>  2.2加密解密技術(shù)簡介3</p><p>  2.3加密的目的4</p><p><b>  3方案設(shè)計5</b></p&g

8、t;<p><b>  3.1加密方式5</b></p><p><b>  3.2方案比較5</b></p><p><b>  3.3設(shè)計思路5</b></p><p>  4設(shè)計功能模塊概述6</p><p>  4.1程序所需模塊6</p&

9、gt;<p>  4.2程序運(yùn)行界面6</p><p><b>  4.3響鈴程序7</b></p><p>  4.4功能選擇程序7</p><p>  4.5數(shù)據(jù)循環(huán)輸入子程序8</p><p>  4.6加密過程程序9</p><p>  4.7解密過程程序10&l

10、t;/p><p>  4.8退出程序11</p><p>  5總體程序及運(yùn)行結(jié)果13</p><p>  5.1總體程序流程圖13</p><p>  5.2程序調(diào)試13</p><p>  5.3程序運(yùn)行結(jié)果14</p><p>  6課程設(shè)計收獲及心得體會17</p>

11、<p><b>  參考文獻(xiàn)18</b></p><p><b>  附錄19</b></p><p><b>  摘要</b></p><p>  計算機(jī)是通過執(zhí)行指令序列來工作的,每種計算機(jī)都有一組指令集提供給用戶使用,這組指令集稱為該計算機(jī)的指令系統(tǒng)。8086CPU的指令系統(tǒng)不僅

12、包含8位機(jī)的全部指令,而且增加了一些功能較強(qiáng)的16位數(shù)據(jù)處理指令,如乘法,除法指令,因而同時具有8位和16位的處理能力。匯編語言是與機(jī)器語言密切相關(guān)的,是面向機(jī)器的語言。</p><p>  高級語言編寫的程序,會編譯成機(jī)器語言在CPU中執(zhí)行,如Visual C++等。由于機(jī)器語言與匯編語言是一一對應(yīng)的,因此就可將機(jī)器語言轉(zhuǎn)化成匯編語言,這個過程稱之為反匯編。而匯編語言可能讀性是比較好的,這樣就可分析程序流程,解

13、析其功能了,這個過程就是解密(俗稱破解)。也就是說,解密的基礎(chǔ)是建立在匯編語言級別上的,匯編語言是大學(xué)計算機(jī)的必修課,這方面的書籍品種很多,雖然大多書本是以DOS匯編為講解平臺,但對理解匯編指令功能是沒影響的。掌握加密解密這方面技術(shù),可以提高自己的調(diào)試技能,并且能了解他人程序思路,使自己寫出更好的程序。研究解密技術(shù)有助于掌握一些系統(tǒng)底層知識,系統(tǒng)底層知識絕對是構(gòu)造起大型軟件的堅(jiān)實(shí)基礎(chǔ)。</p><p>  本次設(shè)

14、計就是要用8086匯編語言設(shè)計一個程序,使它能夠?qū)W(wǎng)絡(luò)信息的原始數(shù)據(jù)進(jìn)行加密保護(hù)和解密使用。信息的傳輸則是通過公共信道這些通道基本是是不設(shè)防的,很脆弱的,很容易受到攻擊和破壞,因而需要一種措施來保護(hù)我們的數(shù)據(jù),防止被一些用心不良的人盜取或破壞。數(shù)據(jù)加密和解密功能的實(shí)現(xiàn)是利用對數(shù)據(jù)的ASCII碼進(jìn)行加減運(yùn)算,使它改寫為另一組數(shù)據(jù),隱藏了原數(shù)據(jù),使他人不能看到,從而保證了原數(shù)據(jù)的安全。加密(incode):對明文(可讀懂的信息)進(jìn)行翻譯,使

15、用不同的算法對明文以代碼形式(密碼)實(shí)施加密。該過程的逆過程稱為 解密(descode),即將該編碼信息轉(zhuǎn)化為明文的過程。</p><p>  關(guān)鍵詞:加密解密 匯編語言 數(shù)據(jù)保護(hù)</p><p><b>  加密解密程序設(shè)計</b></p><p><b>  1設(shè)計任務(wù)及要求</b></p><p&

16、gt;<b>  1.1程序設(shè)計任務(wù)</b></p><p>  程序運(yùn)行后,首先顯示‘Please Input Data:’,并響鈴一聲,然后從鍵盤接受以字母開始的101個字節(jié)型數(shù)據(jù),如果首字母為‘E’,則將后續(xù)的100個數(shù)據(jù)進(jìn)行加密后,顯示在屏幕上;如果首字母為‘R’,則將后續(xù)的100個數(shù)據(jù)解密,并顯示在屏幕上。</p><p>  1.2程序設(shè)計要求及目的<

17、;/p><p>  撰寫課程設(shè)計說明書。內(nèi)容包括:摘要、目錄、正文、參考文獻(xiàn)、附錄(程序清單)。正文部分包括:設(shè)計任務(wù)及要求、方案比較及論證、軟件設(shè)計說明(軟件思想,流程,源程序設(shè)計及說明等)、程序調(diào)試說明和結(jié)果分析、課程設(shè)計收獲及心得體會。</p><p>  程序設(shè)計的目的是通過親自實(shí)踐,親自動手以加強(qiáng)和鞏固課本上的知識,消除課堂上遇到的疑惑;通過課程設(shè)計培養(yǎng)獨(dú)立動手和獨(dú)立思考的能力,提高

18、自主創(chuàng)新思維水平;了解和熟練匯編語言中的各種指令,學(xué)會編寫匯編程序;學(xué)會查找資料,應(yīng)用資料,并養(yǎng)成分類收藏資料的習(xí)慣。</p><p><b>  1.3需求分析</b></p><p> ?。?)要求處理命令行參數(shù)。</p><p>  (2)基本的算術(shù)運(yùn)算和邏輯位運(yùn)算。 </p><p> ?。?)用匯編實(shí)現(xiàn)簡單程序

19、編寫并調(diào)用子程序。 </p><p> ?。?)DOS功能調(diào)用中有關(guān)響鈴、字符串輸出的指令。 </p><p>  (5)可執(zhí)行程序的參數(shù)使用。 </p><p> ?。?)綜合解決問題的能能力。</p><p>  2匯編語言之加密解密技術(shù)</p><p><b>  2.1匯編語言簡介</b>

20、</p><p>  匯編語言是一種用于電子計算機(jī)、微處理器、微控制器或其他可編程器件的低級語言,在不同的設(shè)備中,匯編語言對應(yīng)著不同的機(jī)器語言指令集。一種匯編語言專用于某種計算機(jī)系統(tǒng)結(jié)構(gòu),而不像許多高級語言,可以在不同系統(tǒng)平臺之間移植。使用匯編語言編寫的源代碼,需要通過使用相應(yīng)的匯編程序?qū)⑺鼈冝D(zhuǎn)換成可執(zhí)行的機(jī)器代碼。這一過程被稱為匯編過程。</p><p>  匯編語言采用了助記符來代表特

21、定低級機(jī)器語言的操作。特定的匯編目標(biāo)指令集可能會包括特定的操作數(shù)。許多匯編程序可以識別代表地址和常量的標(biāo)簽(l和符號,這樣就可以用字符來代表操作數(shù)而無需采取寫死的方式。普遍地說,特定的匯編語言和特定的機(jī)器語言指令集是一一對應(yīng)的。</p><p>  匯編語言不像其他大多數(shù)的程序設(shè)計語言一樣被泛用于程序設(shè)計;在今天的實(shí)際應(yīng)用中,它通常被應(yīng)用在底層硬件操作和高要求的程序優(yōu)化的場合。驅(qū)動程序、嵌入式操作系統(tǒng)和實(shí)時運(yùn)行程

22、序都需要組合語言。</p><p>  2.2加密解密技術(shù)簡介</p><p>  加密技術(shù)是最常用的安全保密手段,利用技術(shù)手段把重要的數(shù)據(jù)變?yōu)閬y碼(加密)傳送,到達(dá)目的地后再用相同或不同的手段還原(解密)。 </p><p>  加密技術(shù)包括兩個元素:算法和密鑰。算法是將普通的信息或者可以理解的信息與一串?dāng)?shù)字(密鑰)結(jié)合,產(chǎn)生不可理解的密文的步驟,密鑰是用來對數(shù)據(jù)

23、進(jìn)行編碼和解密的一種算法。在安全保密中,可通過適當(dāng)?shù)蔫€加密技術(shù)和管理機(jī)制來保證網(wǎng)絡(luò)的信息通信安全。 </p><p>  軟件的加密與解密是一個迷人的研究領(lǐng)域,它幾乎可以與任意一種計算機(jī)技術(shù)緊密結(jié)合——密碼學(xué)、程序設(shè)計語言、操作系統(tǒng)、數(shù)據(jù)結(jié)構(gòu) </p><p>  常用數(shù)據(jù)加密算法有: 數(shù)據(jù)加密算法有很多種,按照發(fā)展進(jìn)程來分,經(jīng)歷了古典密碼、對稱密鑰密碼和公開密鑰密碼階段,古典密碼算法有替

24、代加密、置換加密;對稱加密算法包括DES和人AES;非對稱加密算法包括RSA、背包密碼、McEliece密碼、Rabin、橢圓曲線、EIigamal D-H等。 目前在數(shù)據(jù)通信中使用最普遍的算法有DESDESDESDES算法、及RSARSARSARSA算法和PGP算法等。</p><p><b>  2.3加密的目的</b></p><p>  加密用于達(dá)到以下目的:

25、</p><p> ?。?)保密性:幫助保護(hù)用戶的標(biāo)識或數(shù)據(jù)不被讀取。</p><p>  (2)數(shù)據(jù)完整性:幫助保護(hù)數(shù)據(jù)不被更改。</p><p> ?。?)身份驗(yàn)證:確保數(shù)據(jù)發(fā)自特定的一方。</p><p>  (4)不可否認(rèn)性:防止特定的一方否認(rèn)發(fā)送過消息。</p><p>  為了達(dá)到這些目的,可以使用算法和慣

26、例的組合來創(chuàng)建加密方案。私鑰加密即對稱加密對數(shù)據(jù)執(zhí)行轉(zhuǎn)換,使第三方無法讀取該數(shù)據(jù)。此類型的加密使用單個共享的機(jī)密密鑰來加密和解密數(shù)據(jù)。公鑰加密即不對稱加密,對數(shù)據(jù)執(zhí)行轉(zhuǎn)換,使第三方無法讀取該數(shù)據(jù)。此類加密使用公鑰/私鑰對來加密和解密數(shù)據(jù)。加密簽名,通過創(chuàng)建對特定方唯一的數(shù)字簽名來幫助驗(yàn)證數(shù)據(jù)是否發(fā)自特定方。加密哈希,將數(shù)據(jù)從任意長度映射為定長字節(jié)序列,哈希在統(tǒng)計上是唯一的;不同的雙字節(jié)序列不會哈希為同一個值。</p>&l

27、t;p>  學(xué)習(xí)加密解密這方面技術(shù),對自身的提高很有好處??梢酝ㄟ^跟蹤軟件,提高自己的調(diào)試技能,并且能了解他人程序思路,使自己寫出更好的程序。有助于掌握一些系統(tǒng)底層知識,系統(tǒng)底層知識絕對是構(gòu)造起大型軟件的堅(jiān)實(shí)基礎(chǔ)。許多程序發(fā)展,都經(jīng)歷了這一鍛煉過程的。</p><p>  加密解密并非只有匯編一種語言可以用,之所以使用匯編語言進(jìn)行加密解密是為了更好地掌握匯編語言,并把理論所學(xué)運(yùn)用到實(shí)踐中,檢驗(yàn)自己是否真正學(xué)

28、會,并在此過程中提高自己的編程能力,調(diào)試能力。學(xué)習(xí)匯編語言是我們學(xué)習(xí)其他語言的敲門磚,因此這次課程設(shè)計意義很大,加密解密技術(shù)在實(shí)際生活中運(yùn)用也很廣泛,值得一學(xué)。</p><p><b>  3方案設(shè)計</b></p><p><b>  3.1加密方式</b></p><p>  數(shù)據(jù)的加密解密有很多種算法,其中最基礎(chǔ)的就

29、是加、減、乘、除以及邏輯運(yùn)算等算法,在這幾種基本算法的基礎(chǔ)上可以設(shè)計出更復(fù)雜更安全更能讓人難以破解加密解密算法。沒有萬能的算法,任何算法都是可以被破解的,加密的作用就是在時間上加設(shè)門檻。凱撒加密法是一種簡單的消息編碼方式:它根據(jù)字母表將消息中的每個字母移動常量位k。舉個例子如果k等于4,則在編碼后的消息中,每個字母都會向前移動4位:a會被替換為e;b會被替換成f;依此類推。字母表末尾將回卷到字母表開頭。于是,w會被替換為a,x會被替換為

30、b。</p><p><b>  3.2方案比較</b></p><p>  方案一:設(shè)計自己的密鑰,然后對需要加密的數(shù)據(jù)先左移4位,再對其進(jìn)行異或,得到加密后的數(shù)據(jù),解密只需再次異或移位便可得到。</p><p>  方案二:對需要加密的數(shù)據(jù)進(jìn)行分類,數(shù)字則減1加密,字母則加4加密,得到加密后的數(shù)據(jù),解密只需對數(shù)字加1,字母減4。</p

31、><p>  對數(shù)據(jù)進(jìn)行異或加密容易超出字母和數(shù)字表示范圍,產(chǎn)生特殊符號和圖案,不易控制,這次設(shè)計主要針對普通數(shù)字和字母的加密,因此方案二比較適合。</p><p><b>  3.3設(shè)計思路</b></p><p>  本次設(shè)計主要針對輸入的數(shù)字和字母進(jìn)行加減加密,采用的方法為輸入數(shù)據(jù)后,若第一個數(shù)據(jù)為E或e則把e或E后面的數(shù)字減1字母加4做為加

32、密后的數(shù)據(jù),若要對一組數(shù)據(jù)解密,則輸入R或r并在其后輸入想要解密的數(shù)據(jù),程序運(yùn)行后便會還原數(shù)據(jù),得到解密后的數(shù)據(jù)。加密過程中會由于加密后數(shù)據(jù)超出數(shù)字或字符可以表示的范圍,數(shù)子9加1后超出范圍,因此可以用9減去9,得0來表示數(shù)字9加密后的數(shù)據(jù);字母W/w,X/x,Y/y,Z/z加4后也會超出字母表示范圍,因此可以減去26,得A/a,B/b,C/c,D/d分別作為其加密后的數(shù)據(jù)。</p><p><b> 

33、 4設(shè)計功能模塊概述</b></p><p><b>  4.1程序所需模塊</b></p><p>  根據(jù)程序設(shè)計要求,可寫出該程序所需各主要的功能模塊:字符循環(huán)輸入模塊、字符串輸出模塊、響鈴模塊、功能選擇模塊、加密模塊、解密模塊、程序退出模塊。程序功能模塊流程圖如圖4-1所示。</p><p>  圖4-1程序功能模塊流程圖&

34、lt;/p><p><b>  4.2程序運(yùn)行界面</b></p><p>  字符串顯示子程序流程圖如圖4-2所示。</p><p>  圖4-2字符串顯示子程序流程圖</p><p>  好看的運(yùn)行界面可以給用戶一種賞心悅目的感覺,本次設(shè)計主要利用匯編語言編寫程序并在DOS環(huán)境下運(yùn)行,因此可以使用DATA SEGMEN

35、T指令定義數(shù)據(jù)段顯示自己設(shè)計的界面。</p><p>  可以加入自己設(shè)計的圖案或字符串,采用9號功能調(diào)用,輸出多字符串,因此其結(jié)尾必須以‘$’結(jié)尾,自定義界面程序代碼格式如下:</p><p>  DATA SEGMENT</p><p>  HEADMSGDB0DH,0AH‘ ’,'$'</p><p>  字符串顯

36、示過程子程序程序代碼如下:</p><p>  DISPPROCNEAR;顯示字符串子程序 </p><p><b>  MOVAH,9</b></p><p><b>  INT21H </b></p><p><b>  RET </b></p>

37、<p><b>  DISPENDP</b></p><p><b>  4.3響鈴程序</b></p><p>  根據(jù)設(shè)計要求,程序運(yùn)行后,首先顯示‘Please Input Data:’,并響鈴一聲,響鈴程序可以利用2號功能調(diào)用,07H為響鈴的ASCII碼,響鈴程序代碼如下:</p><p>  MOV

38、 DL,07H ;設(shè)置響鈴聲</p><p>  MOV AH,2</p><p>  INT 21H ;輸出響鈴聲</p><p><b>  4.4功能選擇程序</b></p><p>  用比較指令CMP選擇所需程序?qū)崿F(xiàn)的功能,如果輸入的字符

39、串首字符為E或e則進(jìn)入加密子程序;如果輸入的字符串中首字符為R或r則進(jìn)入解密子程序;如果輸入的字符串中首字符為Q或q則進(jìn)入退出子程序。如果輸入的字符中首字符非前三種情況則會提醒你再次輸入,直到輸入的首字符為前面三種情況中的一種為止。功能選擇程序流程圖如圖4-3所示。</p><p>  圖4-3功能選擇程序流程圖</p><p>  4.5數(shù)據(jù)循環(huán)輸入子程序</p><

40、p>  采用1號DOS功能調(diào)用命令,循環(huán)輸入單個字符并保存數(shù)據(jù),加密解密均是以單個字符為單位進(jìn)行,這樣就不會由于一個字符加密后產(chǎn)生的進(jìn)位影響到其他字符,造成加密解密結(jié)果失真。采用的是FOR循環(huán)語句,并在輸入最后一個字符后,加‘$’字符結(jié)束輸入,直至鍵入回車符終止子程序返回主程序,因此還要用到比較指令CMP或TEST指令。</p><p>  循環(huán)輸入程序流程圖如圖4-4所示。</p><

41、p>  圖4-4循環(huán)輸入程序流程圖</p><p><b>  4.6加密過程程序</b></p><p>  主要針對輸入的數(shù)字和字母進(jìn)行加密,采用的方法為,輸入數(shù)據(jù)后,若第一個數(shù)據(jù)為E或e,則把e或E后面的數(shù)字減1字母加4作為加密后的數(shù)據(jù)。對于數(shù)字0減1后小于0,需直接加上9,變成9,對于W/w,X/x,Y/y,Z/z加4后會超出字母范圍因此需減去26,變?yōu)?/p>

42、A/a,B/b,C/c,D/d。</p><p>  程序中判斷語句應(yīng)用CMP或者TEST指令以免產(chǎn)生運(yùn)算結(jié)果,破壞數(shù)據(jù)。由于是一位一位的進(jìn)行數(shù)據(jù)加密,因此需要時刻判斷當(dāng)前字符是否為‘$’,因?yàn)樽址且浴?’結(jié)尾的。加密過程的關(guān)鍵在于,判斷字符類型及加密后如何對數(shù)據(jù)進(jìn)行保存并保護(hù),該過程中對子程序的調(diào)用應(yīng)用非常多,可見子程序?qū)τ诔绦虻闹匾饔谩?lt;/p><p>  加密過程程序流程圖如圖

43、4-5所示。</p><p>  圖4-5加密過程程序流程圖</p><p><b>  4.7解密過程程序</b></p><p>  解密為加密的逆過程,即輸入數(shù)據(jù)后,若第一個數(shù)據(jù)為R或r,則把R或r后面的數(shù)字加1字母減4作為解密后的數(shù)據(jù)。由于數(shù)字0減1后小于0,需直接加上9變?yōu)?,對于W/w,X/x,Y/y,Z/z加4后會超出字母范圍因此

44、需減去26變成A/a,B/b,C/c,D/d。因此當(dāng)輸入數(shù)據(jù)9以后,應(yīng)直接將其減9變?yōu)?,當(dāng)輸入A/a,B/b,C/c,D/d時,應(yīng)先減去4再加上26,變成W/w,X/x,Y/y,Z/z。和加密過程類似,也許判斷輸入字符是否為‘$’,以決定是否完成輸入進(jìn)行解密過程。不同類型所以加密算法不同,因此解密的關(guān)鍵就是運(yùn)用對應(yīng)加密算法的逆運(yùn)算進(jìn)行解密,可見對字符類型的判斷很重要。</p><p>  解密過程程序流程圖如圖

45、4-6所示。</p><p>  圖4-6解密過程程序流程圖</p><p><b>  4.8退出程序</b></p><p>  當(dāng)?shù)谝粋€輸入數(shù)據(jù)為字母Q/q時,開始運(yùn)行退出程序,提示“DO YOU WANT TO EXIT THIS PROGRAM?(Y/N):”輸入Y則退出程序,輸入N則提示:“PLEASE INPUT DATA:”。退

46、出程序所用指令較為簡單,就是簡單地9號DOS功能調(diào)用字符輸入、CMP比較判斷指令、以及基本的跳轉(zhuǎn)指令即可實(shí)現(xiàn)。退出程序雖然簡單,但在程序中的重要性不言而喻,退出程序不當(dāng)會給用戶以不好的客戶體驗(yàn),甚至造成數(shù)據(jù)丟失,程序運(yùn)行失敗等問題。</p><p>  退出程序流程圖如圖4-7所示。</p><p>  圖4-7退出程序流程圖</p><p>  5總體程序及運(yùn)行結(jié)

47、果</p><p>  5.1總體程序流程圖</p><p>  將前面介紹的各個模塊連接起來即為完整的加密解密程序,程序完整代碼見附錄部分。整體程序流程圖如圖5-1所示。</p><p>  圖5-1整體程序流程圖</p><p><b>  5.2程序調(diào)試</b></p><p>  (1)在

48、編寫代碼時,我遇到了很多問題,例如簡單的跳轉(zhuǎn)指令在程序中有字節(jié)范圍限制,因此要用到子程序調(diào)用,然而子程序的調(diào)用我都沒怎么接觸過,所以要去查資料 在翻閱資料和閱讀相關(guān)的例子后,終于了解并掌握了子程序的功能。</p><p>  (2)寫完代碼,進(jìn)入到程序的調(diào)試階段,在這里遇到很多的問題。</p><p>  1)在定義顯示的菜單界面的時候,因?yàn)槭禽敵鲎址谧址鬀]用‘$’結(jié)束,出現(xiàn)錯

49、誤。出現(xiàn)這一問題,是因?yàn)檫\(yùn)用9號功能調(diào)用,其結(jié)尾的那一個字符必須是‘$’,只需在其結(jié)尾加上‘$’就可以。 </p><p>  2)在用到接收的單個字符時,直接用寄存器來存儲,當(dāng)要調(diào)用時,就沒發(fā)現(xiàn)已不存在了,調(diào)試時就出現(xiàn)了錯誤。為了解決這個問題,我們可以開辟一個內(nèi)存空間,把輸入的單個字符存入里面,連回車字符也存入,當(dāng)要調(diào)用時,就把這空間的首個單元取出便可。</p><p>  3)在運(yùn)用比

50、較CMP的跳轉(zhuǎn)時,當(dāng)超過128個字節(jié)時,編譯時就會出錯。解決這個問題可以在跳轉(zhuǎn)語句和被跳轉(zhuǎn)的語句之間加個中間量,這樣就可以在編譯時沒問題了。</p><p>  4)程序運(yùn)行后出現(xiàn)亂碼現(xiàn)象,解決之一問題需要在調(diào)用輸出子程序前,將以前存入的舊數(shù)據(jù)清零,可使用指令XOR,AND等。</p><p><b>  5.3程序運(yùn)行結(jié)果</b></p><p&

51、gt;  在接口試驗(yàn)平臺集成環(huán)境中運(yùn)行該程序,點(diǎn)擊匯編、連接、運(yùn)行后得到程序顯示的菜單界面。自定義的菜界面里有顯示此程序的使用方法并提示輸入數(shù)據(jù)(PLEASE INPUT DATA:),對程序的使用非常方便,這種人機(jī)交互式的軟件程序最易被用戶承認(rèn)并喜愛。程序運(yùn)行菜單界面如圖5-2所示。</p><p>  圖5-2程序運(yùn)行菜單界面</p><p>  輸入數(shù)據(jù)EWZ5CS按回車鍵運(yùn)行程序,

52、界面上顯示的鎖形表示數(shù)據(jù)已加密,為AD4GW。程序加密界面如圖5-3所示。</p><p>  圖5-3程序加密界面</p><p>  輸入數(shù)據(jù)R4DAGW按回車鍵后程序運(yùn)行,圖中顯示的鑰匙形表示數(shù)據(jù)已解密,為WZ5CS。程序解密界面如圖5-4所示。</p><p>  圖5-4程序解密界面</p><p>  如果想退出程序則輸入字母Q或

53、q,按回車鍵運(yùn)行后結(jié)果如圖5-5所示,提示“DO YOU WANT TO EXIT THIS PROGRAM?(Y/N):”。程序退出選擇界面如圖5-5所示。</p><p>  圖5-5程序退出選擇界面</p><p>  輸入Y或y程序結(jié)束,回到集成環(huán)境窗口。輸入N或n回到程序開始菜單,提示“PLEASE INPUT DATA:”,運(yùn)行后如圖5-6。返回程序開始菜單界面如圖5-6所示。

54、</p><p>  圖5-6返回程序開始菜單界面</p><p>  如果輸入數(shù)據(jù)不是E/e,R/r,Q/q,運(yùn)行程序,同樣提示“PLEASE INPUT DATA:”,運(yùn)行后如圖5-7。輸入錯誤界面如圖5-7所示。</p><p>  圖5-7輸入錯誤界面</p><p>  6課程設(shè)計收獲及心得體會</p><p&g

55、t;  本次設(shè)計用的是8086匯編語言來設(shè)計程序,使它能夠?qū)W(wǎng)絡(luò)信息的原始數(shù)據(jù)進(jìn)行加密保護(hù)和解密使用。數(shù)據(jù)加密和解密功能的實(shí)現(xiàn)是利用對數(shù)據(jù)的ASCII碼進(jìn)行加減運(yùn)算,使它改寫為另一組數(shù)據(jù),隱藏了原數(shù)據(jù),使他人不能看到,從而保證了原數(shù)據(jù)的安全。</p><p>  作為自動化專業(yè)的學(xué)生,對計算機(jī)的使用是不可避免的,本專業(yè)很多方面都必須要通過計算機(jī)來實(shí)現(xiàn)。計算機(jī)已成了我們學(xué)習(xí)和工作必不可少的工具,然而計算機(jī)作為網(wǎng)絡(luò)中

56、的核心部分也是最不安全的,大量的信息用數(shù)據(jù)的形式存放在計算機(jī)系統(tǒng)里。信息的傳輸則是通過公共信道。這些計算機(jī)系統(tǒng)和信道是不設(shè)防的,很脆弱的,很容易受到攻擊和破壞,因而我們需要一種措施來保護(hù)我們的數(shù)據(jù),防止被一些用心不良的人盜取或破壞。</p><p>  這次微機(jī)原理課程設(shè)計讓我學(xué)到很多很多的東西,不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識,解決了很多疑惑。通過課程設(shè)計,我了解和熟練匯

57、編語言中的各種指令,學(xué)會編寫匯編程序,培養(yǎng)了獨(dú)立動手和獨(dú)立思考的能力,提高自主創(chuàng)新思維水平,學(xué)會了查找資料,應(yīng)用資料,并養(yǎng)成分類收藏資料的習(xí)慣。</p><p>  以前在上課的時候,老師經(jīng)常強(qiáng)調(diào)在寫一個程序的時候,一定要事先把程序流程圖出來,但是我總覺得這樣做沒必要,很浪費(fèi)時間。但是,這次課程設(shè)計改變了我以前的那種錯誤的認(rèn)識,以前我接觸的那些程序都是很短、很基礎(chǔ)的,但是在課程設(shè)計中碰到的那些需要很多代碼才能完成

58、的任務(wù),畫程序流程圖是很有必要的。因?yàn)橥ㄟ^程序方框圖,在做設(shè)計的過程中,我們每一步要做什么,每一步要完成什么任務(wù)都有一個很清楚的思路,而且在程序測試的過程中也有利于查錯。</p><p><b>  參考文獻(xiàn)</b></p><p>  彭虎,周佩玲,傅忠謙.微機(jī)原理與接口技術(shù)(第3版).北京:電子工業(yè)出版社,2011.8.</p><p> 

59、 RichardC.Detemer(作者),鄭紅(譯者),陳麗瓊(譯者),8086匯編語言基礎(chǔ)教程.北京:機(jī)械工業(yè)出版社,2009.</p><p>  溫玉杰.Intel匯編語言程序設(shè)計(第四版).北京:電子工業(yè)出版社,2004.</p><p>  卜艷萍,周偉.匯編語言程序設(shè)計教程.北京:清華大學(xué)出版社,2004.</p><p>  沈美明.IBM-PC匯編

60、語言程序設(shè)計.北京:清華大學(xué)出版社,2000.</p><p>  段鋼.加密與解密(第3版).北京:電子工業(yè)出版社,2008.</p><p>  王爽.匯編語言(第2版).北京:清華大學(xué)出版社,2008.</p><p><b>  附錄</b></p><p>  本次設(shè)計的完整程序代碼如下:</p>

61、<p>  DATA SEGMENT ;定義數(shù)據(jù)段 </p><p>  HEAD0DB' ',0DH,0AH </p><p>  DB'+-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*&#

62、39;,0DH,0AH</p><p>  DB'| WELCOME! *',0DH,0AH</p><p>  DB'*A IF YOU WANNA ENCRYPT |',0DH,0AH</p&

63、gt;<p>  DB'| PLEASE INPUT BYM START WITH A LETTER E OR e! *',0DH,0AH</p><p>  DB'*B IF YOU WANNA DECRYPT |',0DH,0AH</p><p>  DB

64、'| PLEASE INPUT BYM START WITH A LETTER R OR r! *',0DH,0AH</p><p>  DB'*C IF YOU WANNA EXIT THIS PROGRAM |',0DH,0AH</p><p>  DB'| PLEASE P

65、RESS Q OR q! *',0DH,0AH</p><p>  DB'+-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*',0DH,0AH,'$'</p><p>  HEAD1DB 0DH,0AH,'P

66、LEASE INPUT DATA:','$'</p><p>  HEAD2 DB' ',0DH,0AH</p><p>  DB' ********* ',0DH,0AH </p><p>  DB' *

67、* ** ',0DH,0AH </p><p>  DB' ** ** ',0DH,0AH </p><p>  DB' &&&&&&&&&&&&&&&am

68、p; ',0DH,0AH</p><p>  DB' & wangjianhua & ',0DH,0AH </p><p>  DB' & automation & ',0DH,0AH </p><p>  DB' & 1005 class &

69、',0DH,0AH </p><p>  DB' &*****^^^*****& ',0DH,0AH</p><p>  DB 0DH,0AH,'AFTER ENCRYPTING:','$' </p><p>  HEAD3 DB' ',0DH,0AH

70、 </p><p>  DB' ******** ',0DH,0AH</p><p>  DB' * * ',0DH,0AH</p><p>  DB' * **** *********

71、*********** ',0DH,0AH</p><p>  DB' * * * * * * * ',0DH,0AH</p><p>  DB' * **** ******************** ',0DH,0AH</p><p>  DB'

72、 * * ',0DH,0AH</p><p>  DB' ******** ',0DH,0AH</p><p>  DB 0DH,0AH,'AFTER DECRYPTING:','$'</p><p>

73、;  HEAD4DB0DH,0AH,'DO YOU WANT TO EXIT THIS PROGRAM?(Y/N):','$'</p><p>  HEAD5 DB' ',0DH,0AH</p><p>  DB' ',0DH,0AH</p><p>  DB&

74、#39; ',0DH,0AH,'$'</p><p>  BUFF DB 100 DUP(0)</p><p>  ENCRYPTION DB 100DUP (0) </p><p>  DECRYPTION DB 100DUP (0) </p><p>  

75、DATAENDS </p><p>  CODESEGMENT </p><p>  ASSUME CS:CODE,DS:DATA</p><p><b>  START: </b></p><p>  MOV AX,DATA</p><p>  MOV DS,AX</p>

76、<p>  MOV AH,9;請求輸出</p><p>  MOV AL,'*'</p><p>  MOV CX,63;連續(xù)63個*</p><p><b>  INT 10H</b></p><p>  LEA DX,HEAD0;輸出HE

77、AD0數(shù)據(jù)段</p><p>  CALL DISP</p><p>  MOV DL,07H ;設(shè)置響鈴聲</p><p><b>  MOV AH,2</b></p><p>  INT 21H ;輸出響鈴聲</p><p>  

78、MOV AH,9 ;請求輸出 </p><p>  MOV AL,'*' </p><p>  MOV CX,63 ;連續(xù)63個*</p><p>  INT 10H</p><p>  CALLCY

79、CLE</p><p>  CYCLEPROCNEAR;選擇程序</p><p>  LEADX,HEAD1 ;提示PLEASE INPUT DATA: </p><p>  CALLDISP</p><p>  XORSI,SI</p><p>  MOVAH,1

80、 ;輸入并比較</p><p><b>  INT21H</b></p><p>  CMPAL,'E'</p><p>  JEJ1;若輸入為E則接到J1</p><p>  CMPAL,'e';若輸入為e則接到J1<

81、;/p><p><b>  JEJ1 </b></p><p>  CMPAL,'R';若輸入為R則接到J2</p><p><b>  JEJ2</b></p><p>  CMPAL,'r';若輸入為r則接到J2<

82、;/p><p><b>  JEJ2</b></p><p>  CMPAL,'Q';若輸入為Q則接到EC1</p><p><b>  JEESC1</b></p><p>  CMPAL,'q';若輸入為q則接到EC1&

83、lt;/p><p><b>  JEESC1</b></p><p>  JMP CYCLE</p><p><b>  J1:</b></p><p>  CALLJIAMI;把J1定義為子程序JIAMI </p><p>  J2:

84、 </p><p>  CALLJIEMI;把J2定義為子程序JIEMI</p><p><b>  ESC1:</b></p><p>  CALLEXIT ;把ESC1定義為子程序EXIT</p><p><b>  RET

85、 </b></p><p>  CYCLE ENDP</p><p>  DISPPROCNEAR;顯示字符串子程序 </p><p><b>  MOVAH,9</b></p><p><b>  INT21H </b></p><p&

86、gt;<b>  RET </b></p><p><b>  DISPENDP</b></p><p>  INPUTLOOP PROC NEAR;字符串輸入程序</p><p>  FOR:;循環(huán)輸入單個字符</p><p>  MOV AH,01H

87、</p><p><b>  INT21H</b></p><p>  CMPAL,0DH;判斷是否回車?</p><p>  JEFINISHE</p><p>  MOV BUFF[SI],AL;保存輸入數(shù)據(jù)</p><p>  INC SI &

88、lt;/p><p>  JMP FOR </p><p><b>  FINISHE: </b></p><p>  MOVBUFF[SI],24H;輸入'$',輸入結(jié)束</p><p><b>  RET </b></p><p>  INP

89、UTLOOP ENDP</p><p>  JIAMIPROCNEAR;加密選擇</p><p>  CALLINPUTLOOP</p><p><b>  XORDI,DI</b></p><p>  XOR SI,SI</p><p>  LEA SI,

90、ENCRYPTION;取首地址</p><p>  LEA DI,BUFF</p><p>  CALLENCRYPTIONPROC</p><p><b>  RET </b></p><p>  JIAMIENDP</p><p>  ENCRYPTIONPROC PROC

91、 NEAR;加密過程程序 </p><p><b>  PROC1:</b></p><p>  XOR AX,AX</p><p>  MOV AL,[DI]</p><p>  CMP AL,24H</p><p>  JZ ORDER;輸入

92、數(shù)據(jù)為'$'則跳轉(zhuǎn)到ORDEER </p><p>  CMP AL,30H </p><p>  JZ T11;輸入數(shù)據(jù)為0則跳轉(zhuǎn)到T11 </p><p>  CMP AL,':'</p><p>  JB T12

93、;有輸入數(shù)據(jù)不大于9則接到T12 </p><p>  CMP AL,'A'</p><p>  JC NEXT;小于'A'不用處理,轉(zhuǎn)移到下一個</p><p>  CMP AL,'{' </p><p>  JNC

94、 NEXT ;大于'z'不用處理,轉(zhuǎn)移到下一個</p><p>  CMP AL,'a'</p><p>  JC BIG ;小于'a'可能是大寫,轉(zhuǎn)移</p><p>  ADD AL, 4

95、 ;加密</p><p>  CMP AL,'{'</p><p>  JNC J26 ;大于'z',超過了最后的字母,應(yīng)減去26</p><p>  JMP NEXT </p><p><b>  BIG:</b&

96、gt;</p><p>  XOR AX,AX</p><p>  MOV AX,[DI]</p><p>  CMP AL,'['</p><p>  JNC NEXT ;大于'Z'不用處理,轉(zhuǎn)移到下一個</p><p>  ADD AL,4

97、;加密</p><p>  CMP AL,'['</p><p>  JNC J26 ;大于'Z',超過了最后的字母,應(yīng)減去26</p><p>  JMP NEXT</p><p><b>  J26:</b><

98、/p><p>  SUB AL,26</p><p><b>  NEXT:</b></p><p>  MOV [SI],AX;保存密碼</p><p><b>  INC DI</b></p><p><b>  INC SI</b

99、></p><p>  JMP PROC1</p><p><b>  T12:</b></p><p>  SUBAL,01H;把輸入的數(shù)據(jù)除減01</p><p>  MOV [SI],AL</p><p><b>  INCDI</b>&

100、lt;/p><p><b>  INC SI</b></p><p>  JMP PROC1</p><p><b>  T11: </b></p><p>  ADD AL,09H;把輸入的數(shù)為0則其ASC碼加09H</p><p>  MOV [

101、SI],AL</p><p><b>  INC DI</b></p><p><b>  INC SI</b></p><p>  JMP PROC1</p><p><b>  ORDER:</b></p><p><b>  X

102、ORDX,DX</b></p><p>  LEADX,HEAD2</p><p>  CALL DISP;輸出數(shù)據(jù)段HEAD2</p><p>  XOR DX,DX</p><p>  LEADX,ENCRYPTION;輸出加密后字符串</p><p>&l

103、t;b>  CALLDISP</b></p><p><b>  XORDX,DX</b></p><p>  LEADX,HEAD5;輸出兩行空格行 </p><p><b>  CALLDISP</b></p><p>  CALLCYCLE </

104、p><p><b>  RET </b></p><p>  ENCRYPTIONPROCENDP</p><p>  JIEMIPROCNEAR;解密選擇</p><p>  CALLINPUTLOOP</p><p>  XORSI,SI</p><

105、;p>  LEASI,DECRYPTION</p><p>  LEADI,BUFF</p><p>  CALLDECRYPTIONPROC</p><p><b>  RET</b></p><p>  JIEMIENDP</p><p>  DECRYPTIONPROC

106、 PROCNEAR;解密過程程序</p><p><b>  PROC2:</b></p><p>  MOVAL,[DI]</p><p>  CMPAL,'$' </p><p>  JZORDER2;輸入數(shù)據(jù)為'$'則跳轉(zhuǎn)至ORDER2</p&

107、gt;<p>  CMPAL,39H;若有輸入的數(shù)據(jù)為9則接到T21</p><p><b>  JET21</b></p><p>  CMP AL,39H</p><p>  JC T22;有輸入數(shù)據(jù)小于于9則接到T22 </p><p>  CMP

108、 AL,'@'</p><p>  JC NEXT1;小于'A'不用處理,轉(zhuǎn)移到下一個</p><p>  CMP AL,'{' </p><p>  JNC NEXT1;大于'z'不用處理,轉(zhuǎn)移到下一個</p><p>  CM

109、P AL,'a'</p><p>  JC BIG1;小于'a'可能是大寫,轉(zhuǎn)移到BIG1</p><p>  SUB AL, 4;解密</p><p>  CMP AL,60H</p><p>  JBE J26;小于'a&#

110、39;,應(yīng)加上26</p><p>  JMP NEXT1</p><p><b>  BIG1:</b></p><p>  XOR AX,AX</p><p>  MOV AX,[DI]</p><p>  CMP AL,'[' </p>

111、<p>  JNC NEXT1;大于'Z'不用處理,轉(zhuǎn)移到下一個</p><p>  SUB AL,4</p><p>  CMP AL,'@'</p><p>  JBE J_26;小于‘A’,超出了最小的字母,應(yīng)加上26</p><p> 

112、 JMP NEXT1</p><p><b>  J_26:</b></p><p>  ADD AL,26</p><p><b>  NEXT1:</b></p><p>  MOV [SI],AX;保存明碼</p><p>  INC

113、 DI</p><p>  INC SI</p><p>  JMP PROC2</p><p><b>  T21:</b></p><p>  SUBAL,09H;有數(shù)據(jù)等于9則其ASCII碼減09 </p><p><b>  CBW</b

114、></p><p>  MOV[SI],AX</p><p><b>  INCSI</b></p><p><b>  INCDI</b></p><p>  JMPPROC2</p><p><b>  T22: </b><

115、;/p><p>  ADD AL,01H;把輸入的數(shù)據(jù)加01</p><p>  MOV [SI],AL</p><p><b>  INCDI</b></p><p><b>  INCSI</b></p><p>  JMP PROC2&

116、lt;/p><p><b>  ORDER2:</b></p><p>  XOR AX,AX</p><p>  XORDX,DX</p><p>  LEADX,HEAD3</p><p>  CALLDISP;輸出數(shù)據(jù)段HEAD3</p><

117、;p>  XORDX,DX</p><p>  LEADX,DECRYPTION;輸出解密后字符串 </p><p>  CALLDISP</p><p>  XORDX,DX</p><p>  LEADX,HEAD5;輸出兩個空格行 </p><p>  CALLD

118、ISP</p><p>  CALLCYCLE</p><p><b>  RET </b></p><p>  DECRYPTIONPROC ENDP</p><p>  EXITPROCNEAR;退出程序</p><p><b>  CYCLE1:&l

119、t;/b></p><p>  XORDX,DX</p><p>  LEADX,HEAD4;輸出DO YOU WANT TO QUIT THIS PROGRAM? </p><p>  CALLDISP</p><p>  MOVAH,1;選擇輸入</p><p>

120、<b>  INT21H</b></p><p>  CMPAL,59H;若輸入Y則退出程序 </p><p>  JEOUTCX</p><p>  CMPAL,79H;若輸入y則退出程序 </p><p>  JEOUTCX</p><p>

121、;  CMPAL,4EH </p><p><b>  JEA1</b></p><p>  CMPAL,6EH</p><p><b>  JEA1</b></p><p>  JMPCYCLE1;輸入E或e回到程序</p><p>

122、<b>  OUTCX:</b></p><p>  MOVAH,4CH</p><p><b>  INT21H</b></p><p><b>  A1:</b></p><p>  CALLCYCLE</p><p><b>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論