匯編語言課程設(shè)計四則運算計算器.._第1頁
匯編語言課程設(shè)計四則運算計算器.._第2頁
匯編語言課程設(shè)計四則運算計算器.._第3頁
匯編語言課程設(shè)計四則運算計算器.._第4頁
匯編語言課程設(shè)計四則運算計算器.._第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、微機(jī)原理實驗報告匯編語言課程設(shè)計報告(2012 - 2013年度第1學(xué)期)實驗名稱:實現(xiàn)加減乘除四則運算的計算器專 業(yè)生物醫(yī)學(xué)工程學(xué)生姓名周炳威班級 B100904學(xué)號 B10090406指導(dǎo)教師樂洋實現(xiàn)加減乘除四則運算的計算器1實驗?zāi)康纳罨瘜W(xué)習(xí)的匯編語言課程基本知識,進(jìn)一步掌握匯編語言程序設(shè)計方法,提高 分析問題、解決問題的綜合應(yīng)用能力。通過使用匯編語言設(shè)計實現(xiàn)簡單計算器,以 此進(jìn)一步了解和掌握對數(shù)據(jù)存儲,寄存器的使用,加減乘除相關(guān)指令以及模塊的調(diào) 用等匯編語言知識的有效運用2實驗內(nèi)容課題名稱:實現(xiàn)加減乘除四則運算的計算器主要功能:實現(xiàn)一個簡單的計算器,要求:編寫一個程序,每運行一次可執(zhí)行

2、程序,可以實現(xiàn)加減乘除四則運算。計算器是最簡單的計算工具,簡單計算器具有 加、減、乘、除四項運算功能。3實現(xiàn)方法本次匯編語言課程設(shè)計的最終目的是要實現(xiàn)一個簡單計算器,要求編寫一個程 序,每運行一次可執(zhí)行程序,可以實現(xiàn)數(shù)的加減乘除四則運算。由自己調(diào)用中斷輸 入到屏幕上并要用程序存儲起來的數(shù),然后才能對這兩個數(shù)進(jìn)行運算,而且做的是 加法運算、減法運算乘法運算還是除法運算也未可知,為此我們還要判斷用戶所輸 入的運算是四則運算中的哪一個運算。此外,運算過程中的進(jìn)位或是借位,選擇用 什么樣的方式進(jìn)行輸出,如何實現(xiàn)清屏等也是要解決的問題。第一步,用INT 21H的1號功能調(diào)用來進(jìn)行輸入。利用1號功能調(diào)用來

3、輸入, 即把單個字符一個個的輸入并存儲到一個數(shù)據(jù)區(qū)里。我們要做的是兩個數(shù)的運算, 先認(rèn)定輸入的格式為1234+5678=或者1111*2222=,當(dāng)然如果輸入不是這樣的格式 計算出來的結(jié)果就不一定是我們想要的結(jié)果了。在存儲的時候也是有選擇的存儲, 當(dāng)輸入的并非格式里所要求的字符時則報錯。第二步,設(shè)計程序進(jìn)行判斷所輸入的算式是做加法運算、減法運算、乘法運算 還是除法運算,即判斷輸入的運算符是 +號、-號、* 號、/號中的哪 一個,因為輸入的格式固定了,所以只需要把存進(jìn)數(shù)據(jù)區(qū)的第三個字符拿來與加減 乘除四個運算符號進(jìn)行比較,和哪一個運算符號一樣就調(diào)用相對應(yīng)的運算模塊進(jìn)行 計算。第三步,根據(jù)計算器程

