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

下載本文檔

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

文檔簡介

1、實用標(biāo)準(zhǔn)文案1.設(shè)計目標(biāo)運(yùn)用匯編語言,制作一個計算的程序,實現(xiàn)簡單計算器的一般功能,能夠在DO以面下進(jìn)行簡單的加、減、乘、除的簡單計算.程序應(yīng)有操作提示、輸入和輸出.自動閃爍光標(biāo),并提示輸入信息.輸入正確的數(shù)值等符號后可以進(jìn)行正確的運(yùn)算,程序計算其結(jié)果值并輸出.程序無需查錯功能,所輸入的都是正確的四那么運(yùn)算表達(dá)式,并且表達(dá)式中運(yùn)算分量均為無正負(fù)號整數(shù),運(yùn)算符為+、-、*、/,最后結(jié)果以十進(jìn)制數(shù)表示.且程序主界面需為一個由組成邊框的矩形窗口.匯編語言直接同計算機(jī)的底層軟件甚至硬件進(jìn)行交互,它具有如下一些優(yōu)點:能夠直接訪問與硬件相關(guān)的存儲器或I/O端口; 能夠不受編譯器的限制,對生成的二進(jìn)制代碼進(jìn)

2、行完全的限制; 能夠?qū)﹃P(guān)鍵代碼進(jìn)行更準(zhǔn)確的限制;能夠根據(jù)特定的應(yīng)用對代碼做最正確的優(yōu)化,提升運(yùn)行速度;能夠最大限度地發(fā)揮硬件的功能.2 .軟件設(shè)計2.1程序設(shè)計的根本思想主模塊: 首先提供一個主界面,提示用戶按要求輸入具體的數(shù)據(jù)和所要進(jìn)行的操作,輸入完畢后給出結(jié)果.如果輸入過程中發(fā)現(xiàn)非法輸入,那么立即給與提示,程序自動刷新界面,提示繼續(xù)輸入.計算顯示完畢后,按提示選擇是否要繼續(xù)計算,不選擇繼續(xù)那么結(jié)束.對屏幕上輸入字符串的接受,為INPUT語句段,見源代碼,主要是將數(shù)字和運(yùn)算符分開存放.MATCFF程序,子程序內(nèi)有三次跳轉(zhuǎn),將運(yùn)算符選擇正確的語句進(jìn)行計算.由于操作符只有+、-、*、/,沒有涉及

3、到括號,不用考慮括號的匹配問題.流程圖如下:圖1主模塊流程圖子模塊: 完成對數(shù)據(jù)的進(jìn)一步加工處理,轉(zhuǎn)換格式并得出結(jié)果.首先根據(jù)輸入調(diào)用對應(yīng)的“+、-、“*、“/四個函數(shù)模塊,這是本程序的核心模塊,其他局部的一些小模塊都是為這幾個模塊效勞的,大致的流程圖如下列圖2:精彩文檔實用標(biāo)準(zhǔn)文案調(diào)用對應(yīng)模塊運(yùn)算數(shù)據(jù),得出結(jié)果圖2子模塊流程圖2.2代碼STACKSEGMENTSTACKDB200DUP(0)STACKENDSDATASEGMENTOPSDBOPDDBOPERDBTITDB*1,0DH,0AHDB*MadeBy*,0DH,0AH;0DHDB*TongXinJiSuanQiXiaoZu*,0DH

