匯編語言課程設(shè)計報告_第1頁
匯編語言課程設(shè)計報告_第2頁
匯編語言課程設(shè)計報告_第3頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、匯編語言課程設(shè)計報告( 2011 - 2012 年度第 2 學(xué)期 )實現(xiàn)加減乘除四則運算的計算器專 業(yè) 計算機科學(xué)與技術(shù) 學(xué)生姓名班級學(xué)號指導(dǎo)教師完成日期實現(xiàn)加減乘除四則運算的計算器目錄目 錄 21 概 述 11.1 設(shè)計目的 11.2 設(shè)計內(nèi)容 12 系統(tǒng)需求分析 12.1 系統(tǒng)目標(biāo) 12.2 主體功能 12.3 開發(fā)環(huán)境 13 系統(tǒng)概要設(shè)計 23.1 系統(tǒng)的功能模塊劃分 23.2 系統(tǒng)流程圖 34 系統(tǒng)詳細設(shè)計 35 測試 45.1 測試方案 45.2 測試結(jié)果 46 小結(jié) 5參考文獻 6附 錄 7附錄 源程序清單 7匯編語言設(shè)計課程設(shè)計實現(xiàn)加減乘除四則運算的計算器1.1 設(shè)計目的本課程設(shè)

2、計是在學(xué)完教學(xué)大綱規(guī)定的全部內(nèi)容、完成所有實踐環(huán)節(jié)的基礎(chǔ)上, 旨在深化學(xué)生學(xué)習(xí)的匯編語言課程基本知識,進一步掌握匯編語言程序設(shè)計方法, 提高分析問題、解決問題的綜合應(yīng)用能力。1.2 設(shè)計內(nèi)容能實現(xiàn)加、減、乘、除的計算;該程序接受的是 16 進制數(shù);執(zhí)行時,需要在文件名后直接跟上計算表達式,如在命令提示符下執(zhí)行結(jié)果如下:c:tasm>js 3+252 系統(tǒng)需求分析2.1 系統(tǒng)目標(biāo)本次匯編語言課程設(shè)計的最終目的是要實現(xiàn)一個簡單加減乘除四則運算的計 算器,要求編寫一個程序,每運行一次可執(zhí)行程序,可以實現(xiàn)數(shù)的加減乘除四則運 算。比如,十進制數(shù)的加減乘除四則運算。我們曾經(jīng)學(xué)習(xí)過兩個具體數(shù)字進行加減

3、 法運算,但是對于簡單計算器用匯編語言實現(xiàn)難點在于這兩個要做運算的數(shù)是未知 的,是由自己調(diào)用中斷輸入到屏幕上并要用程序存儲起來的數(shù),然后才能對這兩個 數(shù)進行運算,而且做的是加法運算、減法運算乘法運算還是除法運算也未可知,為 此我們還要判斷用戶所輸入的運算是四則運算中的哪一個運算。此外,運算過程中 的進位或是借位,選擇用什么樣的方式進行輸出,如何實現(xiàn)清屏等也是要解決的問 題。2.2 主體功能 系統(tǒng)分析主要包括設(shè)計的功能分析和系統(tǒng)的流程,功能分析放在首位,每一個 軟件都要能滿足一定的功能才有使用價值。根據(jù)功能需求來創(chuàng)建應(yīng)用程序。本設(shè)計的功能如下:1 、輸入 2 個數(shù),先判斷是加減運算還是乘除運算,

4、再進行計算2 、判斷符號是否為運算符3 、回車為換行符4 、用十進制或十六進制輸出運算結(jié)果2.3 開發(fā)環(huán)境TASM5.0 集成環(huán)境實現(xiàn)加減乘除四則運算的計算器3 系統(tǒng)概要設(shè)計3.1 系統(tǒng)的功能模塊劃分 本題目實現(xiàn)的模塊圖如圖3-1 所示四則運算計算器程序設(shè)計界面設(shè)置選擇算法設(shè)置十進制轉(zhuǎn)換設(shè)置圖 3-1 概要模塊(1) 界面設(shè)置 主要實現(xiàn)確定界面樣式的功能,以菜單形式顯示。(2) 選擇算法設(shè)置 用于選擇加、減、乘、除法來進行運算。(3) 十進制轉(zhuǎn)換設(shè)置 應(yīng)用十進制的轉(zhuǎn)換算法來處理加、減、乘、除法四則運算匯編語言設(shè)計課程設(shè)計3.2 系統(tǒng)流程圖開始是X=1?否X=2?否六進制乘法X=3?否X=4?提

