表達式求值程序設計說明書_第1頁
表達式求值程序設計說明書_第2頁
表達式求值程序設計說明書_第3頁
表達式求值程序設計說明書_第4頁
表達式求值程序設計說明書_第5頁
已閱讀5頁,還剩32頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、匯編語言實訓 課程設計任務書題 目: 表達式求值程序 班 級: 計算機科學與技術一班 學生姓名: 趙旭堯 學 號: 14730141 題目類型: 軟件工程(R) 指導教師: 劉樹群 一 題目簡介該設計要求學生使用匯編語言,設計并開發出針對四則運算表達式進行求值的命令行或窗口程序。通過該題目的設計過程,可以培養學生結構化程序設計的思想,加深對匯編語言基本語言要素和流程結構的理解,針對匯編語言中的重點和難點內容進行訓練,獨立完成有一定工作量的程序設計任務,同時強調好的程序設計風格。得到軟件工程的綜合訓練,提高解決實際問題的能力。二 設計任務1、查閱文獻資料,一般在5篇以上;2、通過鍵盤輸入表達式,

2、進行針對整數的 “加減乘除”四則運算表達式進行求值,有良好的界面;3、完成軟件結構設計和算法設計;4、完成系統的軟件開發和測試工作;5、撰寫設計說明書;6、做好答辯工作。三 主要內容、功能及技術指標1、實現功能及指標:使用Win32的窗口程序模式,實現表達式求值程序及測試界面程序的設計與開發;支持整數的四則運算、位運算和小括號等;使用文本框對表達式進行交互式編輯和輸出。2、問題分析及解決方案框架確定:充分地分析和理解問題本身,弄清要求做什么。在確定解決方案框架過程中,綜合考慮系統功能,考慮怎樣使系統結構清晰、合理、簡單和易于調試。最后確定每個過程和函數的簡單功能,以及過程(或函數)之間的調用關

3、系,并畫出函數之間的調用關系圖。3、詳細設計和編碼:定義相應的存儲結構,確定各個函數的算法,并畫出流程圖,在此基礎上進行代碼設計,每個明確的功能模塊程序一般不超過200行,否則要進一步劃分。4、完成課程設計報告 需求和規格說明:設計題目和問題描述:題目要解決的問題是什么; 設計思路:主要算法思想,程序功能圖,函數之間的調用關系圖; 設計表示:每個函數或過程的功能,列出每個過程或函數所調用的過程或函數,并畫出各函數的流程圖; 詳細設計:主要算法的偽代碼; 調試報告:調試過程中遇到的主要問題,是如何解決的;對設計和編碼的回顧討論和分析;改進設想;經驗和體會等; 程序實現注釋; 附錄:源程序清單和結

4、果。如果題目規定了測試數據,則結果要求包含這些測試數據和運行輸出,當然還可以含其他測試數據和運行輸出。四 提交的成果1. 設計說明書一份,內容包括:1) 中文摘要100字;關鍵詞3-5個;2) 前言;3) 系統分析(包含需要的系統流程圖);4) 系統總體設計(包含總體軟件結構圖、總體數據結構);5) 詳細設計;6) 系統測試(包含測試方案、測試用例、測試結果及軟件可靠性分析);7) 軟件使用說明書(核心界面說明);8) 設計總結、參考文獻、致謝等。2. 刻制光盤一張。五 主要參考文獻1 王爽.匯編語言(第二版).清華大學出版社, 2008。2 沈美明,溫冬嬋.IBM-PC匯編語言程序設計(第二

5、版).清華大學出版社, 2001。3 美Kip R.Irvine著,溫玉潔,等譯.Intel匯編語言程序設計(第五版).電子工業出版社, 2007。4 錢曉捷.匯編語言程序設計(第二版). 電子工業出版社, 2003。5 羅云彬.Windows環境下32位匯編語言程序設計(第二版).電子工業出版社, 2006。6 Windows API函數參考手冊.人民郵電出版社, 2002。六 各階段時間安排(共1周):日期內容地點星期一教師講解設計要求,準備參考資料機房星期二分析系統,方案設計機房星期三方案設計,編程機房星期四編程機房星期五編程,答辯機房摘要隨著時代的進步,人們不再使用古代的計算器。取而代

