匯編語言課程設(shè)計報告實(shí)現(xiàn)加減乘除四則運(yùn)算的計算器_第1頁
匯編語言課程設(shè)計報告實(shí)現(xiàn)加減乘除四則運(yùn)算的計算器_第2頁
匯編語言課程設(shè)計報告實(shí)現(xiàn)加減乘除四則運(yùn)算的計算器_第3頁
匯編語言課程設(shè)計報告實(shí)現(xiàn)加減乘除四則運(yùn)算的計算器_第4頁
匯編語言課程設(shè)計報告實(shí)現(xiàn)加減乘除四則運(yùn)算的計算器_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、匯編語言課程設(shè)計報告( 2013 - 2014 年度第1 學(xué)期)實(shí)現(xiàn)加減乘除四則運(yùn)算的計算器專業(yè)計算機(jī)科學(xué)與技術(shù)學(xué)生姓名陳國富班級Z計算機(jī)111學(xué)號指導(dǎo)教師王志宏 完成日期 目錄1 概 述11.1 設(shè)計目的11.2 設(shè)計內(nèi)容12實(shí)現(xiàn)方法12.1 實(shí)現(xiàn)的目標(biāo)12.2 主體的功能12.3 開發(fā)的環(huán)境13 設(shè)計方法概要23.1功能模塊劃分23.2流程圖34詳細(xì)設(shè)計35 程序調(diào)試45.1 調(diào)試方案45.2 調(diào)試結(jié)果46結(jié)論5參考文獻(xiàn)6附 錄7附錄 源程序清單7實(shí)現(xiàn)加減乘除四則運(yùn)算的計算器1 概 述 1.1 設(shè)計目的本課程設(shè)計是在學(xué)完教學(xué)大綱規(guī)定的全部內(nèi)容、完成所有實(shí)踐環(huán)節(jié)的基礎(chǔ)上,旨在深化學(xué)生學(xué)習(xí)的匯

2、編語言課程基本知識,進(jìn)一步掌握匯編語言程序設(shè)計方法,提高分析問題、解決問題的綜合應(yīng)用能力。1.2 設(shè)計內(nèi)容能實(shí)現(xiàn)加、減、乘、除的計算;該程序接受的是16進(jìn)制數(shù);執(zhí)行時,需要在文件名后直接跟上計算表達(dá)式,如在命令提示符下執(zhí)行結(jié)果如下:c:tasmjs 3+25 2實(shí)現(xiàn)方法2.1 實(shí)現(xiàn)的目標(biāo)本次匯編語言課程設(shè)計的最終目的是要實(shí)現(xiàn)一個簡單加減乘除四則運(yùn)算的計算器,要求編寫一個程序,每運(yùn)行一次可執(zhí)行程序,可以實(shí)現(xiàn)數(shù)的加減乘除四則運(yùn)算。比如,十進(jìn)制數(shù)的加減乘除四則運(yùn)算。我們曾經(jīng)學(xué)習(xí)過兩個具體數(shù)字進(jìn)行加減法運(yùn)算,但是對于簡單計算器用匯編語言實(shí)現(xiàn)難點(diǎn)在于這兩個要做運(yùn)算的數(shù)是未知的,是由自己調(diào)用中斷輸入到屏幕

3、上并要用程序存儲起來的數(shù),然后才能對這兩個數(shù)進(jìn)行運(yùn)算,而且做的是加法運(yùn)算、減法運(yùn)算乘法運(yùn)算還是除法運(yùn)算也未可知,為此我們還要判斷用戶所輸入的運(yùn)算是四則運(yùn)算中的哪一個運(yùn)算。此外,運(yùn)算過程中的進(jìn)位或是借位,選擇用什么樣的方式進(jìn)行輸出,如何實(shí)現(xiàn)清屏等也是要解決的問題。2.2 主體的功能系統(tǒng)分析主要包括設(shè)計的功能分析和系統(tǒng)的流程,功能分析放在首位,每一個軟件都要能滿足一定的功能才有使用價值。根據(jù)功能需求來創(chuàng)建應(yīng)用程序。本設(shè)計的功能如下: 1、輸入2個數(shù),先判斷是加減運(yùn)算還是乘除運(yùn)算,再進(jìn)行計算 2、判斷符號是否為運(yùn)算符 3、回車為換行符 4、用十進(jìn)制或十六進(jìn)制輸出運(yùn)算結(jié)果2.3 開發(fā)的環(huán)境TASM5.

