匯編語(yǔ)言課程設(shè)計(jì)四則運(yùn)算計(jì)算器.._第1頁(yè)
匯編語(yǔ)言課程設(shè)計(jì)四則運(yùn)算計(jì)算器.._第2頁(yè)
匯編語(yǔ)言課程設(shè)計(jì)四則運(yùn)算計(jì)算器.._第3頁(yè)
匯編語(yǔ)言課程設(shè)計(jì)四則運(yùn)算計(jì)算器.._第4頁(yè)
匯編語(yǔ)言課程設(shè)計(jì)四則運(yùn)算計(jì)算器.._第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、微機(jī)原理實(shí)驗(yàn)報(bào)告匯編語(yǔ)言課程設(shè)計(jì)報(bào)告(2012 - 2013年度第1學(xué)期)實(shí)驗(yàn)名稱(chēng):實(shí)現(xiàn)加減乘除四則運(yùn)算的計(jì)算器專(zhuān) 業(yè)生物醫(yī)學(xué)工程學(xué)生姓名周炳威班級(jí) B100904學(xué)號(hào) B10090406指導(dǎo)教師樂(lè)洋實(shí)現(xiàn)加減乘除四則運(yùn)算的計(jì)算器1實(shí)驗(yàn)?zāi)康纳罨瘜W(xué)習(xí)的匯編語(yǔ)言課程基本知識(shí),進(jìn)一步掌握匯編語(yǔ)言程序設(shè)計(jì)方法,提高 分析問(wèn)題、解決問(wèn)題的綜合應(yīng)用能力。通過(guò)使用匯編語(yǔ)言設(shè)計(jì)實(shí)現(xiàn)簡(jiǎn)單計(jì)算器,以 此進(jìn)一步了解和掌握對(duì)數(shù)據(jù)存儲(chǔ),寄存器的使用,加減乘除相關(guān)指令以及模塊的調(diào) 用等匯編語(yǔ)言知識(shí)的有效運(yùn)用2實(shí)驗(yàn)內(nèi)容課題名稱(chēng):實(shí)現(xiàn)加減乘除四則運(yùn)算的計(jì)算器主要功能:實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)算器,要求:編寫(xiě)一個(gè)程序,每運(yùn)行一次可執(zhí)行

2、程序,可以實(shí)現(xiàn)加減乘除四則運(yùn)算。計(jì)算器是最簡(jiǎn)單的計(jì)算工具,簡(jiǎn)單計(jì)算器具有 加、減、乘、除四項(xiàng)運(yùn)算功能。3實(shí)現(xiàn)方法本次匯編語(yǔ)言課程設(shè)計(jì)的最終目的是要實(shí)現(xiàn)一個(gè)簡(jiǎn)單計(jì)算器,要求編寫(xiě)一個(gè)程 序,每運(yùn)行一次可執(zhí)行程序,可以實(shí)現(xiàn)數(shù)的加減乘除四則運(yùn)算。由自己調(diào)用中斷輸 入到屏幕上并要用程序存儲(chǔ)起來(lái)的數(shù),然后才能對(duì)這兩個(gè)數(shù)進(jìn)行運(yùn)算,而且做的是 加法運(yùn)算、減法運(yùn)算乘法運(yùn)算還是除法運(yùn)算也未可知,為此我們還要判斷用戶所輸 入的運(yùn)算是四則運(yùn)算中的哪一個(gè)運(yùn)算。此外,運(yùn)算過(guò)程中的進(jìn)位或是借位,選擇用 什么樣的方式進(jìn)行輸出,如何實(shí)現(xiàn)清屏等也是要解決的問(wèn)題。第一步,用INT 21H的1號(hào)功能調(diào)用來(lái)進(jìn)行輸入。利用1號(hào)功能調(diào)用來(lái)

3、輸入, 即把單個(gè)字符一個(gè)個(gè)的輸入并存儲(chǔ)到一個(gè)數(shù)據(jù)區(qū)里。我們要做的是兩個(gè)數(shù)的運(yùn)算, 先認(rèn)定輸入的格式為1234+5678=或者1111*2222=,當(dāng)然如果輸入不是這樣的格式 計(jì)算出來(lái)的結(jié)果就不一定是我們想要的結(jié)果了。在存儲(chǔ)的時(shí)候也是有選擇的存儲(chǔ), 當(dāng)輸入的并非格式里所要求的字符時(shí)則報(bào)錯(cuò)。第二步,設(shè)計(jì)程序進(jìn)行判斷所輸入的算式是做加法運(yùn)算、減法運(yùn)算、乘法運(yùn)算 還是除法運(yùn)算,即判斷輸入的運(yùn)算符是 +號(hào)、-號(hào)、* 號(hào)、/號(hào)中的哪 一個(gè),因?yàn)檩斎氲母袷焦潭?,所以只需要把存進(jìn)數(shù)據(jù)區(qū)的第三個(gè)字符拿來(lái)與加減 乘除四個(gè)運(yùn)算符號(hào)進(jìn)行比較,和哪一個(gè)運(yùn)算符號(hào)一樣就調(diào)用相對(duì)應(yīng)的運(yùn)算模塊進(jìn)行 計(jì)算。第三步,根據(jù)計(jì)算器程