6、之的是現今利用計算機編程技術的產品計算器,這節省了人們大量的計算時間。通過電流在晶體管等上面的存儲信息,將人們想要計算的數字,通過重復的加減乘除運算從而計算實現出來。本程序是利用匯編語言的編譯環境masmplus來實現的。程序通過將讀入的中綴表達式轉換為后綴表達式,然后讀取后綴表達式,輸出結果。關鍵字:匯編語言;Masmplus;中綴表達式;后綴表達式目錄1 概述11.1課程了解11.2 課程設計目的11.3 課程設計內容11.4系統功能模塊的劃分12 系統需求分析22.1 系統目標22.2 主體功能22.3 開發環境22.4系統功能模塊的分析23系統分析33.1系統總體分析33.2優先級的判

7、斷43.3表達式的四則運算44系統詳細設計54.1在匯編環境下輸入并保存操作數54.2保存運算符和比較運算符的優先級54.3表達式的四則運算84.4算法的清零和回車換行84.5輸出計算結果104.6括號和負號的細節問題125系統測試145.1加法運算145.2減法運算145.3乘法運算145.4除法運算155.5混合運算156軟件使用說明16設計總結17參考文獻18致謝19附錄201 概述 1.1課程了解表達式計算是實現程序設計語言的基本問題之一。設計一個程序,演示通過將數學表達式字符串轉化為后綴表達式,并通過后綴表達式結合棧的應用實現對算術表達式進行四則混合運算。在計算機中,算術表達式由常量

8、、變量、運算符和括號組成。由于不同的運算符具有不同的優先級,又要考慮括號,因此,算術表達式的求值不可能嚴格地從左到右進行。在讀入表達式的字符序列的同時完成運算符和運算數的識別處理,然后進行運算數的數值轉換在進行四則運算。在運算之后輸出正確運算結果。1.2 課程設計目的 1要求學生達到熟練掌握匯編語言的基本知識和技能。 2了解并掌握匯編語言的設計方法,具備初步的獨立分析和設計能力。 3提高程序設計和調試能力。學生通過上機實習,驗證自己設計的算法的正確性。學會有效利用基本調試方法,迅速找出程序代碼中的錯誤并且修改。 4培養算法分析能力。分析所設計算法的時間復雜度和空間復雜度,進一步提高程序設計水平

9、。5初步掌握軟件開發過程的問題分析、系統設計、程序編碼、測試等基本方法和技能。 1.3 課程設計內容 程序功能:對實數內的加減乘除乘方運算能正確的運算出結果,并能正確對錯誤輸入和無定義的運算報錯,能連續測試多組數據。設計一個表達式求值的程序。該程序必須可以接受包含(,),+,-,*,/,%,和(求冪運算符,ab=ab)的中綴表達式,并求出結果。如果表達式正確,則輸出表達式的結果;如果表達式非法,則輸出錯誤信息。算法運行:將輸入的中綴表達式改為后綴表達式,并進行運算。 算法輸出:輸出后綴表達式和表達式運算結果。1.4系統功能模塊的劃分“表達式求值”包括四個模塊:保存輸入的操作數和運算符

10、;比較各個元素的優先級高低;對算術表達式進行四則運算;輸出所得的結果。2 系統需求分析 2.1 系統目標 設計一個程序,演示用算符優先法對算術表達式求值的過程。利用算符優先關系,實現對算術四則混合運算表達式的求值。其中涉及到對輸入數據和運算符號的保存,比較各個元素之間優先級高低,算法完成清零和按回車換行按等號出結果等問題。2.2 主體功能 能夠處理以字符序列的形式輸入的不含變量的實數表達式,正確處理負數與小數,判斷表達式是否語法正確(包含分母不能為零的情況),正確實現對算術四則混合運算表達式的求值,能夠將計算中遇到的問題和結果以文件的形式予以存儲。 2.3 開發環境 Masmplus2.4系統