4、0集成環(huán)境3 設(shè)計方法概要3.1功能模塊劃分本題目實(shí)現(xiàn)的模塊圖如圖3-1所示四則運(yùn)算計算器程序設(shè)計界面設(shè)置選擇算法設(shè)置十進(jìn)制轉(zhuǎn)換設(shè)置圖3-1 概要模塊(1) 界面設(shè)置 主要實(shí)現(xiàn)確定界面樣式的功能,以菜單形式顯示。(2) 選擇算法設(shè)置 用于選擇加、減、乘、除法來進(jìn)行運(yùn)算。(3) 十進(jìn)制轉(zhuǎn)換設(shè)置 應(yīng)用十進(jìn)制的轉(zhuǎn)換算法來處理加、減、乘、除法四則運(yùn)算。3.2流程圖輸入選擇鍵xX=1?X=2?X=3?X=4?十六進(jìn)制加法十六進(jìn)制減法十六進(jìn)制乘法十六進(jìn)制除法提示出錯!X=0??是是是否是否否否否X=Y/y ??否是是開 始結(jié) 束圖3.2.1四則運(yùn)算計算器執(zhí)行過程流程圖4詳細(xì)設(shè)計4.1 界面設(shè)置 通過定義數(shù)

5、據(jù)段,利用09H顯示出功能列表。通過定義數(shù)據(jù)段,以字符串的形式輸入每個提示信息,利用09H鍵盤輸入并回顯命令顯示每一個功能提示,是計算器的功能列表有序清晰的顯示在屏幕上。4.2 選擇算法設(shè)置首先選擇要進(jìn)行的四則運(yùn)算,若選擇1,則進(jìn)行加法;若選擇2,則進(jìn)行減法;若選擇3,則進(jìn)行乘法;若選擇4,則進(jìn)行除法。加法:先輸入第一個小于4位十六進(jìn)制數(shù)存入SI中,在輸入第二個小于4位十六進(jìn)制數(shù)存入BX中,然后顯示BX 和SI中的內(nèi)容相加存在BX中。減法:先輸入第一個小于4位十六進(jìn)制數(shù)存入SI中,在輸入第二個小于4位十六進(jìn)制數(shù)存入BX中,然后顯示BX 和SI中的內(nèi)容相減存在BX中,然后用NEG來求反,即為第一

6、個數(shù)減去第二個數(shù)的差,顯示BX的內(nèi)容即為差。乘法:先輸入第一個小于4位十六進(jìn)制數(shù)存入SI中,在輸入第二個小于4位十六進(jìn)制數(shù)存入BX中,把BX的值給AX,然后讓AX乘以SI,然后再分別將DX,AX中的內(nèi)容賦給BX,接著依次顯示DX,AX的內(nèi)容,即為積。除法:先輸入第一個小于4位十六進(jìn)制數(shù)存入SI中,在輸入第二個小于4位十六進(jìn)制數(shù)存入BX中,將SI賦給AX作被除數(shù),讓BX作除數(shù),得到的商存放在AX中,余數(shù)放在DX中,然后依次賦給BX,將其依次顯示即為商。4.3 十進(jìn)制轉(zhuǎn)換設(shè)置 要完成十進(jìn)制轉(zhuǎn)換成十六,一般采用除十六取余法來完成,其大致過程如下:將待轉(zhuǎn)換的數(shù)除以16得到第一個商和余數(shù),此第一個余數(shù)就

7、是所求的十六進(jìn)制數(shù)的各位,再用第一個商除以16,得到第二個商和余數(shù),此第二個余數(shù)就是所求十六進(jìn)制數(shù)的十位,重復(fù)這一過程直至商為0,此時的余數(shù)就是所求十六進(jìn)制數(shù)的最高位。在內(nèi)存中分配一緩沖區(qū),用來存放以上分離出來的使十進(jìn)制數(shù)的每一位,然后再逐個轉(zhuǎn)換成ASCII碼,轉(zhuǎn)換成ASCII碼的過程很簡單,就是給每個十六進(jìn)制位加上30H即可,最后送顯示器輸出。5 程序調(diào)試5.1 調(diào)試方案對程序源代碼進(jìn)行功能調(diào)試和功能驗(yàn)證。程序代碼運(yùn)行成功后,分別檢驗(yàn)測試其加、減、乘、除功能,并對結(jié)果進(jìn)行分析。當(dāng)用戶選擇0時,輸入Y或N決定是否退出程序。5.2 調(diào)試結(jié)果輸入數(shù)字進(jìn)行加減乘除運(yùn)算,計算結(jié)果如下圖所示:測試結(jié)束后