5、示出錯!X=0?否X=Y/y ?結(jié)束輸入選擇鍵 x十六進制除法十六進制加法是六進制減法是是否圖 四則運算計算器執(zhí)行過程流程圖4 系統(tǒng)詳細設(shè)計4.1 界面設(shè)置通過定義數(shù)據(jù)段,利用 09H顯示出功能列表。通過定義數(shù)據(jù)段,以字符串的形 式輸入每個提示信息,利用 09H鍵盤輸入并回顯命令顯示每一個功能提示,是計算 器的功能列表有序清晰的顯示在屏幕上。4.2 選擇算法設(shè)置首先選擇要進行的四則運算,若選擇 1,則進行加法;若選擇 2,則進行減法; 若選擇 3,則進行乘法;若選擇 4,則進行除法。加法:先輸入第一個小于 4 位十 六進制數(shù)存入 SI 中,在輸入第二個小于 4 位十六進制數(shù)存入 BX 中,然后

6、顯示 BX 和實現(xiàn)加減乘除四則運算的計算器SI 中的內(nèi)容相加存在 BX中。減法:先輸入第一個小于 4位十六進制數(shù)存入 SI 中, 在輸入第二個小于 4位十六進制數(shù)存入 BX中,然后顯示 BX 和SI 中的內(nèi)容相減存 在 BX中,然后用 NEG來求反,即為第一個數(shù)減去第二個數(shù)的差,顯示 BX 的內(nèi)容即 為差。乘法:先輸入第一個小于 4位十六進制數(shù)存入 SI 中,在輸入第二個小于 4 位十六進制數(shù)存入 BX中,把 BX的值給 AX,然后讓 AX乘以 SI ,然后再分別將 DX, AX中的內(nèi)容賦給 BX,接著依次顯示 DX,AX的內(nèi)容,即為積。除法:先輸入第一個 小于 4 位十六進制數(shù)存入 SI 中

7、,在輸入第二個小于 4 位十六進制數(shù)存入 BX中,將 SI 賦給 AX作被除數(shù),讓 BX作除數(shù),得到的商存放在 AX中,余數(shù)放在 DX中,然 后依次賦給 BX,將其依次顯示即為商。4.3 十進制轉(zhuǎn)換設(shè)置 要完成十進制轉(zhuǎn)換成十六,一般采用除十六取余法來完成,其大致過程如下: 將待轉(zhuǎn)換的數(shù)除以 16 得到第一個商和余數(shù),此第一個余數(shù)就是所求的十六進制數(shù) 的各位,再用第一個商除以 16,得到第二個商和余數(shù),此第二個余數(shù)就是所求十六 進制數(shù)的十位,重復(fù)這一過程直至商為 0,此時的余數(shù)就是所求十六進制數(shù)的最高 位。在內(nèi)存中分配一緩沖區(qū),用來存放以上分離出來的使十進制數(shù)的每一位,然后 再逐個轉(zhuǎn)換成 ASC

8、II 碼,轉(zhuǎn)換成 ASCII 碼的過程很簡單,就是給每個十六進制位加 上 30H 即可,最后送顯示器輸出。5 測試5.1 測試方案 對程序源代碼進行功能調(diào)試和功能驗證。程序代碼運行成功后,分別檢驗測試 其加、減、乘、除功能,并對結(jié)果進行分析。當(dāng)用戶選擇 0 時,輸入 Y 或 N決定是 否退出程序。5.2 測試結(jié)果圖 5.2.1 計算結(jié)果4輸入數(shù)字進行加減乘除運算,計算結(jié)果如下圖所示:匯編語言設(shè)計課程設(shè)計 測試結(jié)束后,退出程序,如下圖所示:圖 退出程序6 小結(jié)程序的主要功能是實現(xiàn)四則運算,整個程序中主要分為,輸入算式,加法,減 法,乘法,除法和以十進制顯示結(jié)果這幾個部分。本程序基本實現(xiàn)了四則運算