4、序所要實現(xiàn)的功能完成各個功能模塊。設(shè)計程序主體部 分,根據(jù)主體部分所需的功能模塊對各個子模塊一一進(jìn)行設(shè)計編寫。子模塊中包含 有:do_add加法運算模塊,do_sub減法運算模塊,do_mul乘法運算模塊,do_div 除法運算模塊,in put輸入模塊等。最后還要對這個簡易計算器進(jìn)行功能完善。為了使程序符合我們使用者的操作 習(xí)慣,設(shè)計當(dāng)用戶根據(jù)提示信息輸入一個算式后,按下enter鍵或是=符號鍵時,程序依據(jù)輸入的算式進(jìn)行計算,并將結(jié)果顯示在屏幕上。如果用戶輸入錯誤, 則返回,提示信息讓用戶重新輸入算式,當(dāng)用戶按下Q或q鍵時退出程序。在各個子功能模塊設(shè)計好的情況下,通過主題模塊的合理調(diào)用,最終

5、實現(xiàn)一個具有簡單運 算功能的計算器。3.2程序流程圖及說明此程序流程圖簡要地表現(xiàn)出了所要實現(xiàn)的功能以及一些功能的大概算法,同時 也是我編寫的程序的一個總體的框架。程序流程圖說明:通過流程圖,可以看出程序開始運行時,首先輸出提示語句, 當(dāng)用戶輸入后,程序根據(jù)所輸入的內(nèi)容進(jìn)行判斷,通過判斷的結(jié)果來決定調(diào)用哪個 功能模塊,首先要判斷輸入的字符是否為 Q或q,若是,則退出程序,不是則繼續(xù) 輸入。還要判斷輸入的是否為 0-9, + , -*/這些字符,若不是會報錯,是則將根據(jù)運算符號調(diào)用相應(yīng)的功能模塊完成運算。最后將運算的結(jié)果顯示在 屏幕上,并返回主題程序,使用戶可以重新輸入。21源程序清單B_PEQU

6、 BYTE PTRW_PEQU WORDPTRD_PEQU DWORDPTRCODESEGMENTASSUME CS:CODE,DS:CODEORG 100H;主程序開始NEWSTAR:JMP STAREVENNUM1DW 0,0NUM2DW 0,0NUM3DW 0,0JGV4DW 0,0YSFLABEL WORDYSF1DB 0YSF2DB 0JUVDB 0UVDB 0;使DS:SI指向第一有效字符OVERS LABEL NEARCLDPUSH AXOVERS1:LODSBCMP AL,JZ OVERS1CMP AL,9JZ OVERS1DEC SICMP AL,13POP AXRET;輸出

7、一個制表符TABLABEL NEARMOV AL,9JMP SHORT DISP;輸出一個回車換行符CRLFLABEL NEARMOV AL,13CALL DISPMOV AL,10;顯示一個字符DISPLABEL NEARPUSH AXPUSH DXMOV AH,2MOV DL,ALINT 21HPOP DXPOP AXRET;檢查是否為運算符ISYSFLABEL NEARCLDLODSBCALL ISJJJZ ISYSF1CALL ISIIJZ ISYSF1 DEC SIISYSF1:RET;檢查是否是加減運算ISJJLABEL NEARCMP AL,+JZ ISYSF1CMP AL,-R

8、ET;檢查是否為乘除運算ISIILABEL NEARCMP AL,*JZ ISYSF1CMP AL,/JZ ISYSF1CMP AL,RET;數(shù)據(jù)輸出;CX=10十進(jìn)制;CX=16 十六進(jìn)制DOUTLABEL NEARPUSH AXPUSH BXPUSH DXPUSH BPXOR BP,BPD0UT1:INC BPPUSH AXMOV AX,DX XOR DX,DX DIV CXMOV BX,AXPOP AXDIV CXPUSH DXMOV DX,BX OR BX,AX JNZ DOUT1DOUT2:POP AXADD AL,0CMP AL,9JBE DOUT3ADD AL,A-9-1DOUT