8、,退出程序,如下圖所示:6結(jié)論程序的主要功能是實(shí)現(xiàn)四則運(yùn)算,整個程序中主要分為,輸入算式,加法,減法,乘法,除法和以十進(jìn)制顯示結(jié)果這幾個部分。通過這次課程設(shè)計,我發(fā)現(xiàn)一個好的匯編程序不僅要正確可行,還要有健壯性,當(dāng)用戶輸入數(shù)據(jù)非法,使運(yùn)行環(huán)境改變時,程序能恰當(dāng)?shù)刈鞒龇磻?yīng)或進(jìn)行處理,不會產(chǎn)生莫名其妙的輸出結(jié)果。一個正確可行的算法如果缺乏健壯性,那么這個程序也不能算真正的成功。經(jīng)過為期一周的匯編語言課程設(shè)計,親身感受體驗(yàn)敲、改寫程序代碼的樂趣,我對匯編語言有了較為深入的了解,不僅鞏固了以前在課本上學(xué)到的知識,還學(xué)會了很多其他東西。通過這次課程設(shè)計,我收獲的不僅僅是課程上的知識得到實(shí)際應(yīng)用,還有編程

9、的基本習(xí)慣和開發(fā)系統(tǒng)時應(yīng)注意的流程。作為一個程序編程人員,要保持清醒的頭腦,以現(xiàn)實(shí)為依據(jù),讓自己的每一行代碼都能實(shí)現(xiàn)自己的意義。由于能力有限,程序還是有不完美的地方。這次的綜合實(shí)驗(yàn)讓我對匯編有了更深刻的認(rèn)識,對各種指令有了進(jìn)一步的理解。 參考文獻(xiàn)1 劉其明.匯編語言程序設(shè)計教程.徐州:中國礦業(yè)大學(xué)出版社,20102 錢曉捷.新版匯編語言程序設(shè)計.北京:電子工業(yè)出版社,20073 何小海,嚴(yán)華. 微機(jī)原理與接口技術(shù).北京:科學(xué)出版社,20064沈美明,溫冬嬋. IBM-PC匯編語言程序設(shè)計 M. 清華大學(xué)出版社5王爽 匯編語言 M.清華大學(xué)出版社附 錄附錄 源程序清單IN16 MACRO ;完成

10、從鍵盤接受二個數(shù)并轉(zhuǎn)換為十六制數(shù),第一個數(shù)由SI指向,第二個數(shù)存放在BX中 LEA DX,PR ;DX指向PR換行CALL OUTPUT ;LEA DX,INPUT1 ;DX指向INPUT1,提示輸入第一個數(shù)CALL OUTPUT CALL INPUT ;把輸入的數(shù)存放在BX中LEA SI,RESULT ;SI指向RESULTMOV SI,BX ;把第一個十六制數(shù)存入RESULT的第一個位置LEA DX,PR ;DX指向PR,換行CALL OUTPUT LEA DX,INPUT2 ;DX指向INPUT2,提示輸入第一個數(shù)CALL OUTPUT CALL INPUT ;把輸入的數(shù)存放在BX中EN

11、DM ;宏結(jié)束DATA SEGMENT ;數(shù)據(jù)段BUF DB ,0DH,0AHDB *- WELCOME 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 number:,$ INPUT1 DB Please input the first number xiao yu 4 wei:,$INPUT2 DB Please input the second number xiao

12、 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=$PR5 DB .$PR6 DB Are you sure exit?(Y/N)$ DATA ENDS ;數(shù)據(jù)段落定義結(jié)束CODE SEGMENTMAIN PROC FAR ;主函數(shù)ASSUME CS:CODE ,D

13、S:DATASTART:MOV AX,DATAMOV DS,AXLEA DX,BUF ;DX指向BUF換行CALL OUTPUT ;調(diào)用顯示字符串函數(shù)換行SUB AX,AX ;AX清零CALL CHOOSE ;調(diào)用選擇函數(shù)JMP START ;跳轉(zhuǎn)到STARTRET MAIN ENDPINPUT PROC NEAR ;定義INPUT函數(shù),就是將從鍵盤輸入的數(shù)按原十六進(jìn)制數(shù)存放在BX中MOV BX,0 ;BX清零NEWCHAR:MOV AH,1 INT 21H ;接受鍵盤輸入一個字符CMP AL,0DH ;輸入的字符與回車比較JE EXIT ;是回車就結(jié)束 CMP AL,A ;與A比較JAE H