4、序所要實(shí)現(xiàn)的功能完成各個(gè)功能模塊。設(shè)計(jì)程序主體部 分,根據(jù)主體部分所需的功能模塊對(duì)各個(gè)子模塊一一進(jìn)行設(shè)計(jì)編寫(xiě)。子模塊中包含 有:do_add加法運(yùn)算模塊,do_sub減法運(yùn)算模塊,do_mul乘法運(yùn)算模塊,do_div 除法運(yùn)算模塊,in put輸入模塊等。最后還要對(duì)這個(gè)簡(jiǎn)易計(jì)算器進(jìn)行功能完善。為了使程序符合我們使用者的操作 習(xí)慣,設(shè)計(jì)當(dāng)用戶根據(jù)提示信息輸入一個(gè)算式后,按下enter鍵或是=符號(hào)鍵時(shí),程序依據(jù)輸入的算式進(jìn)行計(jì)算,并將結(jié)果顯示在屏幕上。如果用戶輸入錯(cuò)誤, 則返回,提示信息讓用戶重新輸入算式,當(dāng)用戶按下Q或q鍵時(shí)退出程序。在各個(gè)子功能模塊設(shè)計(jì)好的情況下,通過(guò)主題模塊的合理調(diào)用,最終

5、實(shí)現(xiàn)一個(gè)具有簡(jiǎn)單運(yùn) 算功能的計(jì)算器。3.2程序流程圖及說(shuō)明此程序流程圖簡(jiǎn)要地表現(xiàn)出了所要實(shí)現(xiàn)的功能以及一些功能的大概算法,同時(shí) 也是我編寫(xiě)的程序的一個(gè)總體的框架。程序流程圖說(shuō)明:通過(guò)流程圖,可以看出程序開(kāi)始運(yùn)行時(shí),首先輸出提示語(yǔ)句, 當(dāng)用戶輸入后,程序根據(jù)所輸入的內(nèi)容進(jìn)行判斷,通過(guò)判斷的結(jié)果來(lái)決定調(diào)用哪個(gè) 功能模塊,首先要判斷輸入的字符是否為 Q或q,若是,則退出程序,不是則繼續(xù) 輸入。還要判斷輸入的是否為 0-9, + , -*/這些字符,若不是會(huì)報(bào)錯(cuò),是則將根據(jù)運(yùn)算符號(hào)調(diào)用相應(yīng)的功能模塊完成運(yùn)算。最后將運(yùn)算的結(jié)果顯示在 屏幕上,并返回主題程序,使用戶可以重新輸入。21源程序清單B_PEQU

6、 BYTE PTRW_PEQU WORDPTRD_PEQU DWORDPTRCODESEGMENTASSUME CS:CODE,DS:CODEORG 100H;主程序開(kāi)始NEWSTAR:JMP STAREVENNUM1DW 0,0NUM2DW 0,0NUM3DW 0,0JGV4DW 0,0YSFLABEL WORDYSF1DB 0YSF2DB 0JUVDB 0UVDB 0;使DS:SI指向第一有效字符OVERS LABEL NEARCLDPUSH AXOVERS1:LODSBCMP AL,JZ OVERS1CMP AL,9JZ OVERS1DEC SICMP AL,13POP AXRET;輸出

7、一個(gè)制表符TABLABEL NEARMOV AL,9JMP SHORT DISP;輸出一個(gè)回車(chē)換行符CRLFLABEL NEARMOV AL,13CALL DISPMOV AL,10;顯示一個(gè)字符DISPLABEL NEARPUSH AXPUSH DXMOV AH,2MOV DL,ALINT 21HPOP DXPOP AXRET;檢查是否為運(yùn)算符ISYSFLABEL NEARCLDLODSBCALL ISJJJZ ISYSF1CALL ISIIJZ ISYSF1 DEC SIISYSF1:RET;檢查是否是加減運(yùn)算ISJJLABEL NEARCMP AL,+JZ ISYSF1CMP AL,-R

