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

下載本文檔

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

文檔簡(jiǎn)介

1、課程設(shè)計(jì)說明書題目: 表達(dá)式計(jì)算器 學(xué)號(hào):41212241班級(jí): 計(jì)算機(jī)創(chuàng)新實(shí)驗(yàn)班姓名:廖福軒 目錄一設(shè)計(jì)內(nèi)容2二設(shè)計(jì)方案21.主程序模塊.22.賦權(quán)值模塊.23.加減乘除運(yùn)算子程序模塊.24.調(diào)用賦權(quán)宏子程序模塊.25.回車換行宏模塊.26.9號(hào)功能顯示字符串宏模塊.2三設(shè)計(jì)框圖3四程序代碼4五運(yùn)行結(jié)果9六設(shè)計(jì)總結(jié)9計(jì)算器匯編語言程序設(shè)計(jì)一設(shè)計(jì)內(nèi)容從鍵盤輸入一個(gè)十進(jìn)制兩位數(shù)的四則運(yùn)算表達(dá)式,如23*56(8*19)/6678,編程計(jì)算表達(dá)式的值,輸出十進(jìn)制結(jié)果(有可能是三位或四位十進(jìn)制),*/位置任意。并要求程序能反復(fù)執(zhí)行直道對(duì)“還要繼續(xù)嗎?(y/n)”之類的提示回答“n”或“N”為止。四則

2、運(yùn)算主要包括以下幾個(gè)模塊:(1) 主程序模塊.(2) 賦權(quán)宏模塊.(3) 加減乘除運(yùn)算子程序模塊.(4) 調(diào)用賦權(quán)宏子程序模塊.(5) 回車換行宏模塊.(6) 9號(hào)功能顯示字符串宏模塊.二設(shè)計(jì)方案1.主程序模塊.主程序初始化數(shù)據(jù)段,調(diào)用顯示宏show顯示界面,輸入字符或數(shù)字并判斷,調(diào)用子程序dyfq調(diào)用賦權(quán)宏fq為符號(hào)賦權(quán),從而判斷優(yōu)先級(jí),調(diào)用加減乘除運(yùn)算子程序ys對(duì)判斷出的相應(yīng)運(yùn)算符進(jìn)行運(yùn)算,輸出運(yùn)算結(jié)果,判斷是否繼續(xù),繼續(xù)則返回輸入,不繼續(xù)則退出程序.2.賦權(quán)宏模塊.通過定義宏fq,定義了變?cè)猘,b進(jìn)行參數(shù)傳遞,并使用替換運(yùn)算符&使變?cè)猘與標(biāo)號(hào)s對(duì)應(yīng).接著給對(duì)應(yīng)的符號(hào)賦予權(quán)值,將其

3、權(quán)值存入ch中.3.加減乘除運(yùn)算子程序模塊.運(yùn)算模塊實(shí)現(xiàn)了將ax入棧保存,然后將ax,bx賦值為0,判斷cl中的符號(hào)是否為乘號(hào)*,若為乘號(hào)*則將number中的數(shù)字與其下一位的數(shù)字相乘,并把結(jié)果存入該位置,類似的若不為乘號(hào)*則接著判斷是否為除號(hào)/,若為除號(hào)/則進(jìn)行除法運(yùn)算,然后判斷是否為加法,為加法則進(jìn)行加法運(yùn)算,接著判斷是否為減法,為減法則進(jìn)行減法運(yùn)算并將結(jié)果存入當(dāng)前的計(jì)算的第二個(gè)數(shù)的位置.4.調(diào)用賦權(quán)宏子程序模塊.該模塊實(shí)現(xiàn)了調(diào)用賦權(quán)宏fq為(,),*,/,+,-,=等符號(hào)分別賦權(quán)值為5,1,4,4,3,3,0.從而可以通過設(shè)定的權(quán)值來判斷優(yōu)先級(jí).5.回車換行宏模塊.通過2號(hào)功能的輸出功能

4、,將0dh賦予dl輸出,再調(diào)用2號(hào)功能,將0ah賦予dl輸出,從而實(shí)現(xiàn)回車換行功能.6.9號(hào)功能顯示字符串宏模塊.通過定義宏show,用9號(hào)顯示功能,通過變?cè)猻tr將字符串顯示出來。三設(shè)計(jì)框圖開始加載數(shù)據(jù)段附加段顯示界面input輸入數(shù)字或字符輸入的是=,數(shù)字,符號(hào)?SIGN1=0?保存數(shù)字顯示錯(cuò)誤=數(shù)字符號(hào)SIGN2=0?ny下移2位將SIGN1賦0設(shè)優(yōu)先級(jí),并判斷是何符號(hào)ny根據(jù)符號(hào)決定運(yùn)算,將值存入numbOutput通過2號(hào)功能顯示結(jié)果是否繼續(xù)?結(jié)束ynDi+2取number,operator的偏移地址四程序代碼DATAS SEGMENT STR1 DB 0AH,0DH,'*$

