匯編計(jì)算器課程設(shè)計(jì)報(bào)告_第1頁
匯編計(jì)算器課程設(shè)計(jì)報(bào)告_第2頁
匯編計(jì)算器課程設(shè)計(jì)報(bào)告_第3頁
匯編計(jì)算器課程設(shè)計(jì)報(bào)告_第4頁
匯編計(jì)算器課程設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

課設(shè)報(bào)告課設(shè)報(bào)告福建工程學(xué)院軟件學(xué)院題目:匯編計(jì)算器班級(jí):1301姓名學(xué)號(hào):指導(dǎo)教師:日期:目錄1、設(shè)計(jì)目的 32、概要設(shè)計(jì) 32.1系統(tǒng)總體分析 32.2主模塊框圖及說明 33、詳細(xì)設(shè)計(jì) 43.1主模塊及子模塊概述 4 各模塊詳運(yùn)算 44、程序調(diào)試 74.1運(yùn)行界面分析 7算法分析 74.2調(diào)試過程與分析 95、心得體會(huì) 115.1設(shè)計(jì)體會(huì) 115.2系統(tǒng)改良 11附錄: 111、設(shè)計(jì)目的本課程設(shè)計(jì)是一次程序設(shè)計(jì)方法及技能的根本訓(xùn)練,通過實(shí)際程序的開發(fā)及調(diào)試,穩(wěn)固課堂上學(xué)到的關(guān)于程序設(shè)計(jì)的根本知識(shí)和根本方法,進(jìn)一步熟悉匯編語言的構(gòu)造特點(diǎn)和使用,到達(dá)能獨(dú)立閱讀、設(shè)計(jì)編寫和調(diào)試具有一定規(guī)模的匯編程序的水平。2、概要設(shè)計(jì)用8086匯編語言編寫一個(gè)能實(shí)現(xiàn)四那么混合運(yùn)算、帶括號(hào)功能的整數(shù)計(jì)算器程序。程序能實(shí)現(xiàn)鍵盤十進(jìn)制運(yùn)算表達(dá)式的輸入和顯示〔例如輸入:“1+2*(3-4)〞〕,按“=〞后輸出十進(jìn)制表示的運(yùn)算結(jié)果。2.1系統(tǒng)總體分析在8086的操作環(huán)境下,該計(jì)算器分成輸入,數(shù)據(jù)存儲(chǔ),運(yùn)算功能,輸出幾個(gè)大模塊,實(shí)現(xiàn)了使用者使用該計(jì)算器時(shí)輸入一個(gè)算式,能讓系統(tǒng)進(jìn)展計(jì)算。此計(jì)算器的實(shí)現(xiàn)功能是根本的數(shù)學(xué)的四那么運(yùn)算,結(jié)果范圍在0~65535。2.2主模塊框圖及說明此流程圖簡(jiǎn)要的表現(xiàn)出了所要實(shí)現(xiàn)的功能以及一些功能的大概算法,同時(shí)也是我編寫的一個(gè)總體的框架。程序流程圖說明:通過流程圖,可以看出程序運(yùn)行時(shí),首先輸出提示語氣,當(dāng)用戶輸入后,程序根據(jù)所輸入內(nèi)容進(jìn)展判斷,通過判斷的結(jié)果來決定調(diào)用哪個(gè)功能模塊,首要先要要判斷的是否為0-9,“+〞“-〞“*〞“/〞這些字符,假設(shè)不是就會(huì)報(bào)錯(cuò),實(shí)那么根據(jù)運(yùn)算符號(hào)調(diào)用其功能模塊完成運(yùn)算。最后將運(yùn)算的結(jié)果顯示在主頻幕上,返回主程序,使用戶可以重新輸入。3、詳細(xì)設(shè)計(jì)3.1主模塊及子模塊概述根據(jù)題目要求,可以把程序的工作過程劃分為運(yùn)算表達(dá)式輸入、計(jì)算、結(jié)果輸出三局部。因此在編寫程序時(shí)可以按此把程序大致劃分為三個(gè)模塊。輸入:界面的顯示設(shè)置,以及輸入的字符問題進(jìn)展設(shè)計(jì)計(jì)算:該模塊為計(jì)算器的核心局部,其中包括運(yùn)算級(jí)的優(yōu)先級(jí)轉(zhuǎn)換和根本的加減乘除函數(shù)的函數(shù)的編寫。顯示:對(duì)其結(jié)果進(jìn)展一個(gè)輸出顯示。各模塊詳運(yùn)算1運(yùn)算表達(dá)式輸入〔1〕加法指令指令格式:加法ADDDST,SRC;〔DST〕←〔SRC〕+〔DST〕帶進(jìn)位加法ADCDST,SRC;〔DST〕←〔SRC〕+〔DST〕+CF加1INCOPR;〔OPR〕←〔OPR〕+1〔2〕減法指令格式:SUBDST,SRC;〔DST〕←〔DST〕-〔SRC〕帶進(jìn)位減法SBBDST,SRC;〔DST〕←〔DST〕-〔SRC〕-CF減1DECOPR;〔OPR〕←〔OPR〕-1求補(bǔ)NEGOPR;〔OPR〕←0FFFFH-〔0PR〕+1比擬CMPOPR1,OPR2;〔OPR1〕-〔OPR2〕〔3〕乘法指令乘法運(yùn)算分為無符號(hào)數(shù)運(yùn)算和有符號(hào)數(shù)運(yùn)算,各有相應(yīng)的指令,并使用雙操作數(shù)。指令格式:

