匯編語言四則運算_第1頁
匯編語言四則運算_第2頁
匯編語言四則運算_第3頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、微機原理與接口技術(shù)課程設(shè)計院系:電氣與自動化工程系專業(yè):通信工程年級班級:學(xué)號:姓名:指導(dǎo)教師:設(shè)計日期:2010-12-28一、 課程設(shè)計目的每個同學(xué)在 1-2 周時間內(nèi),用匯編語言獨立完成一個程序題,以達到熟練運用匯編語言編程實現(xiàn)有比較完整功能的程序的目的。二、課程設(shè)計要求從鍵盤上輸入數(shù)字參與運算, 并在屏幕上顯示結(jié)果, 至少實現(xiàn)加法減法運算。三、課題分析該程序設(shè)計的關(guān)鍵是要根據(jù)四則運算中()、* 、/ 、+、- 、= 的優(yōu)先級設(shè)置符號的權(quán)值,其中(、 * 、/ 、+、- 、)、= 的權(quán)值分別設(shè)置為5、4、4、3、3、1、0 ,然后根據(jù)權(quán)值的大小進行運算。程序使用數(shù)字標志SIGN1、括號標

2、志 SIGN2分別來判斷數(shù)字是否輸入完畢和括號是否配對,另外程序定義兩個數(shù)據(jù)存儲區(qū)域NUMB和 MARK,其中 NUMB用來保存輸入的或運算的數(shù)值, MARK用來保存輸入的符號及其對應(yīng)的權(quán)值。程序不斷判斷輸入的符號是否是左括號( ,當(dāng)遇到左括號是在存儲區(qū) MARK保存其符號,緊跟著將 ( 的權(quán)值改為 2 并保存之,這是為了使程序運算括號內(nèi)的表達式,當(dāng)遇到右括號)時括號內(nèi)運算將結(jié)束。需要注意的是程序執(zhí)行完括號內(nèi)表達式的運算及乘除運算后將在存儲區(qū)MARK中覆蓋符號(、)、 * 、/ 及緊跟著的權(quán)值,使得程序在運算整個四則運算表達式時當(dāng)括號內(nèi)表達式的運算及乘除運算結(jié)束后存儲區(qū)MARK中只有 + 、-

3、 運算符及緊跟著的權(quán)值,然后按照 +、- 運算符的左右順序從左到右進行+、- 運算,當(dāng)最后遇到等號 = 時輸出表達式的數(shù)值,然后再根據(jù)提示判斷是否繼續(xù)執(zhí)行下一個四則運算表達式。- 1 -四、流程圖ERROR=N(SIGN2)= 0Y(SIGN1)=0YN開始清屏初始化首地址輸出歡迎界面輸入字符是數(shù)字、符號還是 =是符號是數(shù)字保存數(shù)值設(shè)置符號權(quán)值DI+2 (SIGN1)=0是否是(NY(SIGN2)+1是否是)NY(SI)= M (SIGN2)-1YN(CH)(SI)- 2 -YYNN是否是等號(SI) =(NYYNY(CH)=2 N是否是)SI+1( SI)=AL SI+1是否是(( SI)

4、=(CH)輸出表達式的值顯示是否繼續(xù)輸入字符NSI-1SI-1CL= (SI)是何種運算進行相應(yīng)的運算初始化首地址DI+2(AL) =N或nY結(jié)束- 3 -五、程序源代碼DATAS SEGMENTENDMSTR1DBCODESSEGMENT0AH,0DH,*ASSUMECS:CODES,DS:DATAS*$START:STR2DB 0AH,0DH, *CALL CLEAR*$MOVAX,DATASSTR3DB 0AH,0DH, *MOVDS,AXWelcomeyou !*$LEA DI,NUMBSTR4DB 0AH,0DH, *This isLEA SI,MARKprograme of siz

5、eyunsuan*$DISP STR1STR5DB 0AH,0DH, *DISP STR2Rang(-32768 to 32767)*$DISP STR3STR6DB 0AH,0DH, *JikeB082DISP STR4Hanyou 200807014225*$DISP STR5STR7DB 0AH,0DH, *DISP STR6*$DISP STR7STR8DBDISP STR80AH,0DH,*CALL CR*$MOVAX,0MESGDB 0AH,0DH, Do you want toMOVBX,0continue? (y/n) $MOVCX,0SIGN1DW0; 判斷數(shù)字是否MOVDX

6、,0輸入完畢START1:SIGN2DW0; 判斷括號是否CALL CR配對INPUT:NUMBDW20DUP(0); 保存輸入的數(shù)MOVAH,1值INT 21HMARKDB M; 保存輸入的運CMPAL, =算符JE PD; 是等號,進DB 10DUP(0)一步判斷輸入括號是否配對ERRORDB YOUR INPUT IS WRONG$CMPAL,28HDATAS ENDSJB INPUTDISP MACRO STRCMPAL,39HLEA DX,STRJA INPUTMOVAH,9CMPAL,2FH; 判斷是數(shù)INT 21H字還是符號ENDMJBE JUD; 是符號轉(zhuǎn)CHOICE MACR

7、O ASC,HAO,H;宏定義,給運入響應(yīng)操作算符賦權(quán)值INC WORDPTR SIGN1; 將數(shù)字標志CMPAL,ASC位加 1JNE OTH &HAOSUBAL,30H; 將 ASCII 碼MOVCH,H轉(zhuǎn) 16進制JMP OTH7MOVAH,0- 4 -XCHGAX,DIDECSIMULBXMOVCL,SIMOVBX,10CALL MATCH; 判斷是什XCHGAX,DI么運算符并進行相應(yīng)的計算ADDDI,AXJMP AGAINJMP INPUTPD: CMPWORD PTR SIGN2,0 ; 判斷配對標SAVE:志位CMPCH,0; 判斷是否JE JUD是等號JMP BCJE OUT

8、PUTJUD:CMPWORDPTR SIGN1,0; 判斷數(shù)值指CMPCH,1針是否已經(jīng)下移一位JE INPUT; “) ”不保JE FUH存,輸入下一個數(shù)ADDDI,2INC SIMOVWORDPTR SIGN1,0; 將數(shù)字標志MOVSI,AL; 保存符號位復(fù) 0INC SIFUH:CALL ADVANCE; 設(shè)定優(yōu)先CMPCH,5; 判斷是否級是左括號CMPCH,5; 判斷輸入JNE GO_ON的符號是否是左括號MOVCH,2;改變(的權(quán)JNE PY; 不是則判值斷輸入的是否是右括號GO_ON:INC WORD PTR SIGN2; 是左括號,MOVSI,CH; 緊跟著保括號標志位加 1

9、存符號的權(quán)值PY:JMP INPUTCMPCH,1; 判斷輸入的是否是右括號BC: LEA DX,ERRORJNE AGAINMOVAH,9DECWORD PTR SIGN2; 是右括號,INT 21H括號標志位減 1JMP J_SHUAGAIN:MATCHPROCNEAR; 子程序,進CMPBYTEPTRSI,M; 判斷運算符行相應(yīng)的運算存儲區(qū)是否為空如 23*56 ( 8*19 )PUSHAX/6 67 8 1322XORAX,AXJE SAVEXORBX,BXCMPCH,SI;SI 的內(nèi)CMPCL,2AH; 乘法運算容為前一個符號或其權(quán)值JNE NEXT1JA SAVESUBDI,2CM

10、PBYTE PTRSI,(XCHGBX,DIJNE YIDOSUBDI,2DECSIXCHGAX,DIJMP INPUTIMUL BXYIDO:MOVDI,AX- 5 -ADDDI,2CLEAR PROC NEAR; 清屏JMP FINISHPUSHAXNEXT1:CMPCL,2FH; 除法運算PUSHBXJNE NEXT2PUSHCXSUBDI,2PUSHDXXCHGBX,DIMOVAX,0600HSUBDI,2MOVBH,0FHXCHGAX,DIMOVCX,0CWDMOVDX,184FHIDIV BXINT 10HMOVDI,AXPOPAXADDDI,2POPBXJMP FINISHPOP

11、CXNEXT2:CMPCL,2BH; 加法運算POPDXJNE NEXT3RETSUBDI,2CLEAR ENDPXCHGBX,DISUBDI,2CR PROC NEAR; 回車換行ADDDI,BXPUSHAXADDDI,2PUSHDXJMP FINISHMOVAH,2NEXT3:CMPCL,2DH; 減法運算MOVDL,0DHJNE FINISHINT 21HSUBDI,2MOVAH,2XCHGBX,DIMOVDL,0AHSUBDI,2INT 21HSUBDI,BXPOPDXADDDI,2POPAXFINISH:RETPOPAXCR ENDPRETMATCH ENDPOUTPUT:; 輸出運

12、算結(jié)果ADVANCE PROCSUBDI,2CHOICE 28H,1,5;(CMPWORD PTRDI,0OTH1:CHOICE 29H,2,1;)JGE W1OTH2:CHOICE 2AH,3,4;*NEGWORD PTRDIOTH3:CHOICE 2FH,4,4;/MOVDL, -OTH4:CHOICE 2BH,5,3;+MOVAH,2OTH5:CHOICE 2DH,6,3;-INT 21HOTH6:CHOICE 3DH,7,0;=W1: MOVBX,10000OTH7:RETMOVCX,5ADVANCE ENDPMOVSI,0W2: MOVAX,DI- 6 -CWDLOOP W2DIV

13、BXMOVDI,DXCALL CRCMPAL,0DISP MESGJNE W3MOVAH,1CMPSI,0INT 21HJNE W3CMPAL, nCMPCX,1JE J_SHUJE W3CMPAL, NJMP W4JE J_SHUW3: MOVDL,ALMOVWORD PTRDI+2,0ADDDL,30HCALL CRMOVAH,2LEA DI,NUMBINT 21HLEA SI,MARKMOVSI,1JMP START1W4: MOVAX,BXJ_SHU:MOVDX,0MOVAH,4CHMOVBX,10INT 21HDIV BXCODESENDSMOVBX,AXEND START六、結(jié)果顯

14、示- 7 -七、感想、收獲及體會學(xué)習(xí)匯編語言:大一學(xué)習(xí)的是 C 語言,因此,在學(xué)匯編語言之初,面對格式之類的感覺很不適應(yīng)。 C 語言用的是一個又一個變量,而匯編語言則是利用一個又一個寄存器來實現(xiàn)。 而寫代碼的時候, 經(jīng)常會因為一些符號, 或者字長的失誤,完全是無心之失而導(dǎo)致程序無法執(zhí)行。 而回過來找錯誤的時候, 又往往忽略了這些細節(jié)而找不到錯誤的根源。 學(xué)習(xí)匯編是個艱辛的過程, 從 C語言到匯編的不適,到牢記大量的指令,并熟練應(yīng)用,都要花費很多時間適應(yīng)。對有些指令的源操作數(shù)和目的操作數(shù), 以及操作結(jié)果的存放位置都要熟記于心。 否則,你將很難應(yīng)用這些指令, 學(xué)習(xí)匯編的一個重要能力就是能夠熟練調(diào)試所寫程序, 當(dāng)某個程序不能執(zhí)行時, 而又發(fā)現(xiàn)不了錯誤, 這就要對程序進行逐步調(diào)試了。 這樣更容易發(fā)現(xià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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論