9、的功 能,但還沒能實現(xiàn)帶有括號的四則運算,還有在除法運算中不能運算較大的數(shù),會 產(chǎn)生溢出現(xiàn)象。 一開始的時候自己編出來的程序有很多問題, 尤其是在循環(huán)程序上, 因此查閱了不少資料,也請教了好幾個同學(xué)幫著修改,調(diào)試了好久才能正常運行。 由于能力有限,程序還是有不完美的地方。這次的綜合實驗讓我對匯編有了更深刻 的認識,對各種指令有了進一步的理解。實現(xiàn)加減乘除四則運算的計算器參考文獻1 劉其明.匯編語言程序設(shè)計教程 . 徐州:中國礦業(yè)大學(xué)出版社 , 2010.11匯編語言設(shè)計課程設(shè)計附錄附錄 源程序清單SI 指向,第二IN16 MACRO ; 完成從鍵盤接受二個數(shù)并轉(zhuǎn)換為十六制數(shù),第一個數(shù)由 個數(shù)存

10、放在 BX 中LEA DX,PR ;DX指向 PR換行CALL OUTPUT ;LEA DX,INPUT1;DX指向 INPUT1,提示輸入第一個數(shù)CALL OUTPUTCALL INPUT; 把輸入的數(shù)存放在 BX中LEA SI,RESULT ;SI指向 RESULTMOV SI,BX; 把第一個十六制數(shù)存入 RESULT的第一個位置LEA DX,PR ;DX指向 PR,換行CALL OUTPUTLEA DX,INPUT2 ;DX指向 INPUT2,提示輸入第一個數(shù)CALL OUTPUTCALL INPUT把輸入的數(shù)存放在 BX中ENDM ; 宏結(jié)束DATA SEGMENT; 數(shù)據(jù)段BUF

11、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:','$

12、9;INPUT2 DB 'Please input the second number xiao 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

13、=$'PR4 DB 'A / B=$'實現(xiàn)加減乘除四則運算的計算器PR5 DB '$'PR6 DB 'Are you sure exit?(Y/N)$'DATA ENDS ; 數(shù)據(jù)段落定義結(jié)束 CODE SEGMENTMAIN PROC FAR ; 主函數(shù)ASSUME CS:CODE ,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA DX,BUF ;DX CALL OUTPUT ;SUB AX,AX;AXCALL CHOOSE ;JMP START;RETMAIN ENDP指向 BUF換行 調(diào)用顯示字符串函數(shù)換行

14、清零調(diào)用選擇函數(shù)跳轉(zhuǎn)到 STARTINPUT PROC NEAR ; 定義 INPUT函數(shù),就是將從鍵盤輸入的數(shù)按原十六進制數(shù)存放在BX中MOV BX,0;BX 清零NEWCHAR:MOV AH,1INT 21HCMP AL,0DHJE EXITCMP AL,'A'JAE H0CMP AL,'0'JAE H1接受鍵盤輸入一個字符 輸入的字符與回車比較 是回車就結(jié)束 與 A 比較 大于等于就跳轉(zhuǎn)到 H0 與 0 比較 大于等于就跳轉(zhuǎn)到 H1H0:SUB AL,37H由于 41-A=37, 完成把字母字符轉(zhuǎn)換成對應(yīng)的十六進制數(shù)JMP ADDTO跳轉(zhuǎn)到 ADDTOH1

