版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、<p><b> 目錄</b></p><p><b> 摘要1</b></p><p> 1.設計目的和要求2</p><p><b> 1.1設計目的2</b></p><p> 2.程序設計說明2</p><p>
2、2.1 程序設計流程圖3</p><p> 2.2 程序段落說明4</p><p> 2.2.1程序定義段4</p><p> 2.2.3回文數(shù)判定程序設計5</p><p> 2.2.4 程序結(jié)束程序段7</p><p> 3.程序調(diào)試及結(jié)果7</p><p><b
3、> 小結(jié)及體會8</b></p><p><b> 參考文獻9</b></p><p><b> 附錄10</b></p><p><b> 摘要</b></p><p> 日常生活中,計算機能處理的信息是多種多樣的,如各種數(shù)據(jù)的查詢與計算,
4、不同的文字符號,各種圖像信息。利用計算機的邏輯性與它的告訴計算,我們可以解決許多趣味性的數(shù)學問題,用匯編語言程序能實現(xiàn)數(shù)的查找計算及顯示,能在MF2KI中演示,編寫一定功能的程序。</p><p> 此次課程設計基于我們這學期所學的《微機原理與接口技術(shù)》,要求我們運用書上知識解決匯編語言編程問題,程序要求能將實現(xiàn)大小寫字母轉(zhuǎn)換,并且輸入查找字符時,能顯示該字符在字符串中的位置,若原字符串中沒有該字符,則在屏幕上
5、顯示相應的提示語句。程序能實現(xiàn)人機交互功能,有一定的提示語句。</p><p> 匯編語言設計時先繪制流程圖,分配存儲空間,編寫程序,對于我們熟悉匯編語言程序的編寫,程序思路的設計有很大的幫助,應嚴肅認真對待。</p><p> 關鍵詞:匯編語言 編程 回文數(shù)的尋找</p><p> 求出500以內(nèi)的回文數(shù)</p><p><b
6、> 設計目的和要求</b></p><p><b> 1.1設計目的</b></p><p> ?。?)進一步建立微機系統(tǒng)的概念,加深對系統(tǒng)的理解和認識,培養(yǎng)學生應用微型計算機解決實際問題的能力; </p><p> ?。?)進一步學習和掌握匯編語言程序的編寫和應用的方法,通過較大規(guī)模程序的編寫,提高編寫匯編語言程序的水平
7、和學習程序調(diào)試方法。 </p><p> ?。?)進一步熟悉微機最小系統(tǒng)的構(gòu)成及常用接口芯片的使用,提高系統(tǒng)設計能力。 </p><p><b> 設計要求</b></p><p> 1.設計匯編語言程序,實現(xiàn)求出500 以內(nèi)的回文數(shù)的功能,具體功能要求如下:</p><p> 如果一個數(shù)從左邊和從右邊讀都是相同的
8、數(shù),就稱它為回文數(shù),例如383,求出500 以內(nèi)的回文數(shù)并輸出顯示。要求:提示數(shù)據(jù)范圍為0-500;換行顯示結(jié)果。</p><p> 2.根據(jù)功能要求繪制程序流程圖、編寫完整的匯編語言程序并上機調(diào)試</p><p><b> 程序設計說明</b></p><p> 匯編語言要求設計一個程序來找出0到500以內(nèi)的回文數(shù),如果一個數(shù)從左邊和從
9、右邊讀都是相同的數(shù),就稱它為回文數(shù),故設計此程序思維很簡單,根據(jù)回文數(shù)的特性,1至9都為回文數(shù),而在10到500間的回文數(shù)需另外求出,因此本程序設計采用分支結(jié)構(gòu)與循環(huán)結(jié)構(gòu)相結(jié)合。</p><p> 首先,設計一循環(huán)程序,在1到500間對每個數(shù)進行判斷,因此要循環(huán)500次,在執(zhí)行程序前,應先定義一個變量,為簡化程序,由上述已知1至9都為回文數(shù),故先比較此數(shù)與10的大小。從1開始,如果小于10,可以直接輸出;如果大
10、于10,將此數(shù)與100比較,如小于100,將十位與個位相比較,相同則為回文數(shù),執(zhí)行輸出指令,不同則執(zhí)行加一指令繼續(xù)循環(huán);如此數(shù)大于100,將個位與百位相比較,相同則為回文數(shù),執(zhí)行輸出指令,不同則執(zhí)行加一指令繼續(xù)循環(huán),直到1到500的數(shù)都檢查了一遍,至此,1到500內(nèi)的回文數(shù)都可求出。</p><p> 2.1 程序設計流程圖 </p><p&g
11、t; 圖一 程序流程圖</p><p> 程序開始時,先定義數(shù)據(jù)段、堆棧段和代碼段,在判斷程序程序繼續(xù)進行后,初始化,定義循環(huán)次數(shù)及給變量賦值,程序步驟主要分三步:</p><p> 比較變量與10的大小,當變量小于10時,判定此數(shù)為回文數(shù),將變量的個位、十位、百位存儲在內(nèi)存單元num、num+1、num+2中,當然小于10時個位與十位賦值為0,將變量加上0030H,轉(zhuǎn)換為ASC
12、II碼,然后即可調(diào)用DOS功能將計數(shù)值輸出在屏幕上</p><p> 當變量大于10時,比較變量與100的大小,若變量小于100,則除以10,由匯編語言的運算法則知,余數(shù)存儲在AH中,商存儲在AL中,要將余數(shù)商都轉(zhuǎn)換成ASCII碼,將AX加上3030H,比較余數(shù)和商的大小,若相等則判定為回文數(shù),將余數(shù)值存儲在num,商存儲在num+1,調(diào)用DOS功能將計數(shù)值輸出在屏幕上;不相等則將變量加一,回到(a)循環(huán)<
13、;/p><p> 當變量大于100時,除以10,余數(shù)存儲在AH中,加上0030H后存儲在num中,;再將商除以10(注意AH需清零),余數(shù)和商都加上0030H,分別存儲在num+1和num+2中,比較num與num+2大小,相等則判定為回文數(shù),調(diào)用DOS功能將計數(shù)值輸出在屏幕上;不相等則回到(a)繼續(xù)循環(huán),直到變量等于500為止。</p><p> 2.2 程序段落說明</p>
14、<p> 2.2.1程序定義段</p><p> 程序定義段要定義數(shù)據(jù)段、堆棧段、代碼段。定義數(shù)據(jù)段堆棧段、數(shù)據(jù)段、代碼段并不復雜,參照課本上定義方法即可。不同的是在數(shù)據(jù)段的的定義中,需要多次定義提示輸入輸出的語句,在下續(xù)編程過程中直接引用,同時,定義數(shù)據(jù)區(qū),定義堆棧段和代碼段的程序直接參考課本即可。</p><p> 定義段具體程序見附錄</p><
15、;p> 2.2.3字符輸入輸出程序設計</p><p> 字符輸入輸出要運用DOS功能調(diào)用,DOS調(diào)用過程如下:</p><p> ?。?)將DOS調(diào)用功能號送入AH;</p><p> (2)如有需要,按要求給定輸入?yún)?shù);</p><p> 寫入中斷指令“INT 21H”。</p><p> 輸出多字
16、符提示語句,可用</p><p><b> MOV AH,9</b></p><p><b> INT 21H</b></p><p> 本程序設計每行輸出7個回文數(shù),摘取具體程序段如下:</p><p><b> ·····
17、83; </b></p><p> MOV DX,OFFSET num</p><p> MOV AH,9INT 21HINC shu ; 定義變量‘shu’加1MOV DX,0007HAND DX,shuCMP DX,0007HJNE LOP
18、 ; 當shu累計到7時換行MOV DX,OFFSET num</p><p> MOV AH,9INT 21HLOP:INC BX</p><p><b> ······</b></p><p> 2.2.3回文數(shù)判定程序設計</p><p&g
19、t; 先定義循環(huán)次數(shù)及給變量賦予初始值</p><p> MOV CX,500</p><p> MOV BX,0執(zhí)行步驟(a)的程序段</p><p> NEXT:CMP BX,10 JAE CONT1 ;于10事轉(zhuǎn)移到CONT1 MOV AX,BX
20、 ADD AX,0030H ;換為ASCII碼 MOV RESU,0 ;位賦值 MOV RESU+1,0 ;位賦值 MOV RESU+2,AL ;位賦值 JMP DISP步驟(b)的程序段</p><p> C
21、ONT1: CMP BX,100 JAE CONT2 ;于100時轉(zhuǎn)移到CONT2MOV AX,BXMOV DL,10DIV DLADD AX,3030H ;十位與個位轉(zhuǎn)換成ascii碼CMP AH,ALJNE LOP ;相等轉(zhuǎn)移到LOPMOV
22、RESU,0MOV RESU+1,ALMOV RESU+2,AHJMP DISP步驟(c)的程序段</p><p> CONT2: MOV AX,BX MOV DL,10 DIV DL ADD AH,30H MOV RESU+2,AH ;個位賦值
23、 MOV AH,0 ;將AH高四位清零 DIV DL ADD AH,30H MOV RESU+1,AH ADD AL,30H MOV RESU,AL CMP AL,RESU+2 JNE LOP</p&g
24、t;<p><b> 循環(huán)段程序段</b></p><p> LOP:INC BX ;變量加1 LOOP NEXT ;執(zhí)行循環(huán)</p><p> 上述程序段執(zhí)行后,計算機能找到0到500以內(nèi)的回文數(shù)并且將字符所在位置的值轉(zhuǎn)換為ASCII值,輸出在屏幕上。</p>
25、<p> 2.2.4 程序結(jié)束程序段</p><p> 調(diào)用DOS功能,程序段如下:</p><p> MOV AH,4CH</p><p> INT 21H ;退出程序</p><p><b> 3 程序調(diào)試及結(jié)果</b></p>
26、<p> 程序調(diào)試在MF2KI集成環(huán)境中進行,輸入要調(diào)試程序,點擊“匯編”,若程序無錯誤,點擊“連接”、“運行”,看結(jié)果是否正確;若點擊“匯編”后出現(xiàn)錯誤,說明程序語句寫錯或者語句用錯,修改直至正確。程序運行時往往不是一次就能得出正確的結(jié)果,需要多次修改,反復調(diào)試,才能得出正確結(jié)果.</p><p><b> 圖二 程序結(jié)果顯示</b></p><p>
27、;<b> 小結(jié)及體會</b></p><p> 此次課程歷時一個班星期,但由于之前準備考試,并沒有花太多時間在它上面,在加上自己對匯編語言程序設計并不是很熟悉,以至于在后來時間比較緊,設計時也遇到了不少的困難。</p><p> 總的來說,這個程序的設計思路并不是很復雜,其中的字符轉(zhuǎn)換和查找部分的算法都不是很難,屬于基礎的程序設計。設計程序時,我參考的課本上的
28、程序?qū)⒆址D(zhuǎn)換部分設計出來了,相當于程序完成了一半,本以為可以很快的把那個程序設計出來,在判定三位數(shù)的數(shù)字是否為回文數(shù)時,沒有將第一次除以10后存儲余數(shù)的AH清零,導致程序得不得正確的結(jié)果,后來雖然知道問題在哪里,但是還是花了很多時間才順利解決問題。程序的退出處也遇到了困難,退出程序段的位置放置出現(xiàn)錯誤,以至于沒有完成要求就退出程序,最終用JMP指令解決問題。</p><p> 程序設計整個課程設計中的大部分時
29、間,接下來的工作就比較簡單了,通過此次課程設計,讓我對匯編語言程序編寫有了更深的認識,對繪制程序流程圖,算法的實現(xiàn)有了更深的感悟,這些收獲不止可以運用到匯編語言設計中,對于其他語言的程序設計也有很大的幫助。匯編語言與我們的日常思維習慣有很大差別,剛開始接觸時難免會遇到很多困難,這就需要我們靜下心來慢慢分析,多次修改、調(diào)試后,最終都會出現(xiàn)正確的答案。在修改的過程會使我們對指令越來越熟悉,也培養(yǎng)了我們獨立思考、解決問題的能力。</p&
30、gt;<p><b> 參考文獻</b></p><p> [1] 彭虎等編著.微機原理與接口技術(shù)(第二版).北京:電子工業(yè)出版社,2008 </p><p> [2]沈美明,溫東禪.IBM-PC匯編語句程序設計(第2版).北京:清華大學出版社,2001 </p><p> [3]任向明,盧惠林.匯編語言程序設計實用教程.
31、北京:清華大學出版社,2009 </p><p> [4]馬力妮.80x86匯編語言程序設計.北京:機械工業(yè)出版社,2004 </p><p> [5]曹加恒,蘇光奎,許先斌.新一代匯編語言程序設計.北京:高等教育出版社,2003 </p><p><b> 附錄 </b></p><p> DATASEG
32、MENT</p><p> NUM DW 0 </p><p> RESUDB 0,0,0,0,0,'$' </p><p> RETU DB 0AH,0DH,'$' </p><p> DATA
33、ENDS ;數(shù)據(jù)段定義</p><p> STACK1SEGMENT PARA STACK</p><p> DW 20H DUP(?)</p><p> STACK1ENDS ;堆棧段定義</p><p>
34、 CODESEGMENT ;代碼段定義</p><p> ASSUME DS:DATA,SS:STACK1,CS:CODE</p><p> START:MOV AX,DATA </p><p> MOV DS,AX ;初始化</p&
35、gt;<p> MOV CX,500 ;定義循環(huán)次數(shù)為500次</p><p> MOV BX,0 ;賦初始值為0</p><p> NEXT:CMP BX,10</p><p> JAE CONT1
36、 ;大于10則跳轉(zhuǎn)</p><p><b> MOV AX,BX</b></p><p> ADD AX,0030H ;轉(zhuǎn)換為ASCII碼</p><p> MOV RESU,0 ;百位賦值</p><p> MOV
37、 RESU+1,0 ;十位賦值</p><p> MOV RESU+2,AL ;個位賦值</p><p> JMP DISP ;輸出該數(shù)</p><p> CONT1:CMP BX,100 </p><p>
38、JAE CONT2 ;大于等于100則跳轉(zhuǎn)</p><p><b> MOV AX,BX</b></p><p> MOV DL,10 ;變量除以10</p><p><b> DIV DL</b></p&g
39、t;<p> ADD AX,3030H ;十位與個位都轉(zhuǎn)換為ASCII碼</p><p><b> CMP AH,AL</b></p><p> JNE LOP ;不相等則轉(zhuǎn)到LOP</p><p> MOV RESU,0</p
40、><p> MOV RESU+1,AL</p><p> MOV RESU+2,AH</p><p> JMP DISP ;輸出該數(shù)</p><p> CONT2: MOV AX,BX</p><p><b> MOV DL,10</b><
41、;/p><p> DIV DL ;變量除以10</p><p> ADD AH,30H ;余數(shù)轉(zhuǎn)為ASCII碼</p><p> MOV RESU+2,AH </p><p> MOV AH,0
42、 ;將AH清零</p><p> DIV DL ;商除以10</p><p> ADD AH,30H</p><p> MOV RESU+1,AH ;十位賦值</p><p> ADD AL,30H</p><p>
43、; MOV RESU,AL ;個位賦值</p><p> CMP AL, RESU+2</p><p> JNE LOP ;不相等則轉(zhuǎn)到LOP</p><p> DISP:MOV DX,OFFSET RESU ;取該數(shù)的內(nèi)存地址
44、</p><p><b> MOV AH,9</b></p><p><b> INT 21H</b></p><p> INC NUM ;變量累加1</p><p> MOV DX,0007H</p><p>
45、AND DX,NUM</p><p> CMP DX,0007H</p><p> JNE LOP ;累計到10個數(shù)換行</p><p> MOV DX,OFFSET RETU</p><p><b> MOV AH,9</b></p>&
46、lt;p><b> INT 21H</b></p><p> LOP:INC BX ;變量加1</p><p> LOOP NEXT ;返回</p><p> MOV AH,4CH</p><p>&l
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論