4、,0AH;0AH代表回車代表換行DB*ChangqianZuoxinWangxin*,0DH,0AHDB*WangdayongTangkuanlong*,0DH,0AHDB*+-*/*,0DH,0AHDB*Y,y:continueN,n:quit*,0DH,0AHDB*Calculate*$,0DH,0AHTip1DBInputthefirstoperator(0-9):$,0DH,0AHTip2DBPleaseinputtheoper(+,-,*,/):$,0DH,0AHErrorDBError!Pleseinputtheoperagain:$,0DH,0AHTip3DBInputthese

5、condoperator(0-9):$,0DH,0AHResultDBtheresultis:$,0DH,0AHQuitDBChooserepeatorquit?(Y/y/N/n):$,0DH,0AHTsaveDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATA;初始化DS:DXMOVDS,AXRemain:精彩文檔實用標(biāo)準(zhǔn)文案MOVBL,0;Oper(恢復(fù)初始狀態(tài)MOVOPS,BLMOVOPER,BLMOVOPD,BLLEASI,OPS;OPS的偏移地址送給SILEADI,OPD;OPD的偏移地址送給DICA

6、LLEnterLEADX,TITMOVAH,9INT21HCALLInput1;調(diào)用輸入 A 個操作數(shù)CALLOperat;調(diào)用輸入操作符CALLInput2;調(diào)用輸入第二個操作數(shù)CALLCalculate;調(diào)用計算方法CALLStrQuit;調(diào)用判斷程序再次執(zhí)行MOVAH,1INT21HCMPAL,YJERemainCMPAL,y;選才YY返回Remain繼續(xù)執(zhí)行JERemainCMPAL,NJEEXITCMPAL,nJEEXITEXIT:MOVAH,4CH;假設(shè)不是Y那么結(jié)束INT21H;輸入操作數(shù)子程序-Input1PROCNEARCALLEnterLEADX,Tip1;輸入 A 個操作

7、數(shù)提示MOVAH,9INT21H;十進(jìn)制輸入提示BCDin1:MOVAH,1INT21HCMPAL,0DHJEEndBCDin1;等于回車那么返回繼續(xù)輸入運(yùn)算符CMPAL,30HJBBCDin1;9時轉(zhuǎn)exitinD退出ANDAL,0FH;去除高位MOVSI,ALINCSILOOPBCDin1精彩文檔實用標(biāo)準(zhǔn)文案EndBCDinl:CALLEnter;RETInputlENDPInput2PROCNEARCALLEnterLEADX,Tip3;MOVAH,9INT21H;BCDin2:MOVAH,1INT21HCMPAL,0DHJEEndBCDin2;CMPAL,30HJBBCDin1;9AN

8、DAL,0FHMOVSI,ALINCSILOOPBCDin2EndBCDin2:CALLEnterRETInput2ENDP;輸入操作符子程序OperatPROCNEARReOperat:CALLEnterLEADX,Tip2MOVAH,9INT21HMOVAH,1INT21HCMPAL,+JEOperSaveCMPAL,-JEOperSaveCMPAL,*JEOperSaveCMPAL,/JEOperSaveJMPOperErrorOperError:CALLEnter回車換行輸入第二個操作數(shù)提示十進(jìn)制輸入提示等于回車那么返回繼續(xù)輸入運(yùn)算符時轉(zhuǎn)exitinD退出時轉(zhuǎn)exitinD退出去除高位

9、回車換行精彩文檔輸入操作符提示假設(shè)為+,那么存在實用標(biāo)準(zhǔn)文案LEADX,ErrorMOVAH,9INT21HJMPReOperatOperSave:MOVOPER,ALRETOperatENDP;計算方法子程序-CalculatePROCNEARCALLEnterMOVBL,OPERCMPBL,+JZADCProcCMPBL,-JZSUBProcCMPBL,*JZMULProcCMPBL,/JZDIVProcADCProc:CALLStrResultMOVAL,OPSADCAL,OPDCALLDisplJMPendCalculateSUBProc:CALLStrResultMOVAL,OPSS

10、UBAL,OPDCALLDisplJMPendCalculateMULProc:CALLStrResultMOVAL,OPDMULOPSCALLDisplJMPendCalculateDIVProc:CALLStrResultMOVAH,0MOVAL,OPSDIVOPDCALLDisplJMPendCalculateendCalculate:輸入操作符的錯誤提示回車換行假設(shè)為加法,那么轉(zhuǎn)到adcProc加法減法乘法除法精彩文檔實用標(biāo)準(zhǔn)文案RETCalculateENDPDisplPROCNEARMOVTsave,ALMOVAH,0MOVAL,TsaveMOVBL,100DIVBL;除以100C

11、ALLOutput;顯不白位數(shù)MOVAL,AHMOVAH,0MOVBL,10DIVBL;除以10CALLOutput;顯示十位數(shù)MOVAL,AHCALLOutput;顯示個位數(shù)RETDisplENDPStrResultPROCNEARLEADX,ResultMOVAH,9INT21HRETStrResultENDPOutputPROCNEAR;十進(jìn)制輸出PUSHAXADDAL,30H;將AL中的十進(jìn)制數(shù)變成ASCII碼MOVDL,ALMOVAH,2INT21HPOPAXRETOutputENDP;回車換行子程序EnterPROCNEARMOVDL,0AHMOVAH,2INT21HMOVDL,0

12、DHMOVAH,2INT21HRETEnterENDP;判斷程序再次執(zhí)行子程序StrQuitPROCNEARCALLEnter;回車換行精彩文檔實用標(biāo)準(zhǔn)文案LEADX,QuitMOVAH,9INT21HRETStrQuitENDPCODEENDSENDSTART3 .系統(tǒng)調(diào)試3.1測試目標(biāo)1在屏幕上顯示一個由*組成邊框的矩形窗口;2自動閃爍光標(biāo),并提示輸入信息;3能夠完成單項表達(dá)式的輸入、顯示和運(yùn)算;4編制并調(diào)試出程序.3.2測試方法及結(jié)果單擊開始,啟動運(yùn)行,輸入cmd,啟動命令提示符,進(jìn)入DOS統(tǒng).如下列圖:圖3啟動命令提示符源程序名存為qian.asm,在dos下進(jìn)入F盤,再cdmasnf

13、fi入masnmt件夾,再鍵入masmqian qian是源程序文件名提示是否更改文件名不改直接回車,系統(tǒng)會提示是否生成.lst文件和.crf文件直接回車跳過,這樣就生成了qian.obj鍵入linkqianqian是源程序文件名,提示是否更改文件名不改直接回車提示是否生成.map和.lib文件直接回車,這樣就生成了qian.exe,再在DOST鍵入qian源程序文件名就進(jìn)入程序執(zhí)行.如圖4:精彩文檔實用標(biāo)準(zhǔn)文案C:Users?0:D;cdnasnD;fflciSHlT)dSHdldll.dShHicrosuft(I?)NdcroRssenbl9rVersion5加加Coowright(C)M

14、icrosoftDorp1981-1985,1987MilrightsreservedObjecifiqicnORJI:SourcelistingMUL.LST:CrossreferenceNUL.CRF:50298十十433406BytessymbolspacefreeHUrirningrrorsHSfiunrftErrorsD:iasnD:iasnlinkqianMicrosoft(R)OverlapLinker*Version3.69Copyright(C)MicrosoftCorp1983-198?,Allrightsreserved,RurFileOlfiN.EKEl;LisiFil

15、eNUL.HRP1;LibrariesILIB:I):ihHsitqidnKH-MMK-H-KK-MiMiiMtJK-MMKMMIItM-NiMK-K-M-K-MMMKMMM-iKMatKH-MMK-H-KK-MiMiiMtJK-MMKMMIItM-NiMK-K-M-K-MMMKMMM-iKMatModeBykTongKinJiu自自nQiXiao2u*ChangaianZuoxinUanxin 卜卜MdnyddungungTrfngkudtilung* 十十*/*/* *匕匕, ,continueNFn:quit*卜卜*,-*,*,-*,*Culcul 舊舊IlnpLitth已已firwt口

16、口per門門tor(R9):.圖4執(zhí)行方法在計算器內(nèi),輸入數(shù)字測試本程序的正確與否.根據(jù)提示輸入第一個十進(jìn)制數(shù),如“6,回車.下一步,會提示請輸入運(yùn)算符,如加“+,回車.最后一步,輸入第二個十進(jìn)制數(shù),如“3,回車.那么顯示出其運(yùn)算結(jié)果.如下列圖5所示:*MadeBy*TongXinJiSuanQiXiaoZu*ChangqianZuoxinUangxin*WangdayongTangkuanlong* 4-4-*/*/客*Y,ycontinueN,n:quit*Inputthefirstoperator(09):6Pleaseinputtheopen(+.-,*,/):+Inputthesec

