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

下載本文檔

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

文檔簡介

./課程設(shè)計說明書題目:表達(dá)式計算器學(xué)號:41212241班級:計算機創(chuàng)新實驗班:廖福軒目錄TOC\o"1-2"\h\z\u一.設(shè)計容2二.設(shè)計方案21.主程序模塊.22.賦權(quán)值模塊.23.加減乘除運算子程序模塊.24.調(diào)用賦權(quán)宏子程序模塊.25.回車換行宏模塊.26.9號功能顯示字符串宏模塊.2三.設(shè)計框圖3四.程序代碼4五.運行結(jié)果9六.設(shè)計總結(jié)9計算器匯編語言程序設(shè)計一.設(shè)計容從鍵盤輸入一個十進制兩位數(shù)的四則運算表達(dá)式,如23*56-〔8*19/6+67-8=,編程計算表達(dá)式的值,輸出十進制結(jié)果〔有可能是三位或四位十進制,+-*/位置任意。并要求程序能反復(fù)執(zhí)行直道對"還要繼續(xù)嗎?〔y/n"之類的提示回答"n"或"N"為止。四則運算主要包括以下幾個模塊:主程序模塊.賦權(quán)宏模塊.加減乘除運算子程序模塊.調(diào)用賦權(quán)宏子程序模塊.回車換行宏模塊.9號功能顯示字符串宏模塊.二.設(shè)計方案1.主程序模塊.主程序初始化數(shù)據(jù)段,調(diào)用顯示宏show顯示界面,輸入字符或數(shù)字并判斷,調(diào)用子程序dyfq調(diào)用賦權(quán)宏fq為符號賦權(quán),從而判斷優(yōu)先級,調(diào)用加減乘除運算子程序ys對判斷出的相應(yīng)運算符進行運算,輸出運算結(jié)果,判斷是否繼續(xù),繼續(xù)則返回輸入,不繼續(xù)則退出程序.2.賦權(quán)宏模塊.通過定義宏fq,定義了變元a,b進行參數(shù)傳遞,并使用替換運算符&使變元a與標(biāo)號s對應(yīng).接著給對應(yīng)的符號賦予權(quán)值,將其權(quán)值存入ch中.3.加減乘除運算子程序模塊.運算模塊實現(xiàn)了將ax入棧保存,然后將ax,bx賦值為0,判斷cl中的符號是否為乘號*,若為乘號*則將number中的數(shù)字與其下一位的數(shù)字相乘,并把結(jié)果存入該位置,類似的若不為乘號*則接著判斷是否為除號/,若為除號/則進行除法運算,然后判斷是否為加法,為加法則進行加法運算,接著判斷是否為減法,為減法則進行減法運算并將結(jié)果存入當(dāng)前的計算的第二個數(shù)的位置.4.調(diào)用賦權(quán)宏子程序模塊.該模塊實現(xiàn)了調(diào)用賦權(quán)宏fq為<,>,*,/,+,-,=等符號分別賦權(quán)值為5,1,4,4,3,3,0.從而可以通過設(shè)定的權(quán)值來判斷優(yōu)先級.5.回車換行宏模塊.通過2號功能的輸出功能,將0dh賦予dl輸出,再調(diào)用2號功能,將0ah賦予dl輸出,從而實現(xiàn)回車換行功能.6.9號功能顯示字符串宏模塊.通過定義宏show,用9號顯示功能,通過變元str將字符串顯示出來。三.設(shè)計框圖開始開始加載數(shù)據(jù)段附加段顯示界面input輸入數(shù)字或字符輸入的是=,數(shù)字,符號?SIGN1=0?保存數(shù)字顯示錯誤=數(shù)字符號SIGN2=0?ny下移2位將SIGN1賦0設(shè)優(yōu)先級,并判斷是何符號ny根據(jù)符號決定運算,將值存入numbOutput通過2號功能顯示結(jié)果是否繼續(xù)?結(jié)束ynDi+2取number,operator的偏移地址四.程序代碼DATASSEGMENTSTR1DB0AH,0DH,'*******************************************$'STR2DB13,10,'*12345*$'STR3DB13,10,'*67890*$'STR4DB13,10,'*+-*/=*$'STR5DB0AH,0DH,'*******************************************$'STR6DB13,10,'PLEASEINPUTAFORMULA:$'STR7DB'CONTINUE<Y/N>?$' SIGN1DW0;值為0代表輸入的不是數(shù)字,為1代表輸入的是數(shù)字 SIGN2DW0;值為0代表輸入的符號是匹配的,為1輸入的符號不匹配 NUMBERDW20DUP<0>;保存輸入的數(shù)值 OPERATORDB'$';判斷輸入的運算符是否為空DB10DUP<0>;保存該運算符對應(yīng)的權(quán)值 ERRORDB'WRONG!$'DATASENDSSHOWMACROSTR;宏定義,顯示字符串 LEADX,STR MOVAH,9 INT21HENDMFQMACROASCII,A,B;宏定義,給運算符賦權(quán)值CMPAL,ASCII JNES&A MOVCH,B JMPS7 ENDMHCHHMACRO;宏定義,回車換行 MOVAH,2 MOVDL,0DH INT21H MOVAH,2 MOVDL,0AH INT21H ENDMCODESSEGMENTMAINPROCFARASSUMECS:CODES,DS:DATASSTART: MOVAX,DATAS MOVDS,AX LEADI,NUMBER LEASI,OPERATOR SHOWSTR1 SHOWSTR2 SHOWSTR3 SHOWSTR4 SHOWSTR5SHOWSTR6 MOVAX,0 MOVBX,0 MOVCX,0 MOVDX,0START1:HCHHINPUT:MOVAH,1 INT21H CMPAL,'=' JELET0 CMPAL,28H;第二種情況,第一次輸入的與28H也就是‘<’比較 JBINPUT;小于28H=<則重新輸入 CMPAL,39H JAINPUT;大于39H=9則重新輸入 CMPAL,2FH;判斷是數(shù)字還是符號 JBELET1;是符號轉(zhuǎn)入響應(yīng)操作 INCWORDPTRSIGN1;是數(shù)字的話將數(shù)字標(biāo)志位加1 SUBAL,30H MOVAH,0 XCHGAX,[DI] MULBX MOVBX,10 XCHGAX,[DI] ADD[DI],AX JMPINPUTCALLFUNRETMAINENDPFUNPROCNEAR;***********************************************************LET0: CMPWORDPTRSIGN2,0;判斷配對標(biāo)志位 JELET1;經(jīng)過左括號和右括號抵消為0則跳轉(zhuǎn) JMPLET8;否則跳轉(zhuǎn)到BC顯示輸入錯誤LET1: CMPWORDPTRSIGN1,0 JELET2 ADDDI,2; MOVWORDPTRSIGN1,0;將數(shù)字標(biāo)志位復(fù)0LET2: CALLDYFQ;設(shè)定優(yōu)先級 CMPCH,5;判斷輸入的符號是否是左括號 JNELET3;不是則判斷輸入的是否是右括號 INCWORDPTRSIGN2;是左括號,括號標(biāo)志位加1LET3: CMPCH,1;判斷輸入的是否是右括號 JNELET4 DECWORDPTRSIGN2;是右括號,括號標(biāo)志位減1LET4: CMPBYTEPTR[SI],'$';判斷運算符存儲區(qū)是否為空 JELET6 CMPCH,[SI];[SI]的容為前一個符號或其權(quán)值 JALET6 CMPBYTEPTR[SI],'<' JNELET5 DECSI JMPINPUTLET5: DECSI MOVCL,[SI] CALLYS;判斷是什么運算符并進行相應(yīng)的計算 JMPLET4LET6: CMPCH,0;判斷是否是等號 JEOUTPUT CMPCH,1 JEINPUT;">"不保存,輸入下一個數(shù) INCSI MOV[SI],AL;保存符號 INCSI CMPCH,5;判斷是否是左括號 JNELET7 MOVCH,2;改變<的權(quán)值LET7: MOV[SI],CH;緊跟著保存符號的權(quán)值 JMPINPUTLET8: LEADX,ERROR MOVAH,9 INT21H JMPEXITRETFUNENDP;**********************************************************************DYFQPROC;子程序DYFQ調(diào)用宏FQ,判斷優(yōu)先級FQ28H,1,5;調(diào)用宏FQ為<賦權(quán)值S1:FQ29H,2,1;調(diào)用宏FQ為>賦權(quán)值S2:FQ2AH,3,4;調(diào)用宏FQ為*賦權(quán)值S3:FQ2FH,4,4;調(diào)用宏FQ為/賦權(quán)值S4:FQ2BH,5,3;調(diào)用宏FQ為+賦權(quán)值S5:FQ2DH,6,3;調(diào)用宏FQ為-賦權(quán)值S6:FQ3DH,7,0;調(diào)用宏FQ為=賦權(quán)值S7:RETDYFQENDP;*********************************************OUTPUT:;輸出運算結(jié)果 SUBDI,2 CMPWORDPTR[DI],0 JGEK1 NEGWORDPTR[DI];求負(fù)數(shù)的絕對值 MOVDL,'-' MOVAH,2 INT21HK1: MOVBX,10000 MOVCX,5 MOVSI,0K2: MOVAX,[DI] CWD DIVBX MOV[DI],DX CMPAL,0 JNEK3 CMPSI,0 JNEK3 CMPCX,1 JEK3 JMPK4K3: MOVDL,AL ADDDL,30H MOVAH,2 INT21H MOVSI,1K4: MOVAX,BX;實現(xiàn)將10000變?yōu)?000,100,10 MOVDX,0 MOVBX,10 DIVBX MOVBX,AX LOOPK2 HCHH SHOWSTR7 MOVAH,1 INT21H CMPAL,'n';判斷是否繼續(xù)輸入,輸入n則結(jié)束操作 JEEXIT CMPAL,'N' JEEXIT MOVWORDPTR[DI+2],0 LEADI,NUMBER LEASI,OPERATOR JMPSTART1EXIT: MOVAH,4CH INT21HYSPROCNEAR;子程序,進行相應(yīng)的運算 PUSHAX MOVAX,0 MOVBX,0 CMPCL,2AH;乘法運算 JNECHU SUBDI,2 XCHGBX,[DI] SUBDI,2 XCHGAX,[DI] IMULBX MOV[DI],AX ADDDI,2 JMPFINISHCHU: CMPCL,2FH;除法運算 JNEJIA SUBDI,2 XCHGBX,[DI] SUBDI,2 XCHGAX,[DI] CWD IDIVBX MOV[DI],AX ADDDI,2 JMPFINISHJIA: CMPCL,2BH;加法運算 JNEJIAN SUBDI,2 XCHGBX,[DI] SUBDI,2 ADD[DI],BX ADDDI,2 JMPFINISHJIAN: CMPCL,2DH;減法運算 JNEFINISH SUBDI,2 XCHGBX,[DI] SUBDI,2 SUB[DI],BX ADDDI,2FINISH: POPAX RETYSENDP;******************************************************

溫馨提示

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

評論

0/150

提交評論