8、ET;檢查是否為乘除運(yùn)算ISIILABEL NEARCMP AL,*JZ ISYSF1CMP AL,/JZ ISYSF1CMP AL,RET;數(shù)據(jù)輸出;CX=10十進(jìn)制;CX=16 十六進(jìn)制DOUTLABEL NEARPUSH AXPUSH BXPUSH DXPUSH BPXOR BP,BPD0UT1:INC BPPUSH AXMOV AX,DX XOR DX,DX DIV CXMOV BX,AXPOP AXDIV CXPUSH DXMOV DX,BX OR BX,AX JNZ DOUT1DOUT2:POP AXADD AL,0CMP AL,9JBE DOUT3ADD AL,A-9-1DOUT

9、3:CALL DISPDEC BPJNZ DOUT2POP BPPOP DXPOP BXPOP AXRET;輸入數(shù)據(jù)在DX:A)中返回;CX=0數(shù)據(jù)為10進(jìn)制;CX#0數(shù)據(jù)為16進(jìn)制DATELABEL NEARPUSH BXPUSH BPPUSH DIXOR AX,AXXOR DX,DXDATE1:MOV DI,AX LODSBCMP AL,0JB DATE7CMP AL,9JA DATE6DATE2:AND AX,0FHSHL DI,1RCL DX,1MOV BX,DIMOV BP,DXSHL DI,1RCL DX,1SHL DI,1RCL DX,1JCXZ DATE3SHL DI,1RCL

10、 DX,1Jmp short DATE4DATE3:ADD DI,BXADC DX,BPDATE4:ADD AX,DIADC DX,0JMP DATE1DATE5:ADD AL,9JMP DATE2DATE6:JCXZ DATE7CMP AL,AJB DATE7CMP AL,FJBE DATE5CMP AL,aJB DATE7CMP AL,fJBE DATE5DATE7:MOV AX,DIDEC SIOR DI,DXPOP DIPOP BPPOP BXRET;數(shù)據(jù)1與數(shù)據(jù)2根據(jù)YSF進(jìn)行加減運(yùn)算JSJJLABEL NEARMOV AX,NUM2MOV DX,NUM2+2CMP YSF1,+JZ

11、 JSJJ1SUB NUM1,AXSBB NUM1+2,DXJMP SHORT JSJJ2JSJJ1:ADD NUM1,AXADC NUM1+2,DXJSJJ2:RET;數(shù)據(jù)1與數(shù)據(jù)2根據(jù)YSF進(jìn)行乘除運(yùn)算JSII1LABEL NEARMOV BX,OFFSET NUM1JMP SHORT JSII2 1;數(shù)據(jù)2與數(shù)據(jù)3根據(jù)YSF2進(jìn)行乘除運(yùn)算JSII2LABEL NEARMOV BX,OFFSET NUM2JSII2_1:DB 66HMOV AX,BXDB 66HMOV CX,BX+4CMP YSF2,*JNZ JSII2_2DB 66HIMUL CXJMP SHORT JSII2_3JSI

12、I2_2:DB 66HCWDDB 66HIDIV CXCMP YSF2,/JZ JSII2_3DB 66HXCHG DX,AXJSII2_3:DB 66HMOV BX,AXRET;顯示結(jié)果XUJGLABEL NEARMOV AX,JGV4MOV DX,JGV4+2MOV CX,10CMP UV,10JZ XUJG0MOV CX,16XUJGO:TEST DX,8000HJZ XUJG1CMP UV,10JZ XUJG2CALL DOUTXUJG2:NOT AXNOT DXADD AX,1ADC DX,0PUSH AXCMP UV,10JZ XUJG3MOV AL,CALL DISPMOV AL