無符號(hào)數(shù)乘法MULSRC;〔AX〕←〔AL〕×〔SRC〕8位數(shù)乘法

〔DX,AX〕←〔AX〕×〔SRC〕16位數(shù)乘法〔4〕除法指令除法運(yùn)算分為無符號(hào)數(shù)運(yùn)算和有符號(hào)數(shù)運(yùn)算,各有相應(yīng)的指令,并使用雙操作數(shù)。當(dāng)除數(shù)是8位或16位二進(jìn)制數(shù)時(shí),要求被除數(shù)是16位或32位的二進(jìn)制數(shù)。指令格式:

無符號(hào)數(shù)除法DIVSRC;〔AL〕←〔AX〕/〔SRC〕8位二進(jìn)制數(shù)除法的商

〔AH〕←〔AX〕/〔SRC〕8位二進(jìn)制數(shù)除法的余數(shù)

或〔AX〕←〔DX,AX〕/〔SRC〕16位二進(jìn)制數(shù)除法的商

〔DX〕←〔DX,AX〕/〔SRC〕16位二進(jìn)制數(shù)除法的余數(shù)3.輸出顯示指令格式:當(dāng)數(shù)值存儲(chǔ)區(qū)里面剩下一個(gè)數(shù)值〔或者符號(hào)存儲(chǔ)區(qū)里面沒有符號(hào)〕時(shí),運(yùn)算完畢,需要把運(yùn)算結(jié)果輸出顯示。分析運(yùn)算結(jié)果的特點(diǎn):運(yùn)算結(jié)果為一個(gè)2進(jìn)制補(bǔ)碼,整數(shù),如果數(shù)據(jù)長(zhǎng)度為16位,那么運(yùn)算結(jié)果范圍是:0~65535。運(yùn)算結(jié)果的輸出要解決的主要問題是:正負(fù)數(shù)區(qū)分、補(bǔ)碼到ASCII碼轉(zhuǎn)換并輸出顯示。運(yùn)算結(jié)果的輸出流程如下圖。(1)正負(fù)數(shù)區(qū)分運(yùn)算結(jié)果有三種情況:正整數(shù)、負(fù)整數(shù)、零。運(yùn)算結(jié)果以補(bǔ)碼形式對(duì)這三種情況進(jìn)展統(tǒng)一的存儲(chǔ),顯示輸出時(shí)不同。負(fù)整數(shù)前面需要顯示“-〞號(hào),因此要在進(jìn)展器轉(zhuǎn)換該程序直接對(duì)執(zhí)行結(jié)果一補(bǔ)碼形式輸出。。另一方面,正整數(shù)和零的補(bǔ)碼與原碼一樣。而負(fù)整數(shù)的補(bǔ)碼那么不一樣。把負(fù)整數(shù)進(jìn)展取補(bǔ)碼運(yùn)算,把它轉(zhuǎn)換為原碼,可以實(shí)現(xiàn)運(yùn)算結(jié)果統(tǒng)一的ASCII碼轉(zhuǎn)換輸出方法,而不需要分別為正整數(shù)和零、負(fù)整數(shù)分別設(shè)計(jì)兩個(gè)不同的ASCII碼轉(zhuǎn)換程序。(2)補(bǔ)碼到ASCII碼轉(zhuǎn)換計(jì)算結(jié)果在屏幕上的輸出顯示實(shí)際上是ASCII碼的輸出顯示。假設(shè)程序采用的數(shù)據(jù)長(zhǎng)度為16位,那么運(yùn)算結(jié)果范圍是:0~65535,即屏幕最多得顯示5位ASCII碼。(3)利用除最高位法將一個(gè)多位數(shù)的各位進(jìn)展一個(gè)輸出。別離方法是先除以10位數(shù)-1,得到的商即為最高位,余數(shù)為刪除最高位后的多位數(shù)。接著令余數(shù)除以10位數(shù)-2,得到的商為次高位,……。例如123,其位數(shù)是3〔個(gè)位、十位、百位〕,那么計(jì)算過程為:123/103-1,商是1,余數(shù)是2323/103-2,商是2,余數(shù)是33/103-3,商是3,余數(shù)是0可見經(jīng)過三次計(jì)算,得到的三個(gè)商剛好是對(duì)123的各位的別離結(jié)果,而且順序跟輸出方向一樣??梢灾苯蛹?0H轉(zhuǎn)換輸出,屏幕顯示為“123〞。該圖的流程程圖所示。