17、ondoperator(09):3theresultis:009ChooseRDe日torciuit?(Y/N/n):.圖5實現(xiàn)加法運(yùn)算同上,可實現(xiàn)減法、乘法、除法運(yùn)算,分別如圖6,圖7,圖所示8:精彩文檔實用標(biāo)準(zhǔn)文案Chooserepeatorquit?(V/y/N/n):yW*MM*MW*Mf*龔*MadeBy*卜TongKinJiSuanQiXiaoZu*ChangqianZuoxinWangxin*WangdayongTangkudnlong*/玨*V,y;continueN,n;quit*膏甘占資*=C日cute*、*1*1*1*葡*Inputthefirstoperator(09)

18、:6Pleaseinputtheopen(+,*,/):-Inputthesecondoperator(09):3theresultis:003Chooserepeato廠quit?(Y/N/n):圖6實現(xiàn)減法運(yùn)算Chooserepeatorquit?(V/y/N/n):y*疊翼疊疊獸獸普疊鬢普疊蕤興興普翼饕央鬢*央獸*央央*r*央 X 鬢*央箕*MadeBy*TongXinJiSuanQiXiaoZu*ChangqianZuoxinWangxin*WangdayongIangkuanlong*髯*普/鬢*Y,continueN,nzquit*x*M*x*H*Cdlcu曰te*H*Inputt