11、功能模塊的分析保存輸入的操作數和運算符:只要功能就是把輸入的操作數字和運算符號保存在程序中,再經過子程序的調用,從而來完成算法的計算;比較各個元素的優先級高低:在輸入操作數和運算符號以后,應該先比較元素運算符號的優先級高低從而來決定算法的先后;對算術表達式進行四則運算:這是計算模塊的功能,對已經保存好的操作數和運算符號根據優先級的高低來進行運算;輸出結果:將最后運算所得的結果輸出。3系統分析3.1系統總體分析 保存輸入的運算符保存輸入的數據計算表達式是否合法輸出表達是值輸出錯誤提示結束圖3.1系統總體分析流程圖圖3.1講述在算法的開始,先保存輸入到程序的操作數和運算符并且比較各個運算符之間的優

12、先級先后,然后才能進行計算。最后,若是輸入的表達式錯誤則會輸出錯誤指令,若是正確將會輸出此表達式的計算結果。返回“<”判斷優先級3.2優先級的判斷取得元素優先級低取得元素優先級高返回“>”圖3.2判斷優先級模塊流程圖圖3.2是子程序判斷元素優先級的流程圖。若是取得的元素優先級低則返回“<”,若是取得的優先級高,則輸出“>”。3.3表達式的四則運算輸出結果為x+y輸出結果x*y 符號為*符號為+四則運算(x,y)輸出結果為x/y 符號為/符號為-輸出結果為x-y 圖3.3 四則運算模塊流程圖圖3.3是子程序運算模板流程圖。先輸入操作數和運算符,最后得到結果。4系統詳細設計

13、 我們在編寫整體程序代碼的時候應該先行編寫各個子程序模塊,在確定輸入操作數和運算符的存儲和確定優先級的高低才能進行一個算法表達式的運算。4.1在匯編環境下輸入并保存操作數DSEG SEGMENTSTR1 DB 0AH,0DH, 'please input the expression:("N"jump out)$'SIGN1 DW 0SIGN2 DW 0SIGN3 DW 0NUMB DW 20H DUP(0)在匯編語言的程序編碼壞境下判斷數字是否輸入完畢,判斷括號是否是配對的并且保存已經輸入的數值。4.2保存運算符和比較運算符的優先級NUMB DW 20H

14、DUP(0) MARK DB 'A' DB 10H DUP(0) ;ERROR DB 'YOUR INPUT ARE WRONG$'DSEG ENDSDISP MACRO MLEA DX,MMOV AH,9INT 21HENDMCHOICE MACRO ASC1,HAO1,HH CMP AL,ASC1 ;JNE OTHER&HAO1 ;MOV CH,HH ;JMP OTHER7 ;ENDMCSEG SEGMENTSTART:ASSUME CS:CSEG,DS:DSEGCALL CLEARMOV AX,DSEG ;MOV DS,AX ;LEA DI,NUM

15、B ;LEA SI,MARK ;DISP STR1CALL CRdisp errorMOV AX,0MOV DX,0MOV BX,0MOV CX,0STA1 : CALL CRINPUT:MOV AH,01 ;INT 21H ;CMP AL,'N'JE J_SHUCMP AL,'=' JE PD CMP AL,28H ;JB INPUT ;CMP AL,39H ;JA INPUT ;CMP AL,2FH JBE JUD INC WORD PTR SIGN1 SUB AL,30H MOV AH,0 ;XCHG AX,DI ;MOV BX,10 ;MUL BX ;X