13、,(CALL DISPXUJG3:MOV AL,-CALL DISPPOP AXCMP UV,10JZ XUJG1CALL DOUTMOV AL,)CALL DISPRETXUJG1:CALL DOUTRET;計(jì)算結(jié)果放入DX:AX中JSJGLABEL NEARCALL JSJJMOV AX,NUM1MOV DX,NUM1+2RET;從DS:SI處取一個(gè)數(shù)據(jù)LOADATE LABEL NEARLODSBCMP AL,(JZ LOADATE1DEC SIPUSH CXXOR CX,CXCMP UV,10JZ LOADATE0INC CXLOADATE0:CALL DATEPOP CXRETLOA

14、DATE1:PUSH NUM1PUSH NUM1+2PUSH NUM2PUSH NUM2+2PUSH YSFINC JUVMOV JGV4,0MOV JGV4+2,0;進(jìn)行四則運(yùn)算SZYSLABEL NEARCALL ISYSFJZ SZYS2CALL LOADATEMOV NUM1,AXMOV NUM1+2QXSZYS1:XOR AX,AXMOV NUM2,AXMOV NUM2+2,AXCALL ISYSFJZ SZYS3JNZ SZYS6SZYS2:PUSH AX;取16進(jìn)制數(shù);取數(shù)據(jù)放入DX:AX中;保存數(shù)據(jù)1數(shù)據(jù)2及運(yùn)算符;結(jié)果值清零;首字符是運(yùn)算符?;不是,取數(shù)并保存;數(shù)據(jù)2清零;下

15、個(gè)是運(yùn)算符?;將結(jié)果作為數(shù)據(jù)1MOV AX,JGV4MOV NUM1,AXSZYS3:MOV AXJGV4+2MOV NUM1+2,AXPOP AXMOV YSF1,ALMOV YSF2,ALCALL ISJJJZ SZYS4;是加減運(yùn)算轉(zhuǎn)CALL LOADATEMOV NUM2,AXMOV NUM2+2QX;取數(shù)據(jù)2算 算CALL JSII1;數(shù)據(jù)1與數(shù)據(jù)2根據(jù)YSF進(jìn)行乘除運(yùn)SZYS4:JMP SZYS1;結(jié)果保存在數(shù)據(jù)1中SZYS4_1:CALL LOADATEMOV NUM2,AXMOV NUM2+2QXCALL ISYSFJNZ SZYS6;取數(shù)據(jù)2并保存CALL ISJJ;運(yùn)算符2

16、是加減運(yùn)算?JNZ SZYS5PUSH AX;不是轉(zhuǎn)算 算CALL JSJJ;數(shù)據(jù)1與數(shù)據(jù)2根據(jù)YSF14行加減運(yùn)POP AX;結(jié)果保存在數(shù)據(jù)1中SZYS5:MOV YSF1,ALJMP SZYS4;保存新的運(yùn)算符MOV YSF2,AL;保存運(yùn)算符2CALL LOADATEMOV NUM3,AXMOV NUM3+2QX;取數(shù)據(jù)3算算CALL JSII2;數(shù)據(jù)2與數(shù)據(jù)3根據(jù)YSF2t行乘除運(yùn)JMP SZYS4 1結(jié)果保存在數(shù)據(jù)2中SZYS6:MOV CL,ALCMP AL,13JNZ SZYS9SZYS7:CALL JSJGCMP JUV,0JZ SZYS8DEC JUVPOP YSFPOP N

17、UM2+2POP NUM2POP NUM1+2POP NUM1RETSZYS8:CMP CL,)JZ SZYS10MOV JGV4,AXMOV JGV4+2QXJNZ SZYS12SZYS9:CMP AL,)JNZ SZYS11INC SIJMP SZYS7SZYS10:MOV NUM1,AXMOV NUM1+2QXJMP SZYS1SZYS11:STCRETSZYS12:CLCRET;數(shù)制處理UVILLABEL NEARPUSH SIUVIL1:LODSBCMP AL,JZ UVIL2CMP AL,9JZ UVIL2CMP AL,13JZ UVIL4JNZ UVIL1UVIL2:MOV BX

18、,SI CALL OVERS JZ UVIL3LODSWCALL OVERSPOP SIJNZ SZYS11CMP AX,O1JNZ SZYS11PUSH SIMOV UV,10UVIL3:MOV AL,13MOV BX-1,ALUVIL4:POP SICLCRET;預(yù)置結(jié)果YVJGLABEL NEARMOV AH,52HINT 21HMOV AX,ES:BX-2MOV DS,AXMOV AX,DS:0CHMOV CS:JGV4,AXMOV AX,DS:0EHMOV CS:JGV4+2,AXPUSH CSPOP DSPUSH CSPOP ESRET;保存結(jié)果BCJGLABEL NEARMOV AH,52HINT 21HMOV AX,ES:BX-2MOV DS,AXMOV AX,CS:JGV4MOV DS:0CH,AXMOV AX,CS:JGV4+2MOV DS:0EH,AXPUSH CSPOP DSPUSH CSPOP ESRETSTAR:MOV SI,81HCLDCALL OVERSJNZ STAR1STARO:MOV DX,OFFSET MESS1JMP STAR

溫馨提示

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

評(píng)論

0/150

提交評(píng)論