9、3:CALL DISPDEC BPJNZ DOUT2POP BPPOP DXPOP BXPOP AXRET;輸入數(shù)據(jù)在DX:A)中返回;CX=0數(shù)據(jù)為10進(jìn)制;CX#0數(shù)據(jù)為16進(jìn)制DATELABEL NEARPUSH BXPUSH BPPUSH DIXOR AX,AXXOR DX,DXDATE1:MOV DI,AX LODSBCMP AL,0JB DATE7CMP AL,9JA DATE6DATE2:AND AX,0FHSHL DI,1RCL DX,1MOV BX,DIMOV BP,DXSHL DI,1RCL DX,1SHL DI,1RCL DX,1JCXZ DATE3SHL DI,1RCL

10、 DX,1Jmp short DATE4DATE3:ADD DI,BXADC DX,BPDATE4:ADD AX,DIADC DX,0JMP DATE1DATE5:ADD AL,9JMP DATE2DATE6:JCXZ DATE7CMP AL,AJB DATE7CMP AL,FJBE DATE5CMP AL,aJB DATE7CMP AL,fJBE DATE5DATE7:MOV AX,DIDEC SIOR DI,DXPOP DIPOP BPPOP BXRET;數(shù)據(jù)1與數(shù)據(jù)2根據(jù)YSF進(jìn)行加減運算JSJJLABEL NEARMOV AX,NUM2MOV DX,NUM2+2CMP YSF1,+JZ

11、 JSJJ1SUB NUM1,AXSBB NUM1+2,DXJMP SHORT JSJJ2JSJJ1:ADD NUM1,AXADC NUM1+2,DXJSJJ2:RET;數(shù)據(jù)1與數(shù)據(jù)2根據(jù)YSF進(jìn)行乘除運算JSII1LABEL NEARMOV BX,OFFSET NUM1JMP SHORT JSII2 1;數(shù)據(jù)2與數(shù)據(jù)3根據(jù)YSF2進(jìn)行乘除運算JSII2LABEL NEARMOV BX,OFFSET NUM2JSII2_1:DB 66HMOV AX,BXDB 66HMOV CX,BX+4CMP YSF2,*JNZ JSII2_2DB 66HIMUL CXJMP SHORT JSII2_3JSI

12、I2_2:DB 66HCWDDB 66HIDIV CXCMP YSF2,/JZ JSII2_3DB 66HXCHG DX,AXJSII2_3:DB 66HMOV BX,AXRET;顯示結(jié)果XUJGLABEL NEARMOV AX,JGV4MOV DX,JGV4+2MOV CX,10CMP UV,10JZ XUJG0MOV CX,16XUJGO:TEST DX,8000HJZ XUJG1CMP UV,10JZ XUJG2CALL DOUTXUJG2:NOT AXNOT DXADD AX,1ADC DX,0PUSH AXCMP UV,10JZ XUJG3MOV AL,CALL DISPMOV AL

