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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優(yōu)質文檔-傾情為你奉上課程設計說明書題目: 表達式計算器 學號:班級: 計算機創(chuàng)新實驗班姓名:廖福軒 目錄計算器匯編語言程序設計一設計內容從鍵盤輸入一個十進制兩位數(shù)的四則運算表達式,如23*56(8*19)/6678,編程計算表達式的值,輸出十進制結果(有可能是三位或四位十進制),*/位置任意。并要求程序能反復執(zhí)行直道對“還要繼續(xù)嗎?(y/n)”之類的提示回答“n”或“N”為止。四則運算主要包括以下幾個模塊:(1) 主程序模塊.(2) 賦權宏模塊.(3) 加減乘除運算子程序模塊.(4) 調用賦權宏子程序模塊.(5) 回車換行宏模塊.(6) 9號功能顯示字符串宏模塊.二設計方案1.主程序模塊

2、.主程序初始化數(shù)據(jù)段,調用顯示宏show顯示界面,輸入字符或數(shù)字并判斷,調用子程序dyfq調用賦權宏fq為符號賦權,從而判斷優(yōu)先級,調用加減乘除運算子程序ys對判斷出的相應運算符進行運算,輸出運算結果,判斷是否繼續(xù),繼續(xù)則返回輸入,不繼續(xù)則退出程序.2.賦權宏模塊.通過定義宏fq,定義了變元a,b進行參數(shù)傳遞,并使用替換運算符&使變元a與標號s對應.接著給對應的符號賦予權值,將其權值存入ch中.3.加減乘除運算子程序模塊.運算模塊實現(xiàn)了將ax入棧保存,然后將ax,bx賦值為0,判斷cl中的符號是否為乘號*,若為乘號*則將number中的數(shù)字與其下一位的數(shù)字相乘,并把結果存入該位置,類似

3、的若不為乘號*則接著判斷是否為除號/,若為除號/則進行除法運算,然后判斷是否為加法,為加法則進行加法運算,接著判斷是否為減法,為減法則進行減法運算并將結果存入當前的計算的第二個數(shù)的位置.4.調用賦權宏子程序模塊.該模塊實現(xiàn)了調用賦權宏fq為(,),*,/,+,-,=等符號分別賦權值為5,1,4,4,3,3,0.從而可以通過設定的權值來判斷優(yōu)先級.5.回車換行宏模塊.通過2號功能的輸出功能,將0dh賦予dl輸出,再調用2號功能,將0ah賦予dl輸出,從而實現(xiàn)回車換行功能.6.9號功能顯示字符串宏模塊.通過定義宏show,用9號顯示功能,通過變元str將字符串顯示出來。三設計框圖開始加載數(shù)據(jù)段附加

4、段顯示界面input輸入數(shù)字或字符輸入的是=,數(shù)字,符號?SIGN1=0?保存數(shù)字顯示錯誤=數(shù)字符號SIGN2=0?ny下移2位將SIGN1賦0設優(yōu)先級,并判斷是何符號ny根據(jù)符號決定運算,將值存入numbOutput通過2號功能顯示結果是否繼續(xù)?結束ynDi+2取number,operator的偏移地址四程序代碼DATAS SEGMENT STR1 DB 0AH,0DH,'*$' STR2 DB 13,10, '* 1 2 3 4 5 *$' STR3 DB 13,10, '* 6 7 8 9 0 *$' STR4 DB 13,10, '

5、;* + - * / = *$' 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代表輸入的符號是匹配的,為1輸入的符號不匹配 NUMBER DW 20 DUP(0) ;保存輸入的數(shù)值 OPERATOR DB '$' ;判斷輸入的運算符是否為空 DB 10 DUP(0) ;保存該運算符對應的權

6、值 ERROR DB 'WRONG!$' DATAS ENDSSHOW MACRO STR ;宏定義,顯示字符串 LEA DX,STR MOV AH,9 INT 21H ENDMFQ MACRO ASCII,A,B ;宏定義,給運算符賦權值 CMP AL,ASCII JNE S&A MOV CH,B JMP S7 ENDMHCHH MACRO ;宏定義,回車換行 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,

