




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
資料內容僅供您學習參考,如有不當之處,請聯(lián)系改正或者刪除。匯編語言課程設計報告(--年度第2學期)實現(xiàn)加減乘除四則運算的計算器專業(yè)計算機科學與技術學生姓名班級學號指導教師完成日期目錄TOC\o"1-5"\h\z\u目錄 21概述 11.1設計目的 11.2設計內容 12系統(tǒng)需求分析 12.1系統(tǒng)目標 12.2主體功能 12.3開發(fā)環(huán)境 13系統(tǒng)概要設計 23.1系統(tǒng)的功能模塊劃分 23.2系統(tǒng)流程圖 34系統(tǒng)詳細設計 35測試 45.1測試方案 45.2測試結果 46小結 5參考文獻 6附錄 7附錄源程序清單 7實現(xiàn)加減乘除四則運算的計算器1概述1.1設計目的本課程設計是在學完教學大綱規(guī)定的全部內容、完成所有實踐環(huán)節(jié)的基礎上,旨在深化學生學習的匯編語言課程基本知識,進一步掌握匯編語言程序設計方法,提高分析問題、解決問題的綜合應用能力。1.2設計內容能實現(xiàn)加、減、乘、除的計算;該程序接受的是16進制數(shù);執(zhí)行時,需要在文件名后直接跟上計算表示式,如在命令提示符下執(zhí)行結果如下:c:\tasm>js3+252系統(tǒng)需求分析2.1系統(tǒng)目標本次匯編語言課程設計的最終目的是要實現(xiàn)一個簡單加減乘除四則運算的計算器,要求編寫一個程序,每運行一次可執(zhí)行程序,能夠實現(xiàn)數(shù)的加減乘除四則運算。比如,十進制數(shù)的加減乘除四則運算。我們曾經學習過兩個具體數(shù)字進行加減法運算,可是對于簡單計算器用匯編語言實現(xiàn)難點在于這兩個要做運算的數(shù)是未知的,是由自己調用中斷輸入到屏幕上并要用程序存儲起來的數(shù),然后才能對這兩個數(shù)進行運算,而且做的是加法運算、減法運算乘法運算還是除法運算也未可知,為此我們還要判斷用戶所輸入的運算是四則運算中的哪一個運算。另外,運算過程中的進位或是借位,選擇用什么樣的方式進行輸出,如何實現(xiàn)清屏等也是要解決的問題。2.2主體功能系統(tǒng)分析主要包括設計的功能分析和系統(tǒng)的流程,功能分析放在首位,每一個軟件都要能滿足一定的功能才有使用價值。根據(jù)功能需求來創(chuàng)立應用程序。本設計的功能如下:1、輸入2個數(shù),先判斷是加減運算還是乘除運算,再進行計算2、判斷符號是否為運算符3、回車為換行符4、用十進制或十六進制輸出運算結果2.3開發(fā)環(huán)境TASM5.0集成環(huán)境3系統(tǒng)概要設計3.1系統(tǒng)的功能模塊劃分本題目實現(xiàn)的模塊圖如圖3-1所示四則運算計算器程序設計四則運算計算器程序設計界面設置選擇算法設置十進制轉換設置圖3-1概要模塊界面設置主要實現(xiàn)確定界面樣式的功能,以菜單形式顯示。選擇算法設置用于選擇加、減、乘、除法來進行運算。十進制轉換設置應用十進制的轉換算法來處理加、減、乘、除法四則運算。3.2系統(tǒng)流程圖輸入選擇鍵x輸入選擇鍵xX=1?X=2?X=3?X=4?十六進制加法十六進制減法十六進制乘法十六進制除法提示出錯!X=0???是是是否是否否否否X=Y/y???否是是開始結束圖3.2.1四則運算計算器執(zhí)行過程流程圖4系統(tǒng)詳細設計4.1界面設置經過定義數(shù)據(jù)段,利用09H顯示出功能列表。經過定義數(shù)據(jù)段,以字符串的形式輸入每個提示信息,利用09H鍵盤輸入并回顯命令顯示每一個功能提示,是計算器的功能列表有序清晰的顯示在屏幕上。4.2選擇算法設置首先選擇要進行的四則運算,若選擇1,則進行加法;若選擇2,則進行減法;若選擇3,則進行乘法;若選擇4,則進行除法。加法:先輸入第一個小于4位十六進制數(shù)存入SI中,在輸入第二個小于4位十六進制數(shù)存入BX中,然后顯示BX和[SI]中的內容相加存在BX中。減法:先輸入第一個小于4位十六進制數(shù)存入SI中,在輸入第二個小于4位十六進制數(shù)存入BX中,然后顯示BX和[SI]中的內容相減存在BX中,然后用NEG來求反,即為第一個數(shù)減去第二個數(shù)的差,顯示BX的內容即為差。乘法:先輸入第一個小于4位十六進制數(shù)存入SI中,在輸入第二個小于4位十六進制數(shù)存入BX中,把BX的值給AX,然后讓AX乘以[SI],然后再分別將DX,AX中的內容賦給BX,接著依次顯示DX,AX的內容,即為積。除法:先輸入第一個小于4位十六進制數(shù)存入SI中,在輸入第二個小于4位十六進制數(shù)存入BX中,將[SI]賦給AX作被除數(shù),讓BX作除數(shù),得到的商存放在AX中,余數(shù)放在DX中,然后依次賦給BX,將其依次顯示即為商。4.3十進制轉換設置要完成十進制轉換成十六,一般采用除十六取余法來完成,其大致過程如下:將待轉換的數(shù)除以16得到第一個商和余數(shù),此第一個余數(shù)就是所求的十六進制數(shù)的各位,再用第一個商除以16,得到第二個商和余數(shù),此第二個余數(shù)就是所求十六進制數(shù)的十位,重復這一過程直至商為0,此時的余數(shù)就是所求十六進制數(shù)的最高位。在內存中分配一緩沖區(qū),用來存放以上分離出來的使十進制數(shù)的每一位,然后再逐個轉換成ASCII碼,轉換成ASCII碼的過程很簡單,就是給每個十六進制位加上30H即可,最后送顯示器輸出。5測試5.1測試方案對程序源代碼進行功能調試和功能驗證。程序代碼運行成功后,分別檢驗測試其加、減、乘、除功能,并對結果進行分析。當用戶選擇0時,輸入Y或N決定是否退出程序。5.2測試結果輸入數(shù)字進行加減乘除運算,計算結果如下圖所示:圖5.2.1計算結果測試結束后,退出程序,如下圖所示:圖5.2.2退出程序6小結程序的主要功能是實現(xiàn)四則運算,整個程序中主要分為,輸入算式,加法,減法,乘法,除法和以十進制顯示結果這幾個部分。本程序基本實現(xiàn)了四則運算的功能,但還沒能實現(xiàn)帶有括號的四則運算,還有在除法運算中不能運算較大的數(shù),會產生溢出現(xiàn)象。一開始的時候自己編出來的程序有很多問題,特別是在循環(huán)程序上,因此查閱了不少資料,也請教了好幾個同學幫著修改,調試了好久才能正常運行。由于能力有限,程序還是有不完美的地方。這次的綜合實驗讓我對匯編有了更深刻的認識,對各種指令有了進一步的理解。參考文獻[1]劉其明.匯編語言程序設計教程.徐州:中國礦業(yè)大學出版社,.11附錄附錄源程序清單IN16MACRO;完成從鍵盤接受二個數(shù)并轉換為十六制數(shù),第一個數(shù)由SI指向,第二個數(shù)存放在BX中LEADX,PR;DX指向PR換行CALLOUTPUT;LEADX,INPUT1;DX指向INPUT1,提示輸入第一個數(shù)CALLOUTPUTCALLINPUT;把輸入的數(shù)存放在BX中LEASI,RESULT;SI指向RESULTMOV[SI],BX;把第一個十六制數(shù)存入RESULT的第一個位置LEADX,PR;DX指向PR,換行CALLOUTPUTLEADX,INPUT2;DX指向INPUT2,提示輸入第一個數(shù)CALLOUTPUTCALLINPUT;把輸入的數(shù)存放在BX中ENDM;宏結束DATASEGMENT;數(shù)據(jù)段BUFDB'',0DH,0AHDB'*WELCOMETOCALCULATORSYSTEM*',0DH,0AHDB'*1:ADD--2:SUB--3:MUL--4:DIV--0:QUIT*',0DH,0AHDB'**6*21*',0DH,0AHDB0DH,0AH,'Pleaseinputthechoosenumber:','$'INPUT1DB'Pleaseinputthefirstnumberxiaoyu4wei:','$'INPUT2DB'Pleaseinputthesecondnumberxiaoyu4wei:','$'RESULTDW?,?;存放鍵盤輸入的兩個十六制數(shù)WRODB'Youinputthenumberiswrong,pleaseinputagain:',0DH,0AH,'$';PRDB0DH,0AH,'$';將光標移到下一行起始位置PR1DB'A+B=$'PR2DB'A-B=$'PR3DB'A*B=$'PR4DB'A/B=$'PR5DB'$'PR6DB'Areyousureexit?(Y/N)$'DATAENDS;數(shù)據(jù)段落定義結束CODESEGMENTMAINPROCFAR;主函數(shù)ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEADX,BUF;DX指向BUF換行CALLOUTPUT;調用顯示字符串函數(shù)換行SUBAX,AX;AX清零CALLCHOOSE;調用選擇函數(shù)JMPSTART;跳轉到STARTRETMAINENDPINPUTPROCNEAR;定義INPUT函數(shù),就是將從鍵盤輸入的數(shù)按原十六進制數(shù)存放在BX中MOVBX,0;BX清零NEWCHAR:MOVAH,1INT21H;接受鍵盤輸入一個字符CMPAL,0DH;輸入的字符與回車比較JEEXIT;是回車就結束CMPAL,'A';與A比較JAEH0;大于等于就跳轉到H0CMPAL,'0';與0比較JAEH1;大于等于就跳轉到H1H0:SUBAL,37H;由于41-A=37,完成把字母字符轉換成對應的十六進制數(shù)JMPADDTO;跳轉到ADDTOH1:SUBAL,30H;把0到9的字符轉換成對應的十六進制數(shù)JMPADDTO;跳轉到ADDTOADDTO:MOVCL,4;相當于讓BX乘以16SHLBX,CL;將BX邏輯左移MOVAH,0;將AX清零ADDBX,AX;AX+BX送到BXJMPNEWCHAR;跳轉到NEWCHAR,把第二個輸入的字符存放到BX的第二位EXIT:RETINPUTENDPOUTPUTPROCNEAR;顯示字符串函數(shù)MOVAH,09HINT21HRETOUTPUTENDPCHOOSEPROCNEAR;選擇函數(shù)MOVAH,1;從鍵盤接受一個數(shù)INT21HCMPAL,'1';與1比較JEYES1;等于1就跳轉到YES1,進行加法CMPAL,'2';與1比較JEYES2;等于2就跳轉到YES2,進行減法CMPAL,'3';與1比較JEYES3;等于3就跳轉到YES2,進行乘法CMPAL,'4';與1比較JEYES4;等于4就跳轉到YES2,進行除法CMPAL,'0';與0比較JEEXIT1;等于4就跳轉到EXIT1,結束程序CALLWRONG;如果不是0到4之間的數(shù)就提示出錯EXIT1:LEADX,PR;DX指向PR換行CALLOUTPUTLEADX,PR6;DX指向PR6,確認是否退出CALLOUTPUTMOVAH,1;從鍵盤接受一個數(shù)INT21HCMPAL,'Y';與Y比較JEEXIT0;不是Y就看是否為yCMPAL,'y';與y比較JNESTART;不是y就跳轉到STARTEXIT0:MOVAH,4CH;結束本程序INT21HYES1:CALLJIA;調用JIA函數(shù)JMPSTART;調用完之后跳轉到STARTYES2:CALLJIAN;調用JIAN函數(shù)JMPSTART;調用完之后跳轉到STARTYES3:CALLCHENG;調用CHENG函數(shù)JMPSTART;調用完之后跳轉到STARTYES4:CALLCHU;調用CHU函數(shù)RETCHOOSEENDP;選擇函數(shù)結束WRONGPROCNEAR;報錯函數(shù)LEADX,PR;DX指向PR換行LEADX,WRO;DX指向WRO,提示輸入有錯,請重新輸入JMPSTART;跳轉到STARTRETWRONGENDP;報錯函數(shù)結束JIAPROCNEAR;加法函數(shù)IN16;調用宏,接受鍵盤輸入的兩個十六進制數(shù),第一個數(shù)由SI指向,第二個數(shù)存放在BX中ADDBX,[SI];把第一個數(shù)加第二個數(shù)存放到BX中LEADX,PR;DX指向PR,換行CALLOUTPUTLEADX,PR1;DX指向PR1,顯示‘A+B=’CALLOUTPUTCALLOUTBX;調用顯示BX寄存器的內容函數(shù)RETJIAENDP;加法結束JIANPROCNEAR;減法函數(shù)IN16;調用宏,接受鍵盤輸入的兩個十六進制數(shù),第一個數(shù)由SI指向,第二個數(shù)存放在BX中SUBBX,[SI];第二個數(shù)減第一個數(shù),結果存放到BX中NEGBX;對結果取反后才是A-B的值,才是第一個數(shù)減去第二個數(shù)LEADX,PR;DX指向PR,換行CALLOUTPUTLEADX,PR2;DX指向PR2,顯示‘A-B=’CALLOUTPUTCALLOUTBX;調用顯示BX寄存器的內容RETJIANENDP;加法函數(shù)結束CHENGPROCNEAR;乘法函數(shù)IN16;調用宏,接受鍵盤輸入的兩個十六進制數(shù),第一個數(shù)由SI指向,第二個數(shù)存放在BX中MOVDX,0;把DX清零MOVAX,BX;把第二個數(shù)賦給AXMULWORDPTR[SI];AX乘[SI]并把結果存放到DX,AX中,是字的操作MOVBX,AX;將AX賦給BXPUSHBX;將BX壓棧,顯示下面DX的內容時要將DX的值賦給BXPUSHDX;將DX壓棧,因為下面要換行輸出,會改變DX的值LEADX,PR;DX指向PR,換行輸出CALLOUTPUTLEADX,PR3;DX指向PR3,顯示‘A*B=’CALLOUTPUTPOPDX;將DX出棧,要將做乘法后DX的內容顯示出來MOVBX,DX;把DX給BXCALLOUTBX;顯示DX的內容POPBX;將BX出棧CALLOUTBX;顯示AX的內容RETCHENGENDP;乘法函數(shù)結束CHUPROCNEAR;除法函數(shù)IN16;調用宏,接受鍵盤輸入的兩個十六進制數(shù),第一個數(shù)SI指向,第二個數(shù)存放在BX中MOVAX,[SI];將第一個數(shù)賦給AXMOVDX,0;將DX清零DIVBX;AX除BX,結果存放到DX,AX,DX存放余數(shù),AX存放商PUSHDX;壓棧DXPUSHAX;壓棧AXLEADX,PR
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 調研項目課題申報書
- ny科研課題申報書
- 個人教研課題申報書
- 售后擔保合同范本
- 關于大米購銷合同范本
- 專線合作合同范本
- 創(chuàng)文宣傳合同范例
- 勞動合同范本軟件
- led貼加工合同范本
- 賣樓鋪面轉讓合同范本
- 2024版《初中物理總復習》課件
- 公安機關人民警察高級執(zhí)法資格考試試卷(附答案)
- 【UCM六輥軋機設計7600字(論文)】
- 滋補品市場洞察報告
- 《積極心理學(第3版)》復習思考題和答案(完整版)劉翔平
- 部編版中考歷史一輪復習:七年級上、下冊歷史復習課件534張
- 江蘇省無錫市惠山區(qū)2024年統(tǒng)編版小升初考試語文試卷(含答案解析)
- 五年級下冊英語作文訓練-外研版(三起)
- 7.2.1 圓柱(課件含動畫演示)-【中職】高一數(shù)學(高教版2021基礎模塊下冊)
- 租房協(xié)議書合同范本可下載
- 《義務教育數(shù)學課程標準(2022年版)》測試題+答案
評論
0/150
提交評論