19、hefirstoperator(09):6Pleaseinputtheoper(*.一,*,/):*Inputthesecondoperator(09):3theresultis:018|Ch口口gerepedt0quit?(Y/N/n):圖7實現(xiàn)乘法運(yùn)算Chooserepeatorquit?(V/y/N/n):v*暑*興分*興*裳*於*MadeBy*FongXinJiSiianOiXiaoZu*ChangqianZuoxinWangxin*Wangd己yongTangkuanlong* -i-i- -*e/-w*e/-w*V,y:continueN,n:quit*曇*畀*裳弁畀*Cdcu曰t

20、e吳*弁*耳*瞿吳*旦Inputthefirstoperator(09):6Pleaseinputtheoper(+,-,*,/):/Inputthesecondoperator(09):3theresultis:002Chousere口eatorquit?(V/y/N/n):.圖8實現(xiàn)除法運(yùn)算運(yùn)算完畢后,會提示是否繼續(xù)下一個運(yùn)算,輸入“Y那么繼續(xù)運(yùn)算,并返回主界面,輸入“M那么結(jié)束程序.精彩文檔實用標(biāo)準(zhǔn)文案當(dāng)運(yùn)算符輸入不合法時,那么會提示重新輸入運(yùn)算符,如下列圖9:舞*資*資*款*HadeBy*TongXinJiSuanQiXiaoZu*ChangqianZuoxinWangxin*WangdayongTangkuanlong*W W*翼/4t4t*Vfy:continueN,n:quit*瑋*科x*x*#*C曰CH1tA*Inputthefirstoperator(09):6Pleaseinputtheoper(+,-:3Error!Pleseinputtheoperagain:Ple&seinputtheope (,-,/):.圖9錯誤提示4.總結(jié)設(shè)計的這個程序主要是進(jìn)行表達(dá)式的四那么運(yùn)算,由于操作符只有+、-、*、/,沒有涉及到括號,因此設(shè)計起來要容易一點,不用考慮括號的匹配問題.另外,跳轉(zhuǎn)時匯編語言的一大難點,再編程之前最好要畫

溫馨提示

  • 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

提交評論