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