16、CHG AX,DI ;ADD DI,AX ;JMP INPUT ;PD:CMP WORD PTR SIGN2,0 JE JUD ;JMP BC ;JUD:CMP WORD PTR SIGN1,0 JNE FUH ;CMP AL,'-'JNE FUH1MOV DX,0MOV DI,DXFUH:ADD DI,2 ;MOV WORD PTR SIGN1,0;FUH1:CALL ADVANCECMP CH,5 JNE PY INC WORD PTR SIGN2MOV WORD PTR SIGN3,1;PY:CMP CH,1 JNE AGAIN ;DEC WORD PTR SIGN2在保

17、存輸入的數值以后,繼續保存輸入的運算符并且給運算符賦權值,進而判斷各個運算符的優先級。將asc碼轉換成16進制數并判斷數值指針。4.3表達式的四則運算JNE NEXT1SUB DI,2 XCHG BX,DISUB DI,2XCHG AX,DIIMUL BXMOV DI,AXADD DI,2JMP FINISHNEXT1:CMP CL,2FH在判斷好優先級以后,在子程序中判斷是什么運算符便進行相應的計算,以此來完成對一個表達式進行重復的加減乘除運算。4.4算法的清零和回車換行JNE FINISHSUB DI,2XCHG BX,DISUB DI,2SUB DI,BXADD DI,2FINISH:P

18、OP AXRETMATCH ENDPADVANCE PROCCHOICE 28H,1,5 ;(OTHER1: CHOICE 29H,2,1 ;)OTHER2: CHOICE 2AH,3,4 ;*OTHER3: CHOICE 2FH,4,4 ;/OTHER4: CHOICE 2BH,5,3 ;+OTHER5: CHOICE 2DH,6,3 ;-OTHER6: CHOICE 3DH,7,0 ;=OTHER7: RETADVANCE ENDP在程序下運算產生結果之后,要進行另外一個運算,需要輸入全新的操作數和運算符,這樣就會再次對優先級高低進行判斷。這個時候我們需要進行清零操作。clear proc

19、 nearpush axpush bxpush cxpush dxmov ah,06hmov al,01hmov ch,0mov cl,0mov bh,0fHmov dh,18Hmov dl,4FHint 10hmov bh,0mov dx,0MOV AH,02HMOV DL,0INT 10Hpop dxpop cxpop bxpop axretclear endp在此程序中設定的等號是得出運算結果。而回車不是得到結果,回車的功能是換行。4.5輸出計算結果CR PROCPUSH AXPUSH DXMOV ah,2MOV dl,0dhINT 21Hmov ah,2MOV dl,0ahINT 21

20、HPOP DXPOP AXRETCR ENDPOVER:SUB DI,2CMP WORD PTRDI,0JGE W1NEG WORD PTRDI MOV DL,'-'MOV AH,2INT 21HW1:MOV BX,10000MOV CX,5MOV SI,0W2:MOV AX,DIMOV DX,0DIV BXMOV DI,DXCMP AL,0JNE W3CMP SI,0JNE W3CMP CX,1JE W3JMP W4W3:MOV DL,ALADD DL,30HMOV AH,2INT 21HMOV SI,1W4:MOV AX,BXMOV DX,0MOV BX,10DIV BXM

21、OV BX,AXLOOP W2CALL CRJ_SHU1:MOV WORD PTRDI+2,0CALL CRLEA DI,NUMB ;LEA SI,MARKJMP STA1J_SHU:MOV AH,4CHINT 21HCSEG ENDSEND START這段程序來說明當操作數和運算符在優先級高低確定的情況下計算出結果之后,輸出。4.6括號和負號的細節問題CMP CH,5 JNE PY INC WORD PTR SIGN2 MOV WORD PTR SIGN3,1PY:CMP CH,1 JNE AGAIN DEC WORD PTR SIGN2 在輸入運算符-括號的時候,我們應該現行判斷是左括號還

