微機(jī)原理與匯編語言課程設(shè)計(jì)_第1頁
已閱讀1頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論