

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 《微機(jī)原理與接口技術(shù)》課程設(shè)計(jì)</p><p> 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院</p><p><b> 通信工程</b></p><p> 2011-03-20</p><p> 微機(jī)原理與匯編語言課程設(shè)計(jì)</p><p><b> 一. 課程設(shè)計(jì)目的<
2、;/b></p><p> 每個同學(xué)在1-2周時間內(nèi),用匯編語言獨(dú)立完成一個程序題,以達(dá)到熟練運(yùn)用匯編語言編程實(shí)現(xiàn)有比較完整功能的程序的目的。</p><p><b> 三、課程設(shè)計(jì)題目</b></p><p> 四則運(yùn)算:從鍵盤輸入一個十進(jìn)制兩位數(shù)的四則運(yùn)算表達(dá)式,如23*56-(8*19)/6+67-8=,編程計(jì)算表達(dá)式的值,輸
3、出十進(jìn)制結(jié)果(有可能是三位或四位十進(jìn)制),+-*/位置任意。并要求程序能反復(fù)執(zhí)行直道對“還要繼續(xù)嗎?(y/n)”之類的提示回答“n”或“N”為止。</p><p><b> 四、課題分析</b></p><p> 該程序設(shè)計(jì)的關(guān)鍵是要根據(jù)四則運(yùn)算中( )、*、/、+、-、= 的優(yōu)先級設(shè)置符號的權(quán)值,其中(、*、/、+、-、)、= 的權(quán)值分別設(shè)置為5、4、4、3、3
4、、1、0 ,然后根據(jù)權(quán)值的大小進(jìn)行運(yùn)算。程序使用數(shù)字標(biāo)志SIGN1、括號標(biāo)志SIGN2分別來判斷數(shù)字是否輸入完畢和括號是否配對,另外程序定義兩個數(shù)據(jù)存儲區(qū)域 NUMB和MARK,其中NUMB用來保存輸入的或運(yùn)算的數(shù)值,MARK用來保存輸入的符號及其對應(yīng)的權(quán)值。程序不斷判斷輸入的符號是否是左括號‘( ’,當(dāng)遇到左括號是在存儲區(qū)MARK保存其符號,緊跟著將‘( ’的權(quán)值改為2并保存之,這是為了使程序運(yùn)算括號內(nèi)的表達(dá)式,當(dāng)遇到右括號‘)’時括
5、號內(nèi)運(yùn)算將結(jié)束。需要注意的是程序執(zhí)行完括號內(nèi)表達(dá)式的運(yùn)算及乘除運(yùn)算后將在存儲區(qū)MARK中覆蓋符號(、)、*、/ 及緊跟著的權(quán)值,使得程序在運(yùn)算整個四則運(yùn)算表達(dá)式時當(dāng)括號內(nèi)表達(dá)式的運(yùn)算及乘除運(yùn)算結(jié)束后存儲區(qū)MARK中只有‘ +、-’ 運(yùn)算符及緊跟著的權(quán)值,然后按照+、- 運(yùn)算符的左右順序從左到右進(jìn)行‘ +、- ’運(yùn)算,當(dāng)最后遇到等號‘ = ’時輸出表達(dá)式的數(shù)值,然后再根據(jù)提示判斷是否繼續(xù)執(zhí)行下一個四則運(yùn)算表</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 ;判斷數(shù)字是否輸入完畢</p><p> SIGN2 DW 0 ;判斷括號是否配對</p><p> NUMB DW 20 DUP(0) ;保存輸入的數(shù)值</p><p> MARK DB 'M' ;保存輸入的運(yùn)算符</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 ;宏定義,給運(yùn)算符賦權(quán)值</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、 ;是等號,進(jìn)一步判斷輸入括號是否配對</p><p> CMP AL,28H </p><p> JB INPUT </p><p> CMP AL,39H </p><p> JA INPUT </p><p> CMP AL,2FH ;判斷是數(shù)字還
20、是符號</p><p> JBE JUD ;是符號轉(zhuǎn)入響應(yīng)操作 </p><p> INC WORD PTR SIGN1 ;將數(shù)字標(biāo)志位加1</p><p> SUB AL,30H ;將ASCII碼轉(zhuǎn)16進(jìn)制</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 ;判斷配對標(biāo)志位</p><p><b> JE JUD </b></p><p><b> JMP BC </b></p><p> JUD:CMP WORD PTR SIGN1,0 ;判斷數(shù)值指針是否已經(jīng)下移一位</p
23、><p><b> JE FUH </b></p><p> ADD DI,2 </p><p> MOV WORD PTR SIGN1,0 ;將數(shù)字標(biāo)志位復(fù)0</p><p> FUH:CALL ADVANCE ;設(shè)定優(yōu)先級</p><p> CMP CH,5
24、 ;判斷輸入的符號是否是左括號</p><p> JNE PY ;不是則判斷輸入的是否是右括號</p><p> INC WORD PTR SIGN2 ;是左括號,括號標(biāo)志位加1</p><p><b> PY: </b></p><p> CMP CH,1
25、 ;判斷輸入的是否是右括號</p><p> JNE AGAIN </p><p> DEC WORD PTR SIGN2 ;是右括號,括號標(biāo)志位減1</p><p><b> AGAIN: </b></p><p> CMP BYTE PTR[SI],'M' ;
26、判斷運(yùn)算符存儲區(qū)是否為空 如23*56-(8*19)/6+67-8=1322</p><p><b> JE SAVE</b></p><p> CMP CH,[SI] ;[SI]的內(nèi)容為前一個符號或其權(quán)值</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 ;判斷是什么運(yùn)算符并進(jìn)行相應(yīng)的計(jì)算</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 ;“)”不保存,輸入下一個數(shù)</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 ;改變(的權(quán)值</p><p><b> GO_ON: </b></p><p> MOV [SI],CH ;緊跟著保存符號的權(quán)值</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 ;子程序,進(jìn)行相應(yīng)的運(yùn)算</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 ;乘法運(yùn)算</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 ;除法運(yùn)算</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、 ;加法運(yùn)算</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 ;減法運(yùn)算</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: ;輸出運(yùn)算結(jié)果</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> 七、結(jié)果顯示</b></p><p> 八、感想、收獲及體會</p><p> 學(xué)習(xí)匯編語言:大一學(xué)習(xí)的是C語言,因此,在學(xué)匯編語言之初,面對格式之類的感覺很不適應(yīng)。C語言用的是一個又一個變量,而匯編語言則是利用一個又一個寄存器來實(shí)現(xiàn)。而寫代碼的時候
61、,經(jīng)常會因?yàn)橐恍┓?,或者字長的失誤,完全是無心之失而導(dǎo)致程序無法執(zhí)行。而回過來找錯誤的時候,又往往忽略了這些細(xì)節(jié)而找不到錯誤的根源。學(xué)習(xí)匯編是個艱辛的過程,從C語言到匯編的不適,到牢記大量的指令,并熟練應(yīng)用,都要花費(fèi)很多時間適應(yīng)。對有些指令的源操作數(shù)和目的操作數(shù),以及操作結(jié)果的存放位置都要熟記于心。否則,你將很難應(yīng)用這些指令,學(xué)習(xí)匯編的一個重要能力就是能夠熟練調(diào)試所寫程序,當(dāng)某個程序不能執(zhí)行時,而又發(fā)現(xiàn)不了錯誤,這就要對程序進(jìn)行逐步調(diào)
62、試了。這樣更容易發(fā)現(xiàn)錯誤點(diǎn)并牢記。</p><p> 用匯編語言編寫四則運(yùn)算體會:編寫計(jì)算簡單的不帶括號的沒有優(yōu)先級的+、- 或 *、/、運(yùn)算程序還是不太難的,因?yàn)闆]有優(yōu)先級程序只要根據(jù)表達(dá)式運(yùn)算符的順序從左到右進(jìn)行運(yùn)算,最后輸出結(jié)果。而該課程設(shè)計(jì)要求設(shè)計(jì)能進(jìn)行帶括號的 +、- 或 *、/、混合運(yùn)算的四則運(yùn)算程序,難度明顯加大了,這樣程序設(shè)計(jì)時要用設(shè)定權(quán)值的辦法來設(shè)置符號的優(yōu)先級,使得程序運(yùn)行時可根據(jù)權(quán)值大小進(jìn)
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鍵盤鋼琴匯編語言程序設(shè)計(jì)—微機(jī)原理課程設(shè)計(jì)
- 鍵盤鋼琴匯編語言程序設(shè)計(jì)—微機(jī)原理課程設(shè)計(jì)
- 鍵盤鋼琴匯編語言程序設(shè)計(jì)—微機(jī)原理課程設(shè)計(jì)
- 微機(jī)原理與匯編語言課程設(shè)計(jì)-多功能定時器設(shè)計(jì)
- 匯編語言課程設(shè)計(jì)
- 匯編語言課程設(shè)計(jì)
- 微機(jī)原理與接口課程設(shè)計(jì)--用匯編語言編寫一個時鐘程序
- 微機(jī)原理及匯編語言習(xí)題
- 匯編語言課程設(shè)計(jì)報(bào)告
- 匯編語言課程設(shè)計(jì)報(bào)告
- 匯編語言課程設(shè)計(jì)安排
- 匯編語言課程設(shè)計(jì)報(bào)告
- 匯編語言課程設(shè)計(jì)報(bào)告a
- “微機(jī)原理與匯編語言”期末試題及答案
- “微機(jī)原理與匯編語言”期末試題(有答案)
- 匯編語言推箱子課程設(shè)計(jì)
- 匯編語言課程設(shè)計(jì)----電子鬧鐘
- 打字游戲-匯編語言課程設(shè)計(jì)
- 匯編語言程序設(shè)計(jì)-課程設(shè)計(jì)
- 匯編語言程序設(shè)計(jì)課程設(shè)計(jì)
評論
0/150
提交評論