22、是右括號,如果判斷得是左括號則是括號標志位1。若是右括號則括號標志位減1。5系統測試5.1加法運算 圖5.1 加法運算5.2減法運算 圖5.2減法運算5.3乘法運算 圖5.3 乘法運算5.4除法運算 圖5.4除法運算5.5混合運算圖5.5混合運算6軟件使用說明運行程序,彈出運行結果。輸入一個算術表達式,由常量、變量、運算符和括號組成(以字符串形式輸入)。規定操作數可以為正整數也可以為負整數,操作符為“+、-、*、/”,按等號結束并輸出結果。程序運行輸出輸出后綴表達式和表達式運算結果。設計總結匯編語言是一項實用性很強的技術,只有進行實際操作,將理論應用于實際中,才能確實掌握書中的知識點。通過做這

23、次課程設計,我受益匪淺,讓我對匯編的知識有了更深的了解。在這幾天的時間里,我遇到了很多的問題,可以說是一個接一個的來,這個解決了,可是又來了一個。有時候我覺得自己是沒法再寫下去了,但是,有時候我就是不會放棄的,有了不明白的地方,就和同學討論,這讓我更深切的體會到人與人之間的那種相互協調合作的機制。本次的匯編語言課程設計是通過大量的查閱資料和搜索信息資料來完成的,在設計的過程使我掌握了許多的電腦基本技能及理解查閱資料的基本方法,同時經過我的不斷查閱,理解資料,加深了對匯編語言的理解與認識。在設計的整個過程中,我體會到了設計的快樂,和小小的成就感。我的課設利用了很多win32和DOS的調用,有01

24、H號的單字符輸入,09H號的多字符輸出,4CH的過程終止等,還有其他安逸些相關指令,在平時的學習中葉學到過,但是經過此次課設,我對匯編語言的了解會更加深刻。當然,在短時間里不可能掌握匯編語言的全部,還需要在以后的學習中不斷地實踐和積累。參考文獻1 王爽.匯編語言(第二版).清華大學出版社, 2008。2 沈美明,溫冬嬋.IBM-PC匯編語言程序設計(第二版).清華大學出版社, 2001。3 美Kip R.Irvine著,溫玉潔,等譯.Intel匯編語言程序設計(第五版).電子工業出版社, 2007。4 錢曉捷.匯編語言程序設計(第二版). 電子工業出版社, 2003。5 羅云彬.Windows

25、環境下32位匯編語言程序設計(第二版).電子工業出版社, 2006。6 Windows API函數參考手冊.人民郵電出版社, 2002。致謝首先,我們要感謝學校給我們提供了此次課程設計的機會,能讓同學們在一起學習與研究,讓我們有機會對所學的理論知識進行實踐。這次機會讓我們熟練的掌握了課堂上所學的理論知識,并且深度理解了某些代碼所代表的意思。加強了我們的動手能力和理解能力。其次,我們還要特別感謝我們的匯編語言老師以及課程設計輔導老師劉樹群,在他的精心輔導和幫助下,我們的設計才能得以順利完成。對他為我們的設計所提出的寶貴意見表示衷心的感謝!再者,我還要感謝我的同學在設計完成后對程序的測試,沒有他們

26、,也許就難以發現一些潛在的細節錯誤。最后,由衷希望學校多多開展此次類型的課程設計。附錄DSEG SEGMENT STR1 DB 0AH,0DH, 'please input the expression:("N"jump out)$' SIGN1 DW 0 ;判斷數字是否輸入完畢 SIGN2 DW 0 ;判斷括號是否配對 SIGN3 DW 0 ; NUMB DW 20H DUP(0) ;保存輸入的數值 MARK DB 'A' ;保存輸入的運算符 DB 10H DUP(0) ; ERROR DB 'YOUR INPUT ARE WRON