把原碼轉(zhuǎn)換為ASCII碼這個(gè)轉(zhuǎn)換過程實(shí)際上跟上文的“數(shù)值的補(bǔ)碼轉(zhuǎn)換方法〞是相反操作。例如要把123在屏幕上輸出顯示,即要把123的百位、十位、個(gè)位別離,得到1、2、3,然后轉(zhuǎn)換為31H、32H、33H三個(gè)ASCII碼。眾所周知,把一位數(shù)轉(zhuǎn)換為ASCII碼只需加30H即可。4、程序調(diào)試4.1運(yùn)行界面分析整體一個(gè)架構(gòu)可以直觀的看出整個(gè)計(jì)算器界面和根本的加減運(yùn)算以及輸入提示。算法分析主程序模塊.主程序模塊首先實(shí)現(xiàn)調(diào)用子程序加減乘除,優(yōu)先級(jí)運(yùn)算等,初始化數(shù)據(jù)段,將存放器ax,bx,cx,dx初始化賦初值為0,,輸入字符或數(shù)字并判斷,調(diào)用子程序AAAA,BBBB等子程序,判斷優(yōu)先級(jí),調(diào)用加減乘除運(yùn)算子程序?qū)λ斎氲氖阶优袛喑龅南鄳?yīng)運(yùn)算符進(jìn)展運(yùn)算,輸出運(yùn)算結(jié)果,判斷是否繼續(xù),繼續(xù)那么返回輸入,不繼續(xù)那么退出程序.1.顯示計(jì)算器界面利用09H的功能號(hào)調(diào)用將所設(shè)計(jì)的界面直觀的顯示出來源代碼:TAB1DB13,10,"HUIBIANJISUANQISHEJI$"TAB2DB13,10,"1234$"TAB3DB13,10,"5678$"TAB4DB13,10,"90+-$"TAB5DB13,10,"*/()$"TAB6DB13,10,"PLEASEINPUTAFORMULA:$"TAB7DB13,10,"$"MOVDX,OFFSETTAB1MOVAH,09HINT21H…..2輸入字符及轉(zhuǎn)換程序模塊在輸入字符或數(shù)字該程序要需要將其所輸入的子符進(jìn)展轉(zhuǎn)換,此模塊包括運(yùn)算符號(hào)和數(shù)字的ASCⅡ碼的轉(zhuǎn)換、負(fù)數(shù)的補(bǔ)碼〔該計(jì)算器輸出范圍為0~65535〕轉(zhuǎn)換。源程序代碼:ACⅡ碼的轉(zhuǎn)換MANA:;MOVC0,AXADDC1,1MOVAX,BXMOVCX,10MULCXADDAX,C0MOVBX,AXJMPSTARTW4符號(hào)的優(yōu)先級(jí)運(yùn)算符號(hào)的運(yùn)算優(yōu)先問題,該程序利用靜態(tài)的優(yōu)先級(jí)判斷所輸入的式子的四那么運(yùn)算優(yōu)先順序。加減乘除的子程序調(diào)用例如:加法源程序代碼:ADDD:ADDDI,2MOVBX,NUM4[DI]ADDAX,BXADDDI,2JMPINT3對(duì)于結(jié)果的一個(gè)輸出,該計(jì)算器采用除最高位輸出各位。源程序代碼段:OUTPUTPROCNEAROUT1:MOVAX,BX;將余數(shù)賦還給AX因?yàn)槌龜?shù)十16位,所以余數(shù)在DX中ADDSI,2;BP加二,用以調(diào)用下一個(gè)被除數(shù)LOOPOUTTCALLENTERJMPSTARTA;跳回程序開場(chǎng)RETAADD:INCOLTJMPOUT2OUTPUTENDP注:該計(jì)算器的除法的結(jié)果以取整的形式輸出4.2調(diào)試過程與分析注:該計(jì)算器只能是按“=〞才正確的輸出計(jì)算結(jié)果,按“enter〞等其他無效方式也會(huì)進(jìn)展報(bào)錯(cuò)4關(guān)于補(bǔ)碼和溢出問題當(dāng)在進(jìn)展四那么運(yùn)算過程中,假設(shè)結(jié)果為負(fù)數(shù)那么結(jié)果一補(bǔ)碼的形式輸出,假設(shè)結(jié)果超出結(jié)果范圍那么溢出。5、心得體會(huì)5.1設(shè)計(jì)體會(huì)本次的課程設(shè)計(jì)對(duì)于計(jì)算器的設(shè)計(jì)要怎么用匯編語言編寫四那么運(yùn)算。編寫計(jì)算簡(jiǎn)單的不帶括號(hào)的沒有優(yōu)先級(jí)的+、-或*、/、運(yùn)算程序還是不太難的,因?yàn)闆]有優(yōu)先級(jí)程序只要根據(jù)表達(dá)式運(yùn)算符的順序從左到右進(jìn)展運(yùn)算,最后輸出結(jié)果。而該課程設(shè)計(jì)要求設(shè)計(jì)能進(jìn)展簡(jiǎn)單的的+、-或*、/、混合運(yùn)算的四那么運(yùn)算程序,這樣程序設(shè)計(jì)時(shí)相對(duì)于有括號(hào)的計(jì)算要用到設(shè)定權(quán)值的方法來設(shè)置符號(hào)的優(yōu)先級(jí)比起來簡(jiǎn)單很多。這次的課程設(shè)計(jì)等于將本學(xué)期所學(xué)習(xí)的匯編知識(shí)對(duì)其進(jìn)展一個(gè)綜合的應(yīng)用,而且對(duì)其匯編有了根本的了解。在本次的課程設(shè)計(jì)中我主要負(fù)責(zé)四那么函數(shù)的編寫和輸出顯示,在過程中也遇到挺多的困難,對(duì)于匯編掌握的不透徹,只能通過查找資料和同學(xué)的幫助下來編寫程序當(dāng)然還是有效果的,對(duì)于這兩局部的難點(diǎn)所在我覺得是輸出局部,首先要分析計(jì)算結(jié)果為多位數(shù)的各位問題要采用哪種方法進(jìn)展輸出,在經(jīng)過分析后最終采用除最高位法進(jìn)展一個(gè)輸出。此方法較為簡(jiǎn)單相比擬于除十法,因?yàn)樵诔ㄟ€設(shè)計(jì)到堆棧問題增加了程序量,且該計(jì)算器紙對(duì)其進(jìn)展簡(jiǎn)單的四那么運(yùn)算所以除最高位法適用。5.2系統(tǒng)改良這個(gè)計(jì)算器設(shè)計(jì)的較為簡(jiǎn)單,只能進(jìn)展一些簡(jiǎn)單的不帶括號(hào)的進(jìn)展運(yùn)算,對(duì)于一些較為復(fù)雜的四那么混合運(yùn)算不適用。那么此外界面系統(tǒng)可以利用BIOS中斷和DOS中斷和調(diào)用顯示功能進(jìn)展程序設(shè)計(jì),顯示相應(yīng)的圖形或字符對(duì)其進(jìn)展界面美化。此外在輸出方面在除法的運(yùn)算的輸出可以對(duì)其修改例如不能整除的可以一小數(shù)輸出等以及除高位法有個(gè)缺陷必須首先確定要輸出的數(shù)值有多少位,編程者必須十分清楚需要輸出的數(shù)值的數(shù)值范圍可以對(duì)其進(jìn)展一個(gè)改良。附錄:DATASEGMENTTAB1DB13,10,"HUIBIANJISUANQISHEJI$"TAB2DB13,10,"1234$"TAB3DB13,10,"5678$"TAB4DB13,10,"90+-$"TAB5DB13,10,"*/()$"TAB6DB13,10,"PLEASEINPUTAFORMULA:$"TAB7DB13,10,"$"NUM1DW100DUP(0)NUM3DW100DUP(0)NUM4DW100DUP(0)C0DW0C1DW0C2DW0SUM1DW0SUM2DW0OLTDW0RESULTDW0TABLEDW10000,1000,100,10,1WRONGDB13,10,"WRONGINPUT!$";OVERDB13,10,"NOTOPERATIONALCHARACTER!$"DATAENDS;代碼段CODESEGMENTASSUMECS:CODE,DS:DATA;主程序START:MOVAX,DATAMOVDS,AXCALLDISPMENU;顯示匯編計(jì)算器菜單STARTA:MOVBX,-1MOVSI,0MOVDI,30MOVCX,0MOVC0,0MOVC1,0MOVC2,0;初始化各個(gè)變量CALLINPUTCALLYUNSUANCALLOUTPUTEXIT:MOVAH,4CHINT21H;計(jì)算器顯示菜單子程序 DISPMENUPROCNEARMOVDX,OFFSETTAB1MOVAH,09HINT21HMOVDX,OFFSETTAB2MOVAH,09HINT21HMOVDX,OFFSETTAB3MOVAH,09HINT21HMOVDX,OFFSETTAB4MOVAH,09HINT21HMOVDX,OFFSETTAB5MOVAH,09HINT21HMOVDX,OFFSETTAB6MOVAH,09HINT21HMOVDX,OFFSETTAB7MOVAH,09HINT21HRETDISPMENUENDP;輸入字符及轉(zhuǎn)換程序模塊;輸入并轉(zhuǎn)換子程序,結(jié)果式存入NUM1INPUTPROCNEARSTARTW:MOVAH,1INT21HMOVAH,0CMPAL,1BH;'ESC'JZEXITCMPAL,2AH;'*'JZMARKCMPAL,2FH;'/'JZMARKCMPAL,2BH;'+'JZMARKCMPAL,2DH;'-'JZMARKCMPAL,29H;')'JZMARKCMPAL,28H;'('JZMARKCMPAL,3DH;'='JZEQUALSUBAL,30HCMPAL,0JLERRORCMPAL,9JAERRORJMPARITHERROR:;顯示輸入錯(cuò)誤LEADX,WRONGMOVAH,9INT21HJMPSTARTAARITH:CMPC1,0JETTOMMANA:;數(shù)值的補(bǔ)碼轉(zhuǎn)換MOVC0,AXADDC1,1MOVAX,BXMOVCX,10MULCXADDAX,C0MOVBX,AXJMPSTARTWTTOM:MOVBX,0JMPMANAMARK:CMPBX,-1JEGGONMOVNUM1[SI],BXADDSI,2MOVNUM1[SI],AXMOVBX,-1MOVC1,0ADDSI,2JMPSTARTWGGON:MOVNUM1[SI],AXADDSI,2JMPSTARTWEQUAL:;輸入是等號(hào)時(shí),調(diào)到主程序執(zhí)行運(yùn)算CMPBX,-1JELLOPMOVNUM1[SI],BXADDSI,2MOVNUM1[SI],AXJMPENDWLLOP:MOVNUM1[SI],AXJMPENDWENDW:RETINPUTENDP;運(yùn)算的子程序;YUNSUANPROCNEARAAAA:MOVBP,0MOVDI,0MOVBX,0MOVC0,0MOVC1,0MOVSUM2,0MOVSI,0BBBB:MOVAX,NUM1[SI]CMPAX,29H;JERSEEADDSI,2CMPAX,3DH;=JELASTLJMPBBBBRSEE:SUBSI,2MOVAX,NUM1[SI]CMPAX,28H;JEMOTTJMPRSEEMOTT:MOVSUM2,SIMOVDI,0KKTY:ADDSI,2MOVAX,NUM1[SI]MOVNUM3[DI],AX;CMPAX,29H;JERCOUNTADDDI,2JMPKKTYRCOUNT:MOVSUM1,SICALLCALCMOVDI,SUM2MOVAX,RESULTMOVNUM1[DI],AXMOVSI,SUM2CCOO:ADDSI,2ADDDI,2MOVAX,NUM1[SI]MOVNUM1[DI],AXCMPAX,3DH;=JEAAAAJMPCCOOLASTL:MOVSI,0UUCC:MOVAX,NUM1[SI]MOVNUM3[SI],AXADDSI,2CMPAX,3DH;=JEENDLJMPUUCCENDL:CALLCALCRETYUNSUANENDP;計(jì)算混合運(yùn)算的子程序CALCPROCNEARMOVAX,NUM3MOVNUM4,AXMOVDI,2MOVC0,SIMOVSI,2INT1:MOVBX,NUM3[SI]CMPBL,2AH;'*'JEMULLCMPBL,2FH;'/'JEDIVVCMPBL,3DH;'='JECHUBUCMPBL,29H;')'JECHUBUCMPBL,2BH;'+'JEPOTTCMPBL,2DH;'-'JEPOTTINT2:MOVNUM4[DI],BXADDDI,2ADDSI,2MOVAX,NUM3[SI]MOVNUM4[DI],AXADDDI,2ADDSI,2JMPINT1POTT:SUBDI,2MOVNUM4[DI],AXADDDI,2JMPINT2MULL:ADDSI,2MOVBX,NUM3[SI]MULBXADDSI,2JMPINT1DIVV:ADDSI,2MOVBX,NUM3[SI]DIVBXADDSI,2JMPINT1ADDD:ADDDI,2MOVBX,NUM4[DI]ADDAX,BXADDDI,2JMPINT3SUBB:ADDDI,2MOVBX,NUM4[DI]SUBAX,BXADDDI,2JMPINT3CHUBU:MOVNUM4[DI],BXSUBDI,2MOVNUM4[DI],AXMOVAX,NUM4

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論