15、:SUB AL,30H把 0 到 9的字符轉(zhuǎn)換成對應(yīng)的十六進制數(shù)JMP ADDTO跳轉(zhuǎn)到 ADDTOADDTO:MOV CL,4SHL BX,CL相當(dāng)于讓 BX乘以 16 將 BX 邏輯左移匯編語言設(shè)計課程設(shè)計MOV AH,0將 AX 清零ADD BX,AX ;AX+BX 送到 BXBX的第二位JMP NEWCHAR ; 跳轉(zhuǎn)到 NEWCHAR把,第二個輸入的字符存放到EXIT: RETINPUT ENDPOUTPUT PROC NEAR;顯示字符串函數(shù)MOV AH,09HINT 21HRETOUTPUT ENDPCHOOSE PROC NEAR;選擇函數(shù)MOV AH,1 ;從鍵盤接受一個數(shù)I

16、NT 21HCMP AL,'1' ;與 1 比較JE YES1 ;等于 1 就跳轉(zhuǎn)到Y(jié)ES1,進行加法CMP AL,'2' ;與 1 比較JE YES2 ;等于 2 就跳轉(zhuǎn)到Y(jié)ES2,進行減法CMP AL,'3' ;與 1 比較JE YES3 ;等于 3 就跳轉(zhuǎn)到Y(jié)ES2,進行乘法CMP AL,'4' ;與 1 比較JE YES4 ;等于 4 就跳轉(zhuǎn)到Y(jié)ES2,進行除法CMP AL,'0' ;與 0 比較JE EXIT1 ;等于 4 就跳轉(zhuǎn)到EXIT1, 結(jié)束程序CALL WRONG ;如果不是 0到 4之間的數(shù)就

17、提示出錯EXIT1: LEA DX,PR ;DX指向 PR換行CALL OUTPUTLEA DX,PR6 ;DX指向 PR6,確認是否退出CALL OUTPUTMOV AH,1 ;從鍵盤接受一個數(shù)INT 21HCMP AL,'Y' ;與 Y 比較JE EXIT0 ;不是 Y 就看是否為 yCMP AL,'y' ;與y 比較JNE START ;不是 y 就跳轉(zhuǎn)到START實現(xiàn)加減乘除四則運算的計算器EXIT0:MOV AH,4CHINT 21H結(jié)束本程序YES1:CALL JIA ;調(diào)用 JIA 函數(shù)JMP START調(diào)用完之后跳轉(zhuǎn)到 STARTYES2:CAL

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

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

20、指向,第二個10CALL OUTBX; 調(diào)用顯示 BX 寄存器的內(nèi)容RETJIAN ENDP加法函數(shù)結(jié)束CHENG PROC NEAR; 乘法函數(shù)IN16 ;調(diào)用宏 , 接受鍵盤輸入的兩個十六進制數(shù),數(shù)存放在 BX中MOV DX,0把 DX 清零MOV AX,BX把第二個數(shù)賦給 AXMUL WORD PTRSI;AX 乘SI 并把結(jié)果存放到 DX,AX中, 是MOV BX,AX將 AX 賦給 BXPUSH BX將 BX 壓棧,顯示下面 DX的內(nèi)容時要將PUSH DX將 DX 壓棧,因為下面要換行輸出,會改變LEA DX,PR;DX指向 PR,換行輸出CALL OUTPUTLEA DX,PR3;

21、DX指向 PR3,顯示 A * B= 'CALL OUTPUT第一個數(shù)由 SI 指向,第二個DX的值字的操作DX的值賦給 BXCALL OUTPUT匯編語言設(shè)計課程設(shè)計CALL OUTPUTLEA DX,PR2 ;DX指向 PR2,顯示 A - B= 'POP DX將 DX 出棧,要將做乘法后 DX的內(nèi)容顯示出來MOV BX,DX把 DX 給 BXCALL OUTBX顯示 DX 的內(nèi)容POP BXCALL OUTBX顯示 AX 的內(nèi)容RETCHENG ENDP乘法函數(shù)結(jié)束CHU PROC NEAR除法函數(shù)將 BX 出棧IN16調(diào)用宏 ,接受鍵盤輸入的兩個十六進制數(shù), 第一個數(shù) SI 指向,第二個數(shù) 存放在 BX中MOV AX,SI將第一個數(shù)賦給 AXMOV DX,0將 DX 清零DIV BX;AX除 BX,結(jié)果存

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論