27、G$'DSEG ENDS DISP MACRO M LEA DX,M MOV AH,9 INT 21HENDMCHOICE MACRO ASC1,HAO1,HH ;宏定義,給運算符賦權值 CMP AL,ASC1 ; JNE OTHER&HAO1 ; MOV CH,HH ; JMP OTHER7 ;ENDMCSEG SEGMENTSTART: ASSUME CS:CSEG,DS:DSEG CALL CLEAR MOV AX,DSEG ; MOV DS,AX ; LEA DI,NUMB ; LEA SI,MARK ; DISP STR1 CALL CR disp error MOV

28、 AX,0 MOV DX,0 MOV BX,0 MOV CX,0STA1 : CALL CR INPUT: MOV AH,01 ; INT 21H ; CMP AL,'N' JE J_SHU CMP AL,'=' ; JE PD ;是等號,進一步判斷輸入括號是否配對 CMP AL,28H ; JB INPUT ; CMP AL,39H ; JA INPUT ; CMP AL,2FH ;判斷是數字還是符號 JBE JUD ;是符號轉入響應操作 INC WORD PTR SIGN1 ;將數字標志位加一 SUB AL,30H ;將asc碼轉16進制 MOV AH,0

29、; XCHG AX,DI ; MOV BX,10 ; MUL BX ; XCHG AX,DI ; ADD DI,AX ; JMP INPUT ;PD: CMP WORD PTR SIGN2,0 ;判斷配對標志位 JE JUD ; JMP BC ;JUD: CMP WORD PTR SIGN1,0 ;判斷數值指針是否已經下移一位 JNE FUH ; CMP AL,'-' JNE FUH1 MOV DX,0 MOV DI,DXFUH: ADD DI,2 ; MOV WORD PTR SIGN1,0;FUH1: CALL ADVANCE ;判定優先級, CMP CH,5 ;判斷輸入的

30、是否是左括號 JNE PY ;不是則判斷輸入的是否是右括號 INC WORD PTR SIGN2 ;是左括號,括號標志位1 MOV WORD PTR SIGN3,1;PY: CMP CH,1 ;判斷輸入的是否是右括號 JNE AGAIN ; DEC WORD PTR SIGN2 ;是右括號,括號標志位減1AGAIN: CMP BYTE PTRSI,'A'判斷運算符存儲區是否為空 JE SAVE ; CMP CH,SI ; JA SAVE ; CMP BYTE PTRSI-1,'(' JNE YIDO SUB SI,2 JMP INPUTYIDO: DEC SI

31、; MOV CL,SI ; CALL MATCH ;判斷是什么運算符并進行相應的計算 DEC SI ; JMP AGAIN ;Z_Z: JMP INPUT J_SHU0: JMP J_SHU ;SAVE: CMP CH,0 ; JE OVER ; CMP CH,1 ; JE Z_Z ;“)”不保存,輸入下一個數 INC SI ; MOV SI,AL ; INC SI ; CMP CH,5 ; JNE GO_ON ; MOV CH,2 ;改變(的權值GO_ON: MOV SI,CH ; JMP INPUT ;BC: LEA DX,ERROR ; MOV AH,9 ; INT 21H ; JMP

32、J_SHU ;OVER1: JMP OVER ; MATCH PROC ;子程序,進行相應的運算 PUSH AX ; XOR AX,AX XOR BX,BX CMP CL,2AH ;乘法運算 JNE NEXT1 SUB DI,2 XCHG BX,DI SUB DI,2 XCHG AX,DI IMUL BX MOV DI,AX ADD DI,2 JMP FINISHNEXT1: CMP CL,2FH ;除法運算 JNE NEXT2 SUB DI,2 XCHG BX,DI SUB DI,2 XCHG AX,DICWD IDIV BX MOV DI,AX ADD DI,2 JMP FINISHNEXT2: CMP CL,2BH ;加法運算 JNE NEXT3 SUB DI,2 XCHG BX,DI SUB DI,2 ADD DI,BX ADD DI,2 JMP FINISHNEXT3: CMP CL,2DH

溫馨提示

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

評論

0/150

提交評論