7、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 21H CMP AL,'=' JE LET0 CMP AL,28H ;第二種情況,第一次輸入的與28H也就是(比較 JB INPUT ;小于28H=(則重新輸入 CMP AL,39H JA I

8、NPUT ;大于39H=9則重新輸入 CMP AL,2FH ;判斷是數(shù)字還是符號 JBE LET1 ;是符號轉入響應操作 INC WORD PTR SIGN1 ;是數(shù)字的話將數(shù)字標志位加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 FUN PROC NEAR;*LET0: CMP WORD PTR SIGN2,0;判斷配對標志位 JE LET1 ;經過左括號和右括號抵消為0則跳轉 JMP LET8 ;否則跳轉到BC顯示輸入錯誤LET1:C

9、MP WORD PTR SIGN1,0 JE LET2 ADD DI,2 ; MOV WORD PTR SIGN1,0 ;將數(shù)字標志位復0LET2:CALL DYFQ ;設定優(yōu)先級 CMP CH,5 ;判斷輸入的符號是否是左括號 JNE LET3 ;不是則判斷輸入的是否是右括號 INC WORD PTR SIGN2 ;是左括號,括號標志位加1LET3: CMP CH,1 ;判斷輸入的是否是右括號 JNE LET4 DEC WORD PTR SIGN2 ;是右括號,括號標志位減1 LET4: CMP BYTE PTRSI,'$' ;判斷運算符存儲區(qū)是否為空 JE LET6 CMP

10、 CH,SI ;SI的內容為前一個符號或其權值 JA LET6 CMP BYTE PTRSI,'(' JNE LET5 DEC SI JMP INPUTLET5: DEC SI MOV CL,SI CALL YS ;判斷是什么運算符并進行相應的計算 JMP LET4 LET6: CMP CH,0 ;判斷是否是等號 JE OUTPUT CMP CH,1 JE INPUT ;“)”不保存,輸入下一個數(shù) INC SI MOV SI,AL ;保存符號 INC SI CMP CH,5 ;判斷是否是左括號 JNE LET7 MOV CH,2 ;改變(的權值LET7: MOV SI,CH ;

11、緊跟著保存符號的權值 JMP INPUT LET8: LEA DX,ERROR MOV AH,9 INT 21H JMP EXIT RETFUN ENDP;*DYFQ PROC ;子程序DYFQ調用宏FQ,判斷優(yōu)先級 FQ 28H,1,5 ;調用宏FQ為(賦權值S1:FQ 29H,2,1 ;調用宏FQ為)賦權值S2:FQ 2AH,3,4 ;調用宏FQ為*賦權值S3:FQ 2FH,4,4 ;調用宏FQ為/賦權值S4:FQ 2BH,5,3 ;調用宏FQ為+賦權值S5:FQ 2DH,6,3 ;調用宏FQ為-賦權值S6:FQ 3DH,7,0 ;調用宏FQ為=賦權值S7:RETDYFQ ENDP;* O

12、UTPUT: ;輸出運算結果 SUB DI,2 CMP WORD PTRDI,0 JGE K1 NEG WORD PTRDI ;求負數(shù)的絕對值 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 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 ;實現(xiàn)將100

13、00變?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則結束操作 JE EXIT CMP AL,'N' JE EXIT MOV WORD PTRDI+2,0 LEA DI,NUMBER LEA SI,OPERATOR JMP START1EXIT: MOV AH,4CH INT 21HYS PROC NEAR ;子程序,進行相應的運算 PUSH AX MOV AX,0 MOV BX,0

14、CMP CL,2AH ;乘法運算 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 ;除法運算 JNE JIA SUB DI,2 XCHG BX,DI SUB DI,2 XCHG AX,DI CWD IDIV BX MOV DI,AX ADD DI,2 JMP FINISHJIA: CMP CL,2BH ;加法運算 JNE JIAN SUB DI,2 XCHG BX,DI SUB DI,2 ADD DI,BX ADD DI,2 JMP FINI

15、SHJIAN: CMP CL,2DH ;減法運算 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五運行結果六設計總結 本次設計讓我學到了很多關于匯編的知識,首先,本次設計是以四則運算為主題,通過在課堂上學習的基本知識和基本方法以及平時積累的知識和方法來實現(xiàn)對帶符號數(shù)的加減乘除運算,在設計過程中,對我已有的知識進行了鞏固,對我之前不太了解的知識有了一定的了解,通過親身去編寫程序,使得自己的實際動手能力得以增強。其次,通過本次設計,使我對模塊化,結構化的程序設計方法掌握的更加透徹,再者,就是對于宏的定義,調用以及子程序的定義,調用的方法掌握的更加熟練。本次設計是要實現(xiàn)對有符號數(shù)的加減乘除等四則運算,程序開始先定義了顯示界面的諸多字符串,經過顯示界面,接下來,定義了判斷數(shù)字和判斷運算符的存儲區(qū),通過這兩個存儲區(qū)來判斷當前位置輸入的是數(shù)字還是運算符,然后,定義了保存數(shù)字和保存運算符的存儲區(qū),提示錯誤的字符串,顯示宏,賦權宏,回車換行宏等,通過主程序對各個宏及子程序的調用,判斷出輸入的是數(shù)字還是運算符,若是運算符又是運算符中的哪類運算符,然后,進行加

溫馨提示

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

評論

0/150

提交評論