版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、- -.- - 可修編-. - - - 可修編-匯編語言課程設(shè)計報告( 2011 - 2012 年度第 2 學(xué)期)實現(xiàn)加減乘除四則運算的計算器專業(yè)計算機科學(xué)與技術(shù)學(xué)生班級*指導(dǎo)教師完成日期- -. - -目 錄 TOC o 1-5 h z u HYPERLINK l _Toc328209478目錄 PAGEREF _Toc328209478 h 2HYPERLINK l _Toc3282094791 概述 PAGEREF _Toc328209479 h 1HYPERLINK l _Toc3282094801.1 設(shè)計目的 PAGEREF _Toc328209480 h 1HYPERLINK l
2、 _Toc3282094811.2 設(shè)計容 PAGEREF _Toc328209481 h 1HYPERLINK l _Toc3282094822 系統(tǒng)需求分析 PAGEREF _Toc328209482 h1HYPERLINK l _Toc3282094832.1 系統(tǒng)目標(biāo) PAGEREF _Toc328209483 h 1HYPERLINK l _Toc3282094842.2 主體功能 PAGEREF _Toc328209484 h 1HYPERLINK l _Toc3282094852.3 開發(fā)環(huán)境 PAGEREF _Toc328209485 h 1HYPERLINK l _Toc32
3、82094863 系統(tǒng)概要設(shè)計 PAGEREF _Toc328209486 h 2HYPERLINK l _Toc3282094873.1 系統(tǒng)的功能模塊劃分 PAGEREF _Toc328209487 h 2HYPERLINK l _Toc3282094883.2 系統(tǒng)流程圖 PAGEREF _Toc328209488 h 3HYPERLINK l _Toc3282094894系統(tǒng)詳細(xì)設(shè)計 PAGEREF _Toc328209489 h 3HYPERLINK l _Toc3282094905測試 PAGEREF _Toc328209490 h 4HYPERLINK l _Toc3282094
4、915.1 測試方案 PAGEREF _Toc328209491 h 4HYPERLINK l _Toc3282094925.2 測試結(jié)果 PAGEREF _Toc328209492 h 4HYPERLINK l _Toc3282094936 小結(jié) PAGEREF _Toc328209493 h 5HYPERLINK l _Toc328209494參考文獻(xiàn) PAGEREF _Toc328209494 h 6HYPERLINK l _Toc328209495附錄 PAGEREF _Toc328209495 h 7HYPERLINK l _Toc328209496附錄源程序清單 PAGEREF _
5、Toc328209496 h 7. 實現(xiàn)加減乘除四則運算的計算器1 概 述1.1 設(shè)計目的本課程設(shè)計是在學(xué)完教學(xué)大綱規(guī)定的全部容、完成所有實踐環(huán)節(jié)的根底上,旨在深化學(xué)生學(xué)習(xí)的匯編語言課程根本知識,進(jìn)一步掌握匯編語言程序設(shè)計方法,提高分析問題、解決問題的綜合應(yīng)用能力。1.2 設(shè)計容能實現(xiàn)加、減、乘、除的計算;該程序承受的是16進(jìn)制數(shù);執(zhí)行時,需要在文件名后直接跟上計算表達(dá)式,如在命令提示符下執(zhí)行結(jié)果如下:c:tasmjs 3+252 系統(tǒng)需求分析2.1 系統(tǒng)目標(biāo)本次匯編語言課程設(shè)計的最終目的是要實現(xiàn)一個簡單加減乘除四則運算的計算器,要求編寫一個程序,每運行一次可執(zhí)行程序,可以實現(xiàn)數(shù)的加減乘除四則
6、運算。比方,十進(jìn)制數(shù)的加減乘除四則運算。我們曾經(jīng)學(xué)習(xí)過兩個具體數(shù)字進(jìn)展加減法運算,但是對于簡單計算器用匯編語言實現(xiàn)難點在于這兩個要做運算的數(shù)是未知的,是由自己調(diào)用中斷輸入到屏幕上并要用程序存儲起來的數(shù),然后才能對這兩個數(shù)進(jìn)展運算,而且做的是加法運算、減法運算乘法運算還是除法運算也未可知,為此我們還要判斷用戶所輸入的運算是四則運算中的哪一個運算。此外,運算過程中的進(jìn)位或是借位,選擇用什么樣的方式進(jìn)展輸出,如何實現(xiàn)清屏等也是要解決的問題。2.2 主體功能系統(tǒng)分析主要包括設(shè)計的功能分析和系統(tǒng)的流程,功能分析放在首位,每一個軟件都要能滿足一定的功能才有使用價值。根據(jù)功能需求來創(chuàng)立應(yīng)用程序。本設(shè)計的功能
7、如下: 1、輸入2個數(shù),先判斷是加減運算還是乘除運算,再進(jìn)展計算 2、判斷符號是否為運算符 3、回車為換行符 4、用十進(jìn)制或十六進(jìn)制輸出運算結(jié)果2.3 開發(fā)環(huán)境TASM5.0集成環(huán)境3 系統(tǒng)概要設(shè)計3.1 系統(tǒng)的功能模塊劃分此題目實現(xiàn)的模塊圖如圖3-1所示四則運算計算器程序設(shè)計界面設(shè)置選擇算法設(shè)置十進(jìn)制轉(zhuǎn)換設(shè)置圖3-1 概要模塊界面設(shè)置主要實現(xiàn)確定界面樣式的功能,以菜單形式顯示。選擇算法設(shè)置 用于選擇加、減、乘、除法來進(jìn)展運算。十進(jìn)制轉(zhuǎn)換設(shè)置 應(yīng)用十進(jìn)制的轉(zhuǎn)換算法來處理加、減、乘、除法四則運算。3.2 系統(tǒng)流程圖輸入選擇鍵*=1“*=2“*=3“*=4“十六進(jìn)制加法十六進(jìn)制減法十六進(jìn)制乘法十六
8、進(jìn)制除法提示出錯!*=0“?是是是否是否否否否*=Y/y “?否是是開 始結(jié) 束圖3.2.1四則運算計算器執(zhí)行過程流程圖4系統(tǒng)詳細(xì)設(shè)計4.1 界面設(shè)置 通過定義數(shù)據(jù)段,利用09H顯示出功能列表。通過定義數(shù)據(jù)段,以字符串的形式輸入每個提示信息,利用09H鍵盤輸入并回顯命令顯示每一個功能提示,是計算器的功能列表有序清晰的顯示在屏幕上。4.2 選擇算法設(shè)置首先選擇要進(jìn)展的四則運算,假設(shè)選擇1,則進(jìn)展加法;假設(shè)選擇2,則進(jìn)展減法;假設(shè)選擇3,則進(jìn)展乘法;假設(shè)選擇4,則進(jìn)展除法。加法:先輸入第一個小于4位十六進(jìn)制數(shù)存入SI中,在輸入第二個小于4位十六進(jìn)制數(shù)存入B*中,然后顯示B* 和SI中的容相加存在B
9、*中。減法:先輸入第一個小于4位十六進(jìn)制數(shù)存入SI中,在輸入第二個小于4位十六進(jìn)制數(shù)存入B*中,然后顯示B* 和SI中的容相減存在B*中,然后用NEG來求反,即為第一個數(shù)減去第二個數(shù)的差,顯示B*的容即為差。乘法:先輸入第一個小于4位十六進(jìn)制數(shù)存入SI中,在輸入第二個小于4位十六進(jìn)制數(shù)存入B*中,把B*的值給A*,然后讓A*乘以SI,然后再分別將D*,A*中的容賦給B*,接著依次顯示D*,A*的容,即為積。除法:先輸入第一個小于4位十六進(jìn)制數(shù)存入SI中,在輸入第二個小于4位十六進(jìn)制數(shù)存入B*中,將SI賦給A*作被除數(shù),讓B*作除數(shù),得到的商存放在A*中,余數(shù)放在D*中,然后依次賦給B*,將其依
10、次顯示即為商。4.3 十進(jìn)制轉(zhuǎn)換設(shè)置 要完成十進(jìn)制轉(zhuǎn)換成十六,一般采用除十六取余法來完成,其大致過程如下:將待轉(zhuǎn)換的數(shù)除以16得到第一個商和余數(shù),此第一個余數(shù)就是所求的十六進(jìn)制數(shù)的各位,再用第一個商除以16,得到第二個商和余數(shù),此第二個余數(shù)就是所求十六進(jìn)制數(shù)的十位,重復(fù)這一過程直至商為0,此時的余數(shù)就是所求十六進(jìn)制數(shù)的最高位。在存中分配一緩沖區(qū),用來存放以上別離出來的使十進(jìn)制數(shù)的每一位,然后再逐個轉(zhuǎn)換成ASCII碼,轉(zhuǎn)換成ASCII碼的過程很簡單,就是給每個十六進(jìn)制位加上30H即可,最后送顯示器輸出。5 測試5.1 測試方案對程序源代碼進(jìn)展功能調(diào)試和功能驗證。程序代碼運行成功后,分別檢驗測試其
11、加、減、乘、除功能,并對結(jié)果進(jìn)展分析。當(dāng)用戶選擇0時,輸入Y或N決定是否退出程序。5.2 測試結(jié)果輸入數(shù)字進(jìn)展加減乘除運算,計算結(jié)果如下列圖所示:圖5.2.1 計算結(jié)果測試完畢后,退出程序,如下列圖所示:圖5.2.2 退出程序6 小結(jié)程序的主要功能是實現(xiàn)四則運算,整個程序中主要分為,輸入算式,加法,減法,乘法,除法和以十進(jìn)制顯示結(jié)果這幾個局部。本程序根本實現(xiàn)了四則運算的功能,但還沒能實現(xiàn)帶有括號的四則運算,還有在除法運算中不能運算較大的數(shù),會產(chǎn)生溢出現(xiàn)象。一開場的時候自己編出來的程序有很多問題,尤其是在循環(huán)程序上,因此查閱了不少資料,也請教了好幾個同學(xué)幫著修改,調(diào)試了好久才能正常運行。由于能力
12、有限,程序還是有不完美的地方。這次的綜合實驗讓我對匯編有了更深刻的認(rèn)識,對各種指令有了進(jìn)一步的理解。. 參考文獻(xiàn)1其明.匯編語言程序設(shè)計教程. :中國礦業(yè)大學(xué), 2010.11. 附 錄附錄 源程序清單IN16 MACRO ;完成從鍵盤承受二個數(shù)并轉(zhuǎn)換為十六制數(shù),第一個數(shù)由SI指向,第二個數(shù)存放在B*中 LEA D*,PR ;D*指向PR換行CALL OUTPUT ;LEA D*,INPUT1 ;D*指向INPUT1,提示輸入第一個數(shù)CALL OUTPUT CALL INPUT ;把輸入的數(shù)存放在B*中LEA SI,RESULT ;SI指向RESULTMOV SI,B* ;把第一個十六制數(shù)存入
13、RESULT的第一個位置LEA D*,PR ;D*指向PR,換行CALL OUTPUT LEA D*,INPUT2 ;D*指向INPUT2,提示輸入第一個數(shù)CALL OUTPUT CALL INPUT ;把輸入的數(shù)存放在B*中ENDM ;宏完畢DATA SEGMENT ;數(shù)據(jù)段BUF DB ,0DH,0AHDB * WELE TO CALCULATOR SYSTEM *,0DH,0AHDB *1:ADD-2:SUB-3:MUL-4:DIV-0:QUIT*,0DH,0AHDB * 2011*6*21*,0DH,0AHDB 0DH,0AH,Please input the choose numbe
14、r:,$ INPUT1 DB Please input the first number *iao yu 4 wei:,$INPUT2 DB Please input the second number *iao yu 4 wei:,$RESULT DW “,“ ;存放鍵盤輸入的兩個十六制數(shù)WRO DB You input the number is wrong,please input again:,0DH,0AH,$; PR DB 0DH,0AH,$ ;將光標(biāo)移到下一行起始位置PR1 DB A + B=$PR2 DB A - B=$PR3 DB A * B=$PR4 DB A / B=$P
15、R5 DB $PR6 DB Are you sure e*it“(Y/N)$ DATA ENDS ;數(shù)據(jù)段落定義完畢CODE SEGMENTMAIN PROC FAR ;主函數(shù)ASSUME CS:CODE ,DS:DATASTART:MOV A*,DATAMOV DS,A*LEA D*,BUF ;D*指向BUF換行CALL OUTPUT ;調(diào)用顯示字符串函數(shù)換行SUB A*,A* ;A*清零CALL CHOOSE ;調(diào)用選擇函數(shù)JMP START ;跳轉(zhuǎn)到STARTRET MAIN ENDPINPUT PROC NEAR ;定義INPUT函數(shù),就是將從鍵盤輸入的數(shù)按原十六進(jìn)制數(shù)存放在B*中MO
16、V B*,0 ;B*清零NEWCHAR:MOV AH,1 INT 21H ;承受鍵盤輸入一個字符CMP AL,0DH ;輸入的字符與回車比擬JE E*IT ;是回車就完畢 CMP AL,A ;與A比擬JAE H0 ;大于等于就跳轉(zhuǎn)到H0 CMP AL,0 ;與0比擬JAE H1 ;大于等于就跳轉(zhuǎn)到H1 H0:SUB AL,37H ;由于41-A=37,完成把字母字符轉(zhuǎn)換成對應(yīng)的十六進(jìn)制數(shù)JMP ADDTO ;跳轉(zhuǎn)到ADDTOH1:SUB AL,30H ;把0到9的字符轉(zhuǎn)換成對應(yīng)的十六進(jìn)制數(shù)JMP ADDTO ;跳轉(zhuǎn)到ADDTO ADDTO: MOV CL,4 ;相當(dāng)于讓B*乘以16SHL B*
17、,CL ;將B*邏輯左移MOV AH,0 ;將A*清零ADD B*,A* ;A*+B*送到B*JMP NEWCHAR ;跳轉(zhuǎn)到NEWCHAR,把第二個輸入的字符存放到B*的第二位E*IT: RETINPUT ENDPOUTPUT PROC NEAR ;顯示字符串函數(shù)MOV AH,09HINT 21HRETOUTPUT ENDPCHOOSE PROC NEAR ;選擇函數(shù)MOV AH,1 ;從鍵盤承受一個數(shù)INT 21HCMP AL,1 ;與1比擬JE YES1 ;等于1就跳轉(zhuǎn)到Y(jié)ES1,進(jìn)展加法CMP AL,2 ;與1比擬JE YES2 ;等于2就跳轉(zhuǎn)到Y(jié)ES2,進(jìn)展減法CMP AL,3 ;與
18、1比擬 JE YES3 ;等于3就跳轉(zhuǎn)到Y(jié)ES2,進(jìn)展乘法CMP AL,4 ;與1比擬JE YES4 ;等于4就跳轉(zhuǎn)到Y(jié)ES2,進(jìn)展除法CMP AL,0 ;與0比擬JE E*IT1 ;等于4就跳轉(zhuǎn)到E*IT1,完畢程序CALL WRONG ;如果不是0到4之間的數(shù)就提示出錯E*IT1: LEA D*,PR ;D*指向PR換行CALL OUTPUT LEA D*,PR6 ;D*指向PR6,確認(rèn)是否退出CALL OUTPUT MOV AH,1 ;從鍵盤承受一個數(shù)INT 21HCMP AL,Y ;與Y比擬JE E*IT0 ;不是Y就看是否為yCMP AL,y ;與y比擬JNE START ;不是y就
19、跳轉(zhuǎn)到STARTE*IT0:MOV AH,4CH ;完畢本程序INT 21HYES1:CALL JIA ;調(diào)用JIA函數(shù)JMP START ;調(diào)用完之后跳轉(zhuǎn)到STARTYES2:CALL JIAN ;調(diào)用JIAN函數(shù)JMP START ;調(diào)用完之后跳轉(zhuǎn)到STARTYES3:CALL CHENG ;調(diào)用CHENG函數(shù)JMP START ;調(diào)用完之后跳轉(zhuǎn)到STARTYES4:CALL CHU ;調(diào)用CHU函數(shù)RET CHOOSE ENDP ;選擇函數(shù)完畢WRONG PROC NEAR ;報錯函數(shù)LEA D*,PR ;D*指向PR換行LEA D*,WRO ;D*指向WRO,提示輸入有錯,請重新輸入J
20、MP START ;跳轉(zhuǎn)到STARTRET WRONG ENDP ;報錯函數(shù)完畢JIA PROC NEAR ;加法函數(shù)IN16 ;調(diào)用宏,承受鍵盤輸入的兩個十六進(jìn)制數(shù),第一個數(shù)由SI指向,第二個數(shù)存放在B*中 ADD B*,SI ;把第一個數(shù)加第二個數(shù)存放到B*中LEA D*,PR ;D*指向PR,換行CALL OUTPUT LEA D*,PR1 ;D*指向PR1,顯示A + B=CALL OUTPUT CALL OUTB* ;調(diào)用顯示B*存放器的容函數(shù)RETJIA ENDP ;加法完畢JIAN PROC NEAR ;減法函數(shù)IN16 ;調(diào)用宏,承受鍵盤輸入的兩個十六進(jìn)制數(shù),第一個數(shù)由SI指向
21、,第二個數(shù)存放在B*中 SUB B*,SI ;第二個數(shù)減第一個數(shù),結(jié)果存放到B*中NEG B* ;對結(jié)果取反后才是A-B的值,才是第一個數(shù)減去第二個數(shù)LEA D*,PR ;D*指向PR,換行CALL OUTPUT LEA D*,PR2 ;D*指向PR2,顯示A - B=CALL OUTPUT CALL OUTB* ;調(diào)用顯示B*存放器的容RETJIAN ENDP ;加法函數(shù)完畢CHENG PROC NEAR ;乘法函數(shù)IN16 ;調(diào)用宏,承受鍵盤輸入的兩個十六進(jìn)制數(shù),第一個數(shù)由SI指向,第二個數(shù)存放在B*中 MOV D*,0 ;把D*清零MOV A*,B* ;把第二個數(shù)賦給A* MUL WOR
22、D PTRSI ;A*乘SI并把結(jié)果存放到D*,A*中,是字的操作MOV B*,A* ;將A*賦給B*PUSH B* ;將B*壓棧,顯示下面D*的容時要將D*的值賦給B*PUSH D* ;將D*壓棧,因為下面要換行輸出,會改變D*的值LEA D*,PR ;D*指向PR,換行輸出CALL OUTPUT LEA D*,PR3 ;D*指向PR3,顯示A * B=CALL OUTPUT POP D* ;將D*出棧,要將做乘法后D*的容顯示出來MOV B*,D* ;把D*給B*CALL OUTB* ;顯示D*的容POP B* ;將B*出棧CALL OUTB* ;顯示A*的容RETCHENG ENDP ;乘法函數(shù)完畢CHU PROC NEAR ;除法函數(shù)IN16 ;調(diào)用宏,承受鍵盤輸入的兩個十六進(jìn)制數(shù),第一個
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 分離操作(教案)
- 稀土沸石抗菌吸附衛(wèi)生尿褲(征求意見稿)
- 中小學(xué)冬至傳統(tǒng)節(jié)日主題班會教案
- 上海市縣(2024年-2025年小學(xué)五年級語文)統(tǒng)編版期末考試((上下)學(xué)期)試卷及答案
- 九年級化學(xué)上冊全冊教案
- 衛(wèi)生行業(yè)信息管理系統(tǒng)調(diào)查表
- 河北省石家莊市2025屆高三教學(xué)質(zhì)量摸底檢測生物試題(含答案)
- 職業(yè)學(xué)院海洋工程技術(shù)專業(yè)人才培養(yǎng)方案
- 醫(yī)用眼罩市場發(fā)展預(yù)測和趨勢分析
- 光學(xué)字符識別裝置市場需求與消費特點分析
- 工作崗位存在的危險因素及防范措施
- vsd負(fù)壓吸引術(shù)護(hù)理查房
- 傳統(tǒng)節(jié)氣《冬至》課件
- 有多少粘貼畫教學(xué)設(shè)計朱菊芬
- 學(xué)會合理消費
- 智能機器人焊接
- 高三一本“臨界生”動員會課件
- 銷售人員如何列名單與分析名單
- 家長會課件:四年級家長會語文老師課件
- 大客戶戰(zhàn)略:大客戶全生命周期管理
- 康得新財務(wù)審計案例分析
評論
0/150
提交評論