13、,(CALL DISPXUJG3:MOV AL,-CALL DISPPOP AXCMP UV,10JZ XUJG1CALL DOUTMOV AL,)CALL DISPRETXUJG1:CALL DOUTRET;計算結(jié)果放入DX:AX中JSJGLABEL NEARCALL JSJJMOV AX,NUM1MOV DX,NUM1+2RET;從DS:SI處取一個數(shù)據(jù)LOADATE LABEL NEARLODSBCMP AL,(JZ LOADATE1DEC SIPUSH CXXOR CX,CXCMP UV,10JZ LOADATE0INC CXLOADATE0:CALL DATEPOP CXRETLOA

14、DATE1:PUSH NUM1PUSH NUM1+2PUSH NUM2PUSH NUM2+2PUSH YSFINC JUVMOV JGV4,0MOV JGV4+2,0;進(jìn)行四則運算SZYSLABEL NEARCALL ISYSFJZ SZYS2CALL LOADATEMOV NUM1,AXMOV NUM1+2QXSZYS1:XOR AX,AXMOV NUM2,AXMOV NUM2+2,AXCALL ISYSFJZ SZYS3JNZ SZYS6SZYS2:PUSH AX;取16進(jìn)制數(shù);取數(shù)據(jù)放入DX:AX中;保存數(shù)據(jù)1數(shù)據(jù)2及運算符;結(jié)果值清零;首字符是運算符?;不是,取數(shù)并保存;數(shù)據(jù)2清零;下

15、個是運算符?;將結(jié)果作為數(shù)據(jù)1MOV AX,JGV4MOV NUM1,AXSZYS3:MOV AXJGV4+2MOV NUM1+2,AXPOP AXMOV YSF1,ALMOV YSF2,ALCALL ISJJJZ SZYS4;是加減運算轉(zhuǎn)CALL LOADATEMOV NUM2,AXMOV NUM2+2QX;取數(shù)據(jù)2算 算CALL JSII1;數(shù)據(jù)1與數(shù)據(jù)2根據(jù)YSF進(jìn)行乘除運SZYS4:JMP SZYS1;結(jié)果保存在數(shù)據(jù)1中SZYS4_1:CALL LOADATEMOV NUM2,AXMOV NUM2+2QXCALL ISYSFJNZ SZYS6;取數(shù)據(jù)2并保存CALL ISJJ;運算符2

16、是加減運算?JNZ SZYS5PUSH AX;不是轉(zhuǎn)算 算CALL JSJJ;數(shù)據(jù)1與數(shù)據(jù)2根據(jù)YSF14行加減運POP AX;結(jié)果保存在數(shù)據(jù)1中SZYS5:MOV YSF1,ALJMP SZYS4;保存新的運算符MOV YSF2,AL;保存運算符2CALL LOADATEMOV NUM3,AXMOV NUM3+2QX;取數(shù)據(jù)3算算CALL JSII2;數(shù)據(jù)2與數(shù)據(jù)3根據(jù)YSF2t行乘除運JMP SZYS4 1結(jié)果保存在數(shù)據(jù)2中SZYS6:MOV CL,ALCMP AL,13JNZ SZYS9SZYS7:CALL JSJGCMP JUV,0JZ SZYS8DEC JUVPOP YSFPOP N

17、UM2+2POP NUM2POP NUM1+2POP NUM1RETSZYS8:CMP CL,)JZ SZYS10MOV JGV4,AXMOV JGV4+2QXJNZ SZYS12SZYS9:CMP AL,)JNZ SZYS11INC SIJMP SZYS7SZYS10:MOV NUM1,AXMOV NUM1+2QXJMP SZYS1SZYS11:STCRETSZYS12:CLCRET;數(shù)制處理UVILLABEL NEARPUSH SIUVIL1:LODSBCMP AL,JZ UVIL2CMP AL,9JZ UVIL2CMP AL,13JZ UVIL4JNZ UVIL1UVIL2:MOV BX

18、,SI CALL OVERS JZ UVIL3LODSWCALL OVERSPOP SIJNZ SZYS11CMP AX,O1JNZ SZYS11PUSH SIMOV UV,10UVIL3:MOV AL,13MOV BX-1,ALUVIL4:POP SICLCRET;預(yù)置結(jié)果YVJGLABEL NEARMOV AH,52HINT 21HMOV AX,ES:BX-2MOV DS,AXMOV AX,DS:0CHMOV CS:JGV4,AXMOV AX,DS:0EHMOV CS:JGV4+2,AXPUSH CSPOP DSPUSH CSPOP ESRET;保存結(jié)果BCJGLABEL NEARMOV AH,52HINT 21HMOV AX,ES:BX-2MOV DS,AXMOV AX,CS:JGV4MOV DS:0CH,AXMOV AX,CS:JGV4+2MOV DS:0EH,AXPUSH CSPOP DSPUSH CSPOP ESRETSTAR:MOV SI,81HCLDCALL OVERSJNZ STAR1STARO:MOV DX,OFFSET MESS1JMP STAR

溫馨提示

  • 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

提交評論