




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、摘要匯編語(yǔ)言是為克服機(jī)器語(yǔ)言的缺點(diǎn)而引入的,是一種將機(jī)器語(yǔ)言指令符號(hào)化 的編程語(yǔ)言,也稱符號(hào)語(yǔ)言。匯編語(yǔ)言,作為一門語(yǔ)言,對(duì)應(yīng)于高級(jí)語(yǔ)言的編譯 器,需要一個(gè)“匯編器”來(lái)把匯編語(yǔ)言原文件匯編成機(jī)器可執(zhí)行的代碼。高級(jí)的 匯編器為我們寫匯編程序提供了很多類似于高級(jí)語(yǔ)言的特征,比如結(jié)構(gòu)化、抽象 等。在這樣的環(huán)境中編寫的匯編程序,有很大一部分是面向匯編器的偽指令,已 經(jīng)類同于高級(jí)語(yǔ)言。雖然現(xiàn)在的匯編環(huán)境已經(jīng)如此高級(jí),即使全部用匯編語(yǔ)言來(lái) 編寫windows的應(yīng)用程序也是可行的,但這不是匯編語(yǔ)言的長(zhǎng)處。匯編語(yǔ)言 的長(zhǎng)處還在于編寫高效且需要對(duì)機(jī)器硬件精確控制的程序,而本次設(shè)計(jì)的簡(jiǎn)單計(jì) 算器程序設(shè)計(jì)可以支持簡(jiǎn)
2、單的四則運(yùn)算。關(guān)鍵詞:匯編語(yǔ)言四則運(yùn)算簡(jiǎn)易計(jì)算器1. 系統(tǒng)需求分析11設(shè)計(jì)要求與目的11.2系統(tǒng)目標(biāo)11.3功能分析22. 系統(tǒng)概要設(shè)計(jì)32總體分析32.2系統(tǒng)框圖32.2.1功能結(jié)構(gòu)圖32.2.2系統(tǒng)流程圖33. 程序說(shuō)明53程序說(shuō)明53.2主模塊53.2.1主模塊流程圖53.2.2主模塊程序代碼63.3子模塊93.3.1子模塊流程圖93.3.2子模塊程序代碼94. 運(yùn)行結(jié)果134.1運(yùn)行軟件 emu8086 簡(jiǎn)介134.2運(yùn)行結(jié)果144.3算法分析164.4調(diào)試過(guò)程及分析165. 心得體會(huì)176. 參考文獻(xiàn)181系統(tǒng)需求分析1.1設(shè)計(jì)要求與目的(1) 編寫一個(gè)程序?qū)崿F(xiàn)十進(jìn)制加減乘除運(yùn)算;(
3、2) 在命令提示后輸入算式,運(yùn)算符號(hào)不超過(guò)四個(gè);(3) 冋車后進(jìn)行計(jì)算并以十進(jìn)制顯示結(jié)果;(4) 程序采用匯編語(yǔ)言在pc機(jī)上完成;(5) 寫出系統(tǒng)需求分析、原理圖和程序?qū)崿F(xiàn)流程圖;(6) 對(duì)結(jié)果進(jìn)行分析;(7) 要求閱讀相關(guān)參考文獻(xiàn)不少于5篇;(8) 根據(jù)課程設(shè)計(jì)有關(guān)規(guī)范,按吋、獨(dú)立完成課程設(shè)計(jì)說(shuō)明書。通過(guò)本次的課程設(shè)計(jì),加深對(duì)匯編語(yǔ)言的了解,應(yīng)用匯編語(yǔ)言程序設(shè)計(jì) 等所學(xué)相關(guān)知識(shí)及查閱資料,完成簡(jiǎn)單計(jì)算器程序設(shè)計(jì),以達(dá)到理論與實(shí)踐更好 的結(jié)合、進(jìn)一步提高綜合運(yùn)用所學(xué)知識(shí)和設(shè)計(jì)的能里的目的。具體來(lái)說(shuō),在基本思路和基本方法上對(duì)基于8086/8088和基于arm核的匯 編語(yǔ)言程序設(shè)計(jì)有一個(gè)比較感性的
4、認(rèn)識(shí),并具備一定程度的設(shè)計(jì)能力,從而能夠 熟練掌握編寫匯編語(yǔ)言源程序的基本方法和基本構(gòu)架,學(xué)會(huì)編寫順序結(jié)構(gòu)、分支 結(jié)構(gòu)、循環(huán)結(jié)構(gòu)和子程序的匯編程序,掌握程序中數(shù)據(jù)的產(chǎn)生與輸入輸出的方法 以及一些關(guān)于匯編語(yǔ)言更深層次方面有初步的認(rèn)識(shí)。1.2系統(tǒng)目標(biāo)本次專業(yè)綜合課程設(shè)計(jì)是要設(shè)計(jì)一個(gè)能實(shí)現(xiàn)簡(jiǎn)單加、減、乘、除四則運(yùn)算的 計(jì)算器,如十進(jìn)制數(shù)的加減乘除四則運(yùn)算。我們學(xué)習(xí)過(guò)兩個(gè)具體數(shù)字進(jìn)行加減法 運(yùn)算,但是對(duì)于用匯編語(yǔ)言實(shí)現(xiàn)的簡(jiǎn)單計(jì)算器,其難點(diǎn)在于這兩個(gè)要做運(yùn)算的數(shù) 字是未知的,是由自己調(diào)用中斷輸入到屏幕上并要用程序存儲(chǔ)起來(lái)的數(shù),然后才 能對(duì)這兩個(gè)數(shù)字進(jìn)行運(yùn)算,而且做的是加法運(yùn)算、減法運(yùn)算、乘法運(yùn)算還是除法
5、 運(yùn)算也是未知的,因此我們還要判斷用戶所輸入的運(yùn)算是四則運(yùn)算中的哪一個(gè)運(yùn) 算。此外,運(yùn)算過(guò)程中的進(jìn)位或是借位,選擇用什么樣的方式進(jìn)行輸岀,如何實(shí) 現(xiàn)清屏等也是要解決的問(wèn)題。1.3功能分析系統(tǒng)需求分析包括設(shè)計(jì)的功能分析和系統(tǒng)的流程,功能分析放在首位,每一 個(gè)軟件都要能滿足一定的功能才有使用價(jià)值。根據(jù)功能需求來(lái)創(chuàng)建應(yīng)用程序。本設(shè)計(jì)的功能如下:1、輸入2個(gè)數(shù),先判斷是加減運(yùn)算還是乘除運(yùn)算,再進(jìn)行計(jì)算;2、判斷符號(hào)是否為運(yùn)算符;3、冋車為換行符;4、用十進(jìn)制輸岀運(yùn)算結(jié)果。2 系統(tǒng)概要設(shè)計(jì)2.1總體分析本次設(shè)計(jì)的簡(jiǎn)單計(jì)算器,主要是為了解決數(shù)學(xué)中的加、減、乘、除四則運(yùn)算 的問(wèn)題。由于在設(shè)計(jì)過(guò)程中考慮到了可
6、能會(huì)多次計(jì)算數(shù)據(jù),所以本次課程設(shè)計(jì)設(shè) 計(jì)的簡(jiǎn)單計(jì)算器可以一次運(yùn)行,多次使用。本程序使用了函數(shù)和宏混用的方式實(shí) 現(xiàn)了代碼的較好的可讀性,使程序看起來(lái)結(jié)構(gòu)嚴(yán)謹(jǐn)。2.2系統(tǒng)框圖2.2.1功能結(jié)構(gòu)圖木程序的功能結(jié)構(gòu)圖如圖2-1:圖2-1功能結(jié)構(gòu)圖222系統(tǒng)流程圖本程序的系統(tǒng)流程圖如圖2-2:開始圖2-2系統(tǒng)流程圖3程序說(shuō)明3.1程序說(shuō)明本程序主要分為兩個(gè)部分:主模塊和子模塊。 主模塊:主要完成程序的主體框架結(jié)構(gòu),提供人程序的交互。 子模塊:主要完成對(duì)數(shù)據(jù)的加工,處理。3.2主模塊3.2.1主模塊流程圖首先提供一個(gè)主界面,提示用戶按要求輸入具體的數(shù)據(jù)和所要進(jìn)行的操作, 輸入完畢后給出結(jié)果。如果輸入過(guò)程中
7、發(fā)現(xiàn)非法輸入,則立即給與提示,程序自 動(dòng)刷新界面,提示繼續(xù)輸入。主模塊流程圖如圖31:圖3-1主模塊流程圖3.2.2主模塊程序代碼程序代碼如下:stackssegmentstackdw20 dup(?)stacksendsdatasegmentnumdw0tab1db” please input a formula:(enter q toexit)”, 13,10,”$”num1dw100 dup(?)num2dw10 dup(?);存放除法產(chǎn)生的小數(shù)位num4dw100 dup(?)codw0cldw0c2dw0sumidw0sum2dw0oltdw0resultdw0tabodw10000
8、,1000,100,10,1 ;定義輸出時(shí)要用到的除數(shù)wrongdb13jo;1 wrong input!$n;over db 13,10,"not operational character!$n data ends代碼段codesegmentassumecs:code,ds:data-主程序start:movax,stacksmovss,axmovax,datamovds,axcalldispmenu;顯示匯編計(jì)算器菜單starta:movbx,-1movsi,0movdi,30movcx,0movc0,0movcl,0movc2,0;初始化各個(gè)變量callinputcallca
9、lccalloutputexit:movah,4chint21h計(jì)算器顯示菜單子程序dispmenuprocnearmovdx,offset tab 1movah,09hint21hretdispmenuendp-;輸入字符及轉(zhuǎn)換程序模塊:輸入并轉(zhuǎn)換子程序,結(jié)果式存入num1inputprocnearstartw:movah,1int21hmovah,0cmpal,q;q退出jzexitcmpal,2ah 刑jzmarkcmpal,2fh;/*jzmarkcmpal,2bh;屮jzmarkcmpal,2dh ljzmarkcmpal,3dhjeequalcmpal,c;c清屏jeclssuba
10、l,30hcmpal,0;非數(shù)字和運(yùn)算符則報(bào)錯(cuò)jlerrorcmpal,9jgerrorjmparitherror:;顯示輸入錯(cuò)誤leadx,wrongmovah,9int21hjmpstartacls:movax,03hint10harith:mana:ttom:mark:ggon:equal:llop:endw:inputcmpcl,0movco,axaddcl,lmovax,bxmovcx, 10mulexaddax,comovbx,axjmpstartwjettommovbx,0jmpmana;數(shù)值的補(bǔ)碼轉(zhuǎn)換;ax->bx;ax=bx*10+ax;ax->bx,下次轉(zhuǎn)換使用
11、cmpbx,-1;bx=-1表示上一次輸入的是數(shù)字jeggonmovnum1si,bx ;將操作符和運(yùn)算符都放入num1addsi,2movnum 1 si,axmovbx,-1movcl,0addsi,2jmpstartwmovnumlfsilaxaddsi,2jmpstartw;輸入是等號(hào)時(shí),調(diào)到主程序執(zhí)行運(yùn)算cmpbx,1jellopmovnum1si,bxaddsi,2movnum 1 si,axjmpendwmovnum1si,axjmpendwretendp3.3子模塊33.1子模塊流程圖完成對(duì)數(shù)據(jù)的進(jìn)一步加工處理,轉(zhuǎn)換格式并得出結(jié)果。首先根據(jù)輸入調(diào)用 混合了對(duì)應(yīng)的“+”、四大函數(shù)
12、的模塊,這是本程序的核心 模塊,其他部分的一些小模塊都是為這幾大模塊服務(wù)的。子模塊流程圖如圖32:接收用戶的運(yùn)算符號(hào)調(diào)用對(duì)應(yīng)模塊運(yùn)算數(shù)據(jù),得出結(jié)果j丿圖3-2子模塊流程圖3.3.2子模塊程序代碼程序代碼如下:;計(jì)算混合運(yùn)算的子程序(不含括號(hào)的)calcprocmovmovmovmovmovmovinti:movcmpjenearax,num 1num4,axnum2,0di,2cx,0si,2bx,num1sibl,2ahmullint2:movadd addmovmovadd addjmpnum4di,bxdi,2si,2ax,num1sinum4di,axdi,2si,2intipott:
13、submovaddjmpdi,2num4di,ax ;運(yùn)算結(jié)果存放在num4di,2int2mull:cmpbl,2fhjedivvcmpbl,3dh9 jejmp_cbcmpbl,29hjejmp_cbcmpbl,2bh;屮jepottcmpbl,2dh9 "jepottadd mov muladd jmpsi,2bx,num1sibx;ax存放計(jì)算結(jié)果si,2intijmp_cb:divv:addmovxordivpushjmpchubusi,2;是除法則直接運(yùn)算bx,num1sidx,dxbxaxmovmovxs: movmovmuldivmovcx,didi,0ax,dx;得
14、到小數(shù)部分_num,10_numbxnum2di,axaddcmpjlpopmovaddjmpaddd:addmovaddaddjmpsubb:addmovsubaddjmpchubu: movsubmovmovmovint3:movcmpjecmpjemovretsi,0ax,resultaxax,0fs_zsdl,2dhah,02h21hdi,2di,4xsaxdi,cxsi,2intidi,2bx,num4diax,bxdi,2int3di,2bx,num4diax,bxdi,2int3num4di,bxdi,2num4di,axax,num4di,2bx,num4dibx,2bh ;屮
15、adddbx,2dhsubbresult,axcalc endp輸出最終結(jié)果的子程序output proc nearmovmovbegain: pushcmpjljmpfs_: movmovintpopnegaxaxzs:movbx,10xorex,exq0:xordx,dxdivbx;ordx,0e30hpushdxincexcmpax,0jnzq0qi:popaxdecexint10hcmpcx,0jnzqi;輸出字符;cx =0;dx=0ax/10商放入ax,余數(shù)放入dxprocnearmovdl,0dh;回車movah,02hint21hmovdl,0ah;換行movah,02hint
16、21hret;輸出小數(shù)程序ot: movmovintmovot1: movaddaddmovintcmpjlcalljmpretoutput endp回車換行的子程序enterdl,tah,02h21hdi,0dx,num2didi,2dx,30hah,02h21hdi,60t1.enterstartenter endpcode endsstartend4 運(yùn)行結(jié)果4.1運(yùn)行軟件emu8086簡(jiǎn)介emu8086-microprocessoremulator結(jié)合了一個(gè)先進(jìn)的原始編輯器、組譯器、 反組譯器、具除錯(cuò)功能的軟件模擬工具(虛擬pc),還有一個(gè)循序漸進(jìn)的指導(dǎo) 工具。它會(huì)在模擬器中一步一步的
17、編譯程序碼并執(zhí)行,視覺化的工作環(huán)境讓它更 容易使用。可以在程序執(zhí)行當(dāng)中檢視暫存器、旗標(biāo)以及記憶體。模擬器會(huì)在虛擬 pc中執(zhí)行程序,這可以隔絕程序,避免它去存取實(shí)際便體,像碩碟、記憶體, 這個(gè)模擬器是在一臺(tái)”虛擬”的電腦上運(yùn)行程序的,它擁有自己獨(dú)立的“硬件二這 樣你程序就同諸如硬盤與內(nèi)存這樣的實(shí)際硬件完全隔離開,動(dòng)態(tài)調(diào)試(debug) 時(shí)非常方便.8086的機(jī)器代碼同intel下一代微處理器完全兼容,包括pentium ii和pentium 4.這意味著8086代碼具有很廣泛的應(yīng)用范圍,它在老式的和最 新的計(jì)算機(jī)系統(tǒng)上都能工作.8086指令的另外一個(gè)優(yōu)點(diǎn)是它的指令集非常小,這樣學(xué)起來(lái)會(huì)容易得 多
18、.emu8086同主流匯編程序相比,語(yǔ)法簡(jiǎn)單得多,但是它能生成在任何能兼 容8086機(jī)器語(yǔ)言的代碼。注意:如果不使用emu8086編譯程序,那你無(wú)法在運(yùn) 行的時(shí)候單步跟蹤。該軟件包含了學(xué)習(xí)匯編語(yǔ)言的全部?jī)?nèi)容。emu8086集源代碼編輯器,匯編/ 反匯編工具以及可以運(yùn)行debug的模擬器(虛擬機(jī)器)于一身,此外,還有循序 漸進(jìn)的教程。這套軟件對(duì)于剛開始學(xué)習(xí)匯編語(yǔ)言的朋友非常有幫助.它能夠編譯 源代碼,并在模擬器上一步一步的執(zhí)行。可視化界面令操作易如反掌.可以在執(zhí) 行程序的同時(shí)觀察寄存器,標(biāo)志位和內(nèi)存.算術(shù)和邏輯運(yùn)算單元(alu)顯示中 央處理器內(nèi)部的工作情況.4.2運(yùn)行結(jié)果加法運(yùn)算結(jié)果如圖41:
19、礎(chǔ) emulator screen (50x18 chars)please input a formula:(enter q to 5+8=13.000please input a formula:(enter 47+83=130.000please input a formula:(enter 364+711=1075.000please input a formula:(enterclear screenchange font圖41加法運(yùn)算結(jié)果減法運(yùn)算結(jié)果如圖42:emulator screen (50x18 chars)19-4=5.000please input a 57-23=34.
20、000please input a ©65-843=122.000 aplease input 3-8=-5.000please input 46-73=-27.000please inputformula:(enter formula:(enter formula:(enter formula:(enter formula:(enterqqqqqtototoexit)exit)exit)exit)to exit)to exit)to exit)to exit)to exit)圖4-2減法運(yùn)算結(jié)果乘法運(yùn)算結(jié)果如圖43:emulator screen (50x18 chars)4*7=
21、28.000please input a 24*15=360.000please input a 271*36=9756.000please input a 12*0=0.000please input aformula:(enterformula:(enterformula:(enterformula:(entertotototoexit)exit)exit)exit)clear screenchange font圖43乘法運(yùn)算結(jié)果除法運(yùn)算結(jié)果如圖44:礎(chǔ) emulator screen (50x18 chars)5/2=2.500please input a formula:(enter
22、q to exit) 48/6=8 000please input a formula:(enter q to exit) 79/12=6.580please input a formula:(enter q to exit) 967/426=2.260change fon<please input a formula:(enter q to exit)clear $cieen圖4-4除法運(yùn)算結(jié)果混合運(yùn)算結(jié)果如圖45:emulator screen (50x18 chars)please input a formula:(enter q to exit) 2+8/4*3-9=000ple
23、ase input a formula:(enter 14*7/9+95=105.880please input a formula:(enter659/34+67-274=-188 380please input a formula:(enter769/42*15-231+439=478.300please input a formula:(entertotototoexit)exit)exit)exit)clear screencha nge font圖45混合運(yùn)算結(jié)果4.3算法分析本程序使用了宏和函數(shù)調(diào)用的方法,這樣做使得整個(gè)程序體看上去嚴(yán)謹(jǐn),舒 服。startw子程序,實(shí)現(xiàn)輸入字符及轉(zhuǎn)換的效果。calc子程序開始運(yùn)算, 加、減、乘、除各自的運(yùn)算由對(duì)應(yīng)的程序塊做出詳細(xì)的處理。output子程序, 輸出最終結(jié)果。_enter子程序,實(shí)現(xiàn)冋車換行的效果。通過(guò)這幾個(gè)及程序的協(xié) 助,使得這個(gè)系統(tǒng)可以正常的運(yùn)行。4.4調(diào)試過(guò)程及分析進(jìn)入emu8086編寫完代碼后依次分別點(diǎn)擊按鈕"emulate" "run",完成編 譯、連接和運(yùn)行過(guò)程,也可以進(jìn)入dos環(huán)境下用debug命令完成類似的功能, 整個(gè)程序按“esc”退出。5心得體會(huì)這次學(xué)習(xí)讓我受益匪淺,無(wú)論從知識(shí)上還是其他的各個(gè)方面。上課的時(shí)候的 學(xué)習(xí)從來(lái)沒(méi)有見過(guò)真正的匯編語(yǔ)言運(yùn)行效果,只是從理
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 大潤(rùn)發(fā)保潔活動(dòng)方案
- 圣誕狂歡活動(dòng)方案
- 夫妻創(chuàng)業(yè)活動(dòng)方案
- 夏天人氣活動(dòng)方案
- 大班親子活動(dòng)元旦活動(dòng)方案
- 地產(chǎn)多巴胺活動(dòng)方案
- 大班生成活動(dòng)活動(dòng)方案
- 夜市地?cái)偯朗彻?jié)活動(dòng)方案
- 大學(xué)食堂開學(xué)活動(dòng)方案
- 增加部門集體活動(dòng)方案
- 橋梁基本狀況卡片(2021新版)
- 塔式起重機(jī)安裝驗(yàn)收牌
- 有機(jī)硅化學(xué)課件-有機(jī)硅化學(xué)基本反應(yīng)
- 如何根據(jù)三視圖畫軸測(cè)圖及補(bǔ)視圖缺線課件
- 《水產(chǎn)養(yǎng)殖前沿講座》課程教學(xué)大綱
- 漁業(yè)成品油價(jià)格補(bǔ)助專項(xiàng)資金管理暫行辦法
- 水庫(kù)工程建設(shè)征地移民安置監(jiān)測(cè)評(píng)估本底調(diào)查報(bào)告
- 2023年06月新疆生產(chǎn)建設(shè)兵團(tuán)第十二師“三支一扶”招募高校畢業(yè)生筆試題庫(kù)含答案解析
- 基于C#的WinForm程序設(shè)計(jì)學(xué)習(xí)通課后章節(jié)答案期末考試題庫(kù)2023年
- 十堰市張灣區(qū)紅衛(wèi)街道社區(qū)工作者考試真題2022
- 突發(fā)性耳聾培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論