5、' STR2 DB 13,10, '* 1 2 3 4 5 *$' STR3 DB 13,10, '* 6 7 8 9 0 *$' STR4 DB 13,10, '* + - * / = *$' STR5 DB 0AH,0DH,'*$' STR6 DB 13,10, 'PLEASE INPUT A FORMULA: $' STR7 DB 'CONTINUE(Y/N)?$' SIGN1 DW 0 ;值為0代表輸入的不是數(shù)字,為1代表輸入的是數(shù)字 SIGN2 DW 0 ;值為0代表輸入的符號(hào)是匹

6、配的,為1輸入的符號(hào)不匹配 NUMBER DW 20 DUP(0) ;保存輸入的數(shù)值 OPERATOR DB '$' ;判斷輸入的運(yùn)算符是否為空 DB 10 DUP(0) ;保存該運(yùn)算符對(duì)應(yīng)的權(quán)值 ERROR DB 'WRONG!$' DATAS ENDSSHOW MACRO STR ;宏定義,顯示字符串 LEA DX,STR MOV AH,9 INT 21H ENDMFQ MACRO ASCII,A,B ;宏定義,給運(yùn)算符賦權(quán)值 CMP AL,ASCII JNE S&A MOV CH,B JMP S7 ENDMHCHH MACRO ;宏定義,回車換行

7、MOV AH,2 MOV DL,0DH INT 21H MOV AH,2 MOV DL,0AH INT 21H ENDM CODES SEGMENT MAIN PROC FAR ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX LEA DI,NUMBER LEA SI,OPERATOR SHOW STR1 SHOW STR2 SHOW STR3 SHOW STR4 SHOW STR5 SHOW STR6 MOV AX,0 MOV BX,0 MOV CX,0 MOV DX,0 START1: HCHHINPUT: MOV AH,1 INT