14、0 ;大于等于就跳轉(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)于讓BX乘以16SHL BX,CL ;將BX邏輯左移MOV AH,0 ;將AX清零ADD BX,AX ;AX+BX送到BXJMP NEWCHAR ;跳轉(zhuǎn)到NEWCHAR,把第二個輸入的字符存放到BX的第二位EXIT: RETINPUT E

15、NDPOUTPUT 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 ;與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 EXIT1 ;等于4就跳轉(zhuǎn)到EXIT1,

16、結(jié)束程序CALL WRONG ;如果不是0到4之間的數(shù)就提示出錯EXIT1: LEA DX,PR ;DX指向PR換行CALL OUTPUT LEA DX,PR6 ;DX指向PR6,確認(rèn)是否退出CALL OUTPUT MOV AH,1 ;從鍵盤接受一個數(shù)INT 21HCMP AL,Y ;與Y比較JE EXIT0 ;不是Y就看是否為yCMP AL,y ;與y比較JNE START ;不是y就跳轉(zhuǎn)到STARTEXIT0:MOV AH,4CH ;結(jié)束本程序INT 21HYES1:CALL JIA ;調(diào)用JIA函數(shù)JMP START ;調(diào)用完之后跳轉(zhuǎn)到STARTYES2:CALL JIAN ;調(diào)用JIA

17、N函數(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ù)結(jié)束WRONG PROC NEAR ;報錯函數(shù)LEA DX,PR ;DX指向PR換行LEA DX,WRO ;DX指向WRO,提示輸入有錯,請重新輸入JMP START ;跳轉(zhuǎn)到STARTRET WRONG ENDP ;報錯函數(shù)結(jié)束JIA PROC NEAR ;加法函數(shù)IN16 ;調(diào)用宏,接受鍵盤輸入的兩個十六進(jìn)制數(shù),第一個數(shù)由SI指向,第二個數(shù)存放在BX中

18、ADD BX,SI ;把第一個數(shù)加第二個數(shù)存放到BX中LEA DX,PR ;DX指向PR,換行CALL OUTPUT LEA DX,PR1 ;DX指向PR1,顯示A + B=CALL OUTPUT CALL OUTBX ;調(diào)用顯示BX寄存器的內(nèi)容函數(shù)RETJIA ENDP ;加法結(jié)束JIAN PROC NEAR ;減法函數(shù)IN16 ;調(diào)用宏,接受鍵盤輸入的兩個十六進(jìn)制數(shù),第一個數(shù)由SI指向,第二個數(shù)存放在BX中 SUB BX,SI ;第二個數(shù)減第一個數(shù),結(jié)果存放到BX中NEG BX ;對結(jié)果取反后才是A-B的值,才是第一個數(shù)減去第二個數(shù)LEA DX,PR ;DX指向PR,換行CALL OUTP

19、UT LEA DX,PR2 ;DX指向PR2,顯示A - B=CALL OUTPUT CALL OUTBX ;調(diào)用顯示BX寄存器的內(nèi)容RETJIAN ENDP ;加法函數(shù)結(jié)束CHENG PROC NEAR ;乘法函數(shù)IN16 ;調(diào)用宏,接受鍵盤輸入的兩個十六進(jìn)制數(shù),第一個數(shù)由SI指向,第二個數(shù)存放在BX中 MOV DX,0 ;把DX清零MOV AX,BX ;把第二個數(shù)賦給AX MUL WORD PTRSI ;AX乘SI并把結(jié)果存放到DX,AX中,是字的操作MOV BX,AX ;將AX賦給BXPUSH BX ;將BX壓棧,顯示下面DX的內(nèi)容時要將DX的值賦給BXPUSH DX ;將DX壓棧,因?yàn)?/p>

20、下面要換行輸出,會改變DX的值LEA DX,PR ;DX指向PR,換行輸出CALL OUTPUT LEA DX,PR3 ;DX指向PR3,顯示A * B=CALL OUTPUT POP DX ;將DX出棧,要將做乘法后DX的內(nèi)容顯示出來MOV BX,DX ;把DX給BXCALL OUTBX ;顯示DX的內(nèi)容POP BX ;將BX出棧CALL OUTBX ;顯示AX的內(nèi)容RETCHENG ENDP ;乘法函數(shù)結(jié)束CHU PROC NEAR ;除法函數(shù)IN16 ;調(diào)用宏,接受鍵盤輸入的兩個十六進(jìn)制數(shù),第一個數(shù)SI指向,第二個數(shù)存放在BX中MOV AX,SI ;將第一個數(shù)賦給AXMOV DX,0 ;將DX清零DIV BX ;AX除BX,結(jié)果存放到DX,A

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論