版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 《微機原理與接口技術》課程設計</p><p> 計算機科學與技術學院</p><p><b> 通信工程</b></p><p> 2011-03-20</p><p> 微機原理與匯編語言課程設計</p><p><b> 一. 課程設計目的<
2、;/b></p><p> 每個同學在1-2周時間內,用匯編語言獨立完成一個程序題,以達到熟練運用匯編語言編程實現有比較完整功能的程序的目的。</p><p><b> 三、課程設計題目</b></p><p> 四則運算:從鍵盤輸入一個十進制兩位數的四則運算表達式,如23*56-(8*19)/6+67-8=,編程計算表達式的值,輸
3、出十進制結果(有可能是三位或四位十進制),+-*/位置任意。并要求程序能反復執行直道對“還要繼續嗎?(y/n)”之類的提示回答“n”或“N”為止。</p><p><b> 四、課題分析</b></p><p> 該程序設計的關鍵是要根據四則運算中( )、*、/、+、-、= 的優先級設置符號的權值,其中(、*、/、+、-、)、= 的權值分別設置為5、4、4、3、3
4、、1、0 ,然后根據權值的大小進行運算。程序使用數字標志SIGN1、括號標志SIGN2分別來判斷數字是否輸入完畢和括號是否配對,另外程序定義兩個數據存儲區域 NUMB和MARK,其中NUMB用來保存輸入的或運算的數值,MARK用來保存輸入的符號及其對應的權值。程序不斷判斷輸入的符號是否是左括號‘( ’,當遇到左括號是在存儲區MARK保存其符號,緊跟著將‘( ’的權值改為2并保存之,這是為了使程序運算括號內的表達式,當遇到右括號‘)’時括
5、號內運算將結束。需要注意的是程序執行完括號內表達式的運算及乘除運算后將在存儲區MARK中覆蓋符號(、)、*、/ 及緊跟著的權值,使得程序在運算整個四則運算表達式時當括號內表達式的運算及乘除運算結束后存儲區MARK中只有‘ +、-’ 運算符及緊跟著的權值,然后按照+、- 運算符的左右順序從左到右進行‘ +、- ’運算,當最后遇到等號‘ = ’時輸出表達式的數值,然后再根據提示判斷是否繼續執行下一個四則運算表</p><
6、p> DATAS SEGMENT</p><p> STR1 DB 0AH,0DH,'@******************************************@$'</p><p> STR2 DB 0AH,0DH,'@* *@$'</p>
7、<p> STR3 DB 0AH,0DH,'@* Welcome you ! *@$'</p><p> STR4 DB 0AH,0DH,'@* This is programe of sizeyunsuan *@$'</p><p> STR5 DB 0AH,0DH,'
8、@* Rang(-32768 to 32767) *@$'</p><p> STR6 DB 0AH,0DH,'@* JikeB082 Hanyou 200807014225 *@$'</p><p> STR7 DB 0AH,0DH,'@*
9、 *@$'</p><p> STR8 DB 0AH,0DH,'@******************************************@$'</p><p> MESG DB 0AH,0DH,'Do you want to continue? (y/n) $' </p><p> SIG
10、N1 DW 0 ;判斷數字是否輸入完畢</p><p> SIGN2 DW 0 ;判斷括號是否配對</p><p> NUMB DW 20 DUP(0) ;保存輸入的數值</p><p> MARK DB 'M' ;保存輸入的運算符</p><p> DB 10 DUP(
11、0) </p><p> ERROR DB 'YOUR INPUT IS WRONG$' </p><p> DATAS ENDS</p><p> DISP MACRO STR</p><p> LEA DX,STR</p><p><b> MOV AH,9</b>&
12、lt;/p><p><b> INT 21H</b></p><p><b> ENDM</b></p><p> CHOICE MACRO ASC,HAO,H ;宏定義,給運算符賦權值</p><p> CMP AL,ASC </p><p> JNE OTH&am
13、p;HAO </p><p><b> MOV CH,H </b></p><p> JMP OTH7 </p><p><b> ENDM</b></p><p> CODES SEGMENT </p><p> ASSUME CS:CODES,DS:DAT
14、AS</p><p><b> START: </b></p><p> CALL CLEAR</p><p> MOV AX,DATAS </p><p> MOV DS,AX </p><p> LEA DI,NUMB </p><p> LEA SI
15、,MARK </p><p><b> DISP STR1</b></p><p><b> DISP STR2</b></p><p><b> DISP STR3</b></p><p><b> DISP STR4</b></p>
16、;<p><b> DISP STR5</b></p><p> DISP STR6 </p><p><b> DISP STR7</b></p><p><b> DISP STR8</b></p><p> CALL CR <
17、/p><p> MOV AX,0 </p><p><b> MOV BX,0</b></p><p> MOV CX,0 </p><p> MOV DX,0 </p><p><b> START1: </b></p><p><
18、;b> CALL CR</b></p><p><b> INPUT: </b></p><p> MOV AH,1 </p><p> INT 21H </p><p> CMP AL,'=' </p><p> JE PD
19、 ;是等號,進一步判斷輸入括號是否配對</p><p> CMP AL,28H </p><p> JB INPUT </p><p> CMP AL,39H </p><p> JA INPUT </p><p> CMP AL,2FH ;判斷是數字還
20、是符號</p><p> JBE JUD ;是符號轉入響應操作 </p><p> INC WORD PTR SIGN1 ;將數字標志位加1</p><p> SUB AL,30H ;將ASCII碼轉16進制</p><p> MOV AH,0 </p><
21、;p> XCHG AX,[DI] </p><p><b> MUL BX </b></p><p> MOV BX,10 </p><p> XCHG AX,[DI] </p><p> ADD [DI],AX </p><p> JMP INPUT </p&
22、gt;<p> PD: CMP WORD PTR SIGN2,0 ;判斷配對標志位</p><p><b> JE JUD </b></p><p><b> JMP BC </b></p><p> JUD:CMP WORD PTR SIGN1,0 ;判斷數值指針是否已經下移一位</p
23、><p><b> JE FUH </b></p><p> ADD DI,2 </p><p> MOV WORD PTR SIGN1,0 ;將數字標志位復0</p><p> FUH:CALL ADVANCE ;設定優先級</p><p> CMP CH,5
24、 ;判斷輸入的符號是否是左括號</p><p> JNE PY ;不是則判斷輸入的是否是右括號</p><p> INC WORD PTR SIGN2 ;是左括號,括號標志位加1</p><p><b> PY: </b></p><p> CMP CH,1
25、 ;判斷輸入的是否是右括號</p><p> JNE AGAIN </p><p> DEC WORD PTR SIGN2 ;是右括號,括號標志位減1</p><p><b> AGAIN: </b></p><p> CMP BYTE PTR[SI],'M' ;
26、判斷運算符存儲區是否為空 如23*56-(8*19)/6+67-8=1322</p><p><b> JE SAVE</b></p><p> CMP CH,[SI] ;[SI]的內容為前一個符號或其權值</p><p><b> JA SAVE </b></p>&
27、lt;p> CMP BYTE PTR[SI],'(' </p><p><b> JNE YIDO</b></p><p><b> DEC SI</b></p><p><b> JMP INPUT</b></p><p><b&g
28、t; YIDO:</b></p><p><b> DEC SI </b></p><p> MOV CL,[SI] </p><p> CALL MATCH ;判斷是什么運算符并進行相應的計算</p><p> JMP AGAIN </p><p&g
29、t;<b> SAVE: </b></p><p> CMP CH,0 ;判斷是否是等號</p><p> JE OUTPUT </p><p> CMP CH,1 </p><p> JE INPUT ;“)”不保存,輸入下一個數</p>
30、<p><b> INC SI </b></p><p> MOV [SI],AL ;保存符號</p><p><b> INC SI </b></p><p> CMP CH,5 ;判斷是否是左括號</p><p> JNE G
31、O_ON </p><p> MOV CH,2 ;改變(的權值</p><p><b> GO_ON: </b></p><p> MOV [SI],CH ;緊跟著保存符號的權值</p><p><b> JMP INPUT</b></p
32、><p> BC: LEA DX,ERROR </p><p> MOV AH,9 </p><p><b> INT 21H </b></p><p> JMP J_SHU </p><p> MATCH PROC NEAR ;子程序,進行相應的運算</p&
33、gt;<p><b> PUSH AX </b></p><p><b> XOR AX,AX</b></p><p><b> XOR BX,BX</b></p><p> CMP CL,2AH ;乘法運算</p><p><
34、;b> JNE NEXT1</b></p><p><b> SUB DI,2</b></p><p> XCHG BX,[DI]</p><p><b> SUB DI,2</b></p><p> XCHG AX,[DI]</p><p>&l
35、t;b> IMUL BX</b></p><p> MOV [DI],AX</p><p><b> ADD DI,2</b></p><p> JMP FINISH</p><p> NEXT1:CMP CL,2FH ;除法運算</p><p>&l
36、t;b> JNE NEXT2</b></p><p><b> SUB DI,2</b></p><p> XCHG BX,[DI]</p><p> SUB DI,2 </p><p> XCHG AX,[DI]</p><p><b> CWD<
37、/b></p><p><b> IDIV BX</b></p><p> MOV [DI],AX</p><p><b> ADD DI,2</b></p><p> JMP FINISH</p><p> NEXT2:CMP CL,2BH
38、 ;加法運算</p><p><b> JNE NEXT3</b></p><p><b> SUB DI,2</b></p><p> XCHG BX,[DI]</p><p><b> SUB DI,2</b></p><p> ADD [
39、DI],BX</p><p><b> ADD DI,2</b></p><p> JMP FINISH</p><p> NEXT3:CMP CL,2DH ;減法運算</p><p> JNE FINISH</p><p><b> SUB DI,2<
40、/b></p><p> XCHG BX,[DI]</p><p><b> SUB DI,2</b></p><p> SUB [DI],BX </p><p><b> ADD DI,2</b></p><p><b> FINISH:<
41、/b></p><p><b> POP AX </b></p><p><b> RET</b></p><p> MATCH ENDP</p><p> ADVANCE PROC</p><p> CHOICE 28H,1,5 ;(</p>
42、<p> OTH1:CHOICE 29H,2,1 ;)</p><p> OTH2:CHOICE 2AH,3,4 ;*</p><p> OTH3:CHOICE 2FH,4,4 ;/</p><p> OTH4:CHOICE 2BH,5,3 ;+</p><p> OTH5:CHOICE 2DH,6,3 ;-
43、</p><p> OTH6:CHOICE 3DH,7,0 ;=</p><p><b> OTH7:RET</b></p><p> ADVANCE ENDP</p><p> CLEAR PROC NEAR ;清屏</p><p><b> PUSH
44、AX</b></p><p><b> PUSH BX</b></p><p><b> PUSH CX</b></p><p><b> PUSH DX</b></p><p> MOV AX,0600H</p><p> MOV
45、 BH,0FH</p><p><b> MOV CX,0</b></p><p> MOV DX,184FH </p><p><b> INT 10H</b></p><p><b> POP AX</b></p><p><b
46、> POP BX</b></p><p><b> POP CX</b></p><p><b> POP DX</b></p><p><b> RET</b></p><p> CLEAR ENDP</p><p> C
47、R PROC NEAR ;回車換行</p><p><b> PUSH AX</b></p><p><b> PUSH DX</b></p><p><b> MOV AH,2</b></p><p> MOV DL,0DH</p>
48、;<p><b> INT 21H</b></p><p><b> MOV AH,2</b></p><p> MOV DL,0AH</p><p><b> INT 21H</b></p><p><b> POP DX</b>
49、</p><p><b> POP AX</b></p><p><b> RET</b></p><p><b> CR ENDP</b></p><p> OUTPUT: ;輸出運算結果</p><p>&
50、lt;b> SUB DI,2</b></p><p> CMP WORD PTR[DI],0</p><p><b> JGE W1</b></p><p> NEG WORD PTR[DI]</p><p> MOV DL,'-'</p><p>&l
51、t;b> MOV AH,2</b></p><p><b> INT 21H</b></p><p> W1: MOV BX,10000</p><p><b> MOV CX,5</b></p><p><b> MOV SI,0</b></
52、p><p> W2: MOV AX,[DI]</p><p><b> CWD</b></p><p><b> DIV BX</b></p><p> MOV [DI],DX</p><p><b> CMP AL,0</b></p>
53、<p><b> JNE W3</b></p><p><b> CMP SI,0</b></p><p><b> JNE W3</b></p><p><b> CMP CX,1</b></p><p><b> JE
54、 W3</b></p><p><b> JMP W4</b></p><p> W3: MOV DL,AL</p><p> ADD DL,30H</p><p><b> MOV AH,2</b></p><p><b> INT 21H&
55、lt;/b></p><p><b> MOV SI,1</b></p><p> W4: MOV AX,BX</p><p><b> MOV DX,0</b></p><p><b> MOV BX,10</b></p><p><
56、;b> DIV BX</b></p><p><b> MOV BX,AX</b></p><p><b> LOOP W2</b></p><p> CALL CR </p><p><b> DISP MESG</b>&
57、lt;/p><p><b> MOV AH,1</b></p><p><b> INT 21H</b></p><p> CMP AL,'n'</p><p><b> JE J_SHU</b></p><p> CMP AL,&
58、#39;N'</p><p><b> JE J_SHU</b></p><p> MOV WORD PTR[DI+2],0 </p><p><b> CALL CR</b></p><p> LEA DI,NUMB </p><p> LEA SI,
59、MARK</p><p> JMP START1</p><p><b> J_SHU: </b></p><p> MOV AH,4CH</p><p><b> INT 21H</b></p><p> CODES ENDS</p><p&g
60、t;<b> END STAR</b></p><p><b> 七、結果顯示</b></p><p> 八、感想、收獲及體會</p><p> 學習匯編語言:大一學習的是C語言,因此,在學匯編語言之初,面對格式之類的感覺很不適應。C語言用的是一個又一個變量,而匯編語言則是利用一個又一個寄存器來實現。而寫代碼的時候
61、,經常會因為一些符號,或者字長的失誤,完全是無心之失而導致程序無法執行。而回過來找錯誤的時候,又往往忽略了這些細節而找不到錯誤的根源。學習匯編是個艱辛的過程,從C語言到匯編的不適,到牢記大量的指令,并熟練應用,都要花費很多時間適應。對有些指令的源操作數和目的操作數,以及操作結果的存放位置都要熟記于心。否則,你將很難應用這些指令,學習匯編的一個重要能力就是能夠熟練調試所寫程序,當某個程序不能執行時,而又發現不了錯誤,這就要對程序進行逐步調
62、試了。這樣更容易發現錯誤點并牢記。</p><p> 用匯編語言編寫四則運算體會:編寫計算簡單的不帶括號的沒有優先級的+、- 或 *、/、運算程序還是不太難的,因為沒有優先級程序只要根據表達式運算符的順序從左到右進行運算,最后輸出結果。而該課程設計要求設計能進行帶括號的 +、- 或 *、/、混合運算的四則運算程序,難度明顯加大了,這樣程序設計時要用設定權值的辦法來設置符號的優先級,使得程序運行時可根據權值大小進
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鍵盤鋼琴匯編語言程序設計—微機原理課程設計
- 鍵盤鋼琴匯編語言程序設計—微機原理課程設計
- 鍵盤鋼琴匯編語言程序設計—微機原理課程設計
- 微機原理與匯編語言課程設計-多功能定時器設計
- 匯編語言課程設計
- 匯編語言課程設計
- 微機原理與接口課程設計--用匯編語言編寫一個時鐘程序
- 微機原理及匯編語言習題
- 匯編語言課程設計報告
- 匯編語言課程設計報告
- 匯編語言課程設計安排
- 匯編語言課程設計報告
- 匯編語言課程設計報告a
- “微機原理與匯編語言”期末試題及答案
- “微機原理與匯編語言”期末試題(有答案)
- 匯編語言推箱子課程設計
- 匯編語言課程設計----電子鬧鐘
- 打字游戲-匯編語言課程設計
- 匯編語言程序設計課程設計
- 匯編語言動畫設計課程設計
評論
0/150
提交評論