8、 21H CMP AL,'=' JE LET0 CMP AL,28H ;第二種情況,第一次輸入的與28H也就是(比較 JB INPUT ;小于28H=(則重新輸入 CMP AL,39H JA INPUT ;大于39H=9則重新輸入 CMP AL,2FH ;判斷是數(shù)字還是符號(hào) JBE LET1 ;是符號(hào)轉(zhuǎn)入響應(yīng)操作 INC WORD PTR SIGN1 ;是數(shù)字的話將數(shù)字標(biāo)志位加1 SUB AL,30H MOV AH,0 XCHG AX,DI MUL BX MOV BX,10 XCHG AX,DI ADD DI,AX JMP INPUT CALL FUNRETMAIN ENDP

9、FUN PROC NEAR;*LET0: CMP WORD PTR SIGN2,0;判斷配對(duì)標(biāo)志位 JE LET1 ;經(jīng)過左括號(hào)和右括號(hào)抵消為0則跳轉(zhuǎn) JMP LET8 ;否則跳轉(zhuǎn)到BC顯示輸入錯(cuò)誤LET1:CMP WORD PTR SIGN1,0 JE LET2 ADD DI,2 ; MOV WORD PTR SIGN1,0 ;將數(shù)字標(biāo)志位復(fù)0LET2:CALL DYFQ ;設(shè)定優(yōu)先級(jí) CMP CH,5 ;判斷輸入的符號(hào)是否是左括號(hào) JNE LET3 ;不是則判斷輸入的是否是右括號(hào) INC WORD PTR SIGN2 ;是左括號(hào),括號(hào)標(biāo)志位加1LET3: CMP CH,1 ;判斷輸入的是否

10、是右括號(hào) JNE LET4 DEC WORD PTR SIGN2 ;是右括號(hào),括號(hào)標(biāo)志位減1 LET4: CMP BYTE PTRSI,'$' ;判斷運(yùn)算符存儲(chǔ)區(qū)是否為空 JE LET6 CMP CH,SI ;SI的內(nèi)容為前一個(gè)符號(hào)或其權(quán)值 JA LET6 CMP BYTE PTRSI,'(' JNE LET5 DEC SI JMP INPUTLET5: DEC SI MOV CL,SI CALL YS ;判斷是什么運(yùn)算符并進(jìn)行相應(yīng)的計(jì)算 JMP LET4 LET6: CMP CH,0 ;判斷是否是等號(hào) JE OUTPUT CMP CH,1 JE INPUT ;

11、“)”不保存,輸入下一個(gè)數(shù) INC SI MOV SI,AL ;保存符號(hào) INC SI CMP CH,5 ;判斷是否是左括號(hào) JNE LET7 MOV CH,2 ;改變(的權(quán)值LET7: MOV SI,CH ;緊跟著保存符號(hào)的權(quán)值 JMP INPUT LET8: LEA DX,ERROR MOV AH,9 INT 21H JMP EXIT RETFUN ENDP;*DYFQ PROC ;子程序DYFQ調(diào)用宏FQ,判斷優(yōu)先級(jí) FQ 28H,1,5 ;調(diào)用宏FQ為(賦權(quán)值S1:FQ 29H,2,1 ;調(diào)用宏FQ為)賦權(quán)值S2:FQ 2AH,3,4 ;調(diào)用宏FQ為*賦權(quán)值S3:FQ 2FH,4,4

12、;調(diào)用宏FQ為/賦權(quán)值S4:FQ 2BH,5,3 ;調(diào)用宏FQ為+賦權(quán)值S5:FQ 2DH,6,3 ;調(diào)用宏FQ為-賦權(quán)值S6:FQ 3DH,7,0 ;調(diào)用宏FQ為=賦權(quán)值S7:RETDYFQ ENDP;* OUTPUT: ;輸出運(yùn)算結(jié)果 SUB DI,2 CMP WORD PTRDI,0 JGE K1 NEG WORD PTRDI ;求負(fù)數(shù)的絕對(duì)值 MOV DL,'-' MOV AH,2 INT 21HK1: MOV BX,10000 MOV CX,5 MOV SI,0K2: MOV AX,DI CWD DIV BX MOV DI,DX CMP AL,0 JNE K3 CMP

13、 SI,0 JNE K3 CMP CX,1 JE K3 JMP K4K3: MOV DL,AL ADD DL,30H MOV AH,2 INT 21H MOV SI,1K4: MOV AX,BX ;實(shí)現(xiàn)將10000變?yōu)?000,100,10 MOV DX,0 MOV BX,10 DIV BX MOV BX,AX LOOP K2 HCHH SHOW STR7 MOV AH,1 INT 21H CMP AL,'n' ;判斷是否繼續(xù)輸入,輸入n則結(jié)束操作 JE EXIT CMP AL,'N' JE EXIT MOV WORD PTRDI+2,0 LEA DI,NUMB

14、ER LEA SI,OPERATOR JMP START1EXIT: MOV AH,4CH INT 21HYS PROC NEAR ;子程序,進(jìn)行相應(yīng)的運(yùn)算 PUSH AX MOV AX,0 MOV BX,0 CMP CL,2AH ;乘法運(yùn)算 JNE CHU SUB DI,2 XCHG BX,DI SUB DI,2 XCHG AX,DI IMUL BX MOV DI,AX ADD DI,2 JMP FINISHCHU: CMP CL,2FH ;除法運(yùn)算 JNE JIA SUB DI,2 XCHG BX,DI SUB DI,2 XCHG AX,DI CWD IDIV BX MOV DI,AX A

15、DD DI,2 JMP FINISHJIA: CMP CL,2BH ;加法運(yùn)算 JNE JIAN SUB DI,2 XCHG BX,DI SUB DI,2 ADD DI,BX ADD DI,2 JMP FINISHJIAN: CMP CL,2DH ;減法運(yùn)算 JNE FINISH SUB DI,2 XCHG BX,DI SUB DI,2 SUB DI,BX ADD DI,2FINISH: POP AX RETYS ENDP;*CODES ENDS END START五運(yùn)行結(jié)果六設(shè)計(jì)總結(jié) 本次設(shè)計(jì)讓我學(xué)到了很多關(guān)于匯編的知識(shí),首先,本次設(shè)計(jì)是以四則運(yùn)算為主題,通過在課堂上學(xué)習(xí)的基本知識(shí)和基本方法

16、以及平時(shí)積累的知識(shí)和方法來實(shí)現(xiàn)對(duì)帶符號(hào)數(shù)的加減乘除運(yùn)算,在設(shè)計(jì)過程中,對(duì)我已有的知識(shí)進(jìn)行了鞏固,對(duì)我之前不太了解的知識(shí)有了一定的了解,通過親身去編寫程序,使得自己的實(shí)際動(dòng)手能力得以增強(qiáng)。其次,通過本次設(shè)計(jì),使我對(duì)模塊化,結(jié)構(gòu)化的程序設(shè)計(jì)方法掌握的更加透徹,再者,就是對(duì)于宏的定義,調(diào)用以及子程序的定義,調(diào)用的方法掌握的更加熟練。本次設(shè)計(jì)是要實(shí)現(xiàn)對(duì)有符號(hào)數(shù)的加減乘除等四則運(yùn)算,程序開始先定義了顯示界面的諸多字符串,經(jīng)過顯示界面,接下來,定義了判斷數(shù)字和判斷運(yùn)算符的存儲(chǔ)區(qū),通過這兩個(gè)存儲(chǔ)區(qū)來判斷當(dāng)前位置輸入的是數(shù)字還是運(yùn)算符,然后,定義了保存數(shù)字和保存運(yùn)算符的存儲(chǔ)區(qū),提示錯(cuò)誤的字符串,顯示宏,賦權(quán)宏,回車換行宏等,通過主程序?qū)Ω鱾€(gè)宏及子程序的調(diào)用,判斷出輸入的是數(shù)字還是運(yùn)算符,若是運(yùn)算符又是運(yùn)算符中

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論