微機(jī)原理實(shí)驗(yàn)報(bào)告期中 華北電力大學(xué)保定_第1頁
微機(jī)原理實(shí)驗(yàn)報(bào)告期中 華北電力大學(xué)保定_第2頁
微機(jī)原理實(shí)驗(yàn)報(bào)告期中 華北電力大學(xué)保定_第3頁
微機(jī)原理實(shí)驗(yàn)報(bào)告期中 華北電力大學(xué)保定_第4頁
微機(jī)原理實(shí)驗(yàn)報(bào)告期中 華北電力大學(xué)保定_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

華北電力大學(xué)課 程 報(bào) 告| 報(bào)告名稱 匯編語言的數(shù)據(jù)處理實(shí)踐 課程名稱 微機(jī)原理與匯編語言程序設(shè)計(jì) | 專業(yè)班級(jí):信安1301 學(xué)生姓名: 學(xué) 號(hào): 成 績(jī):7* 封面左側(cè)印痕處裝訂工作量(25)規(guī)范性(25)邏輯性(25)新穎性(25)總成績(jī)(100) 一、設(shè)計(jì)要求采用恰當(dāng)?shù)膮R編語言設(shè)計(jì)環(huán)境,基于課程中對(duì)有符號(hào)數(shù)組輸入輸出、求平均值、輸出平均值的程序例子,設(shè)計(jì)能對(duì)有符號(hào)數(shù)據(jù)進(jìn)行處理的程序,要求在程序中實(shí)踐三種主程序與子程序參數(shù)傳遞的方法、實(shí)踐子程序庫(kù)的使用方法和宏匯編技術(shù),并能體現(xiàn)一定的新穎性。要求整個(gè)設(shè)計(jì)具備一定的工作量,報(bào)告描述格式規(guī)范、條理清晰,并能反映自己的創(chuàng)新。2、 設(shè)計(jì)內(nèi)容1.從鍵盤輸入有符號(hào)十進(jìn)制數(shù)的子程序,實(shí)現(xiàn)子程序與主程序通過寄存器傳遞參數(shù)。2.向顯示器輸出有符號(hào)十進(jìn)制數(shù)的子程序,實(shí)現(xiàn)子程序與主程序通過共享變量傳遞參數(shù)。3.求數(shù)組的平均值,實(shí)現(xiàn)子程序與主程序通過堆棧傳遞參數(shù)。4.顯示數(shù)組的平均值。5.對(duì)重復(fù)匯編的程序語句,設(shè)計(jì)子程序庫(kù)和宏匯編技術(shù)3、 所用環(huán)境介紹所采用的實(shí)驗(yàn)環(huán)境是masmforwindowsMasmforwindows集成實(shí)驗(yàn)環(huán)境是從事一線教學(xué)的大學(xué)教師針對(duì)匯編語言初學(xué)者的特點(diǎn)開發(fā)的一個(gè)簡(jiǎn)單易用的匯編語言學(xué)習(xí)與實(shí)驗(yàn)軟件,支持最新操作系統(tǒng)WINDOWS7,支持DOS的16/32位匯編程序和Windows下的32匯編程序(并提供調(diào)試通過的35個(gè)WINDOWS匯編程序?qū)嵗创a),它具有錯(cuò)誤信息自動(dòng)定位、關(guān)鍵字實(shí)時(shí)幫助并且在幫助中動(dòng)畫演示匯編指令的執(zhí)行過程、語法著色、無限次撤消與恢復(fù)、WORD式的查找、替換、定位、支持中文、長(zhǎng)文件名等功能。4、 實(shí)驗(yàn)方法與步驟1. 子程序從鍵盤輸入一個(gè)有符號(hào)10進(jìn)制數(shù),負(fù)數(shù)用“-”引導(dǎo),正數(shù)直接輸入或用“+”引導(dǎo),子程序還要包含將ascii碼轉(zhuǎn)換為二進(jìn)制數(shù)的過程,算法如下:(1)判斷是正數(shù)還是負(fù)數(shù),并用一個(gè)寄存器記錄下來(2)輸入09數(shù)字(ASCII碼),減30h轉(zhuǎn)換為二進(jìn)制數(shù)(3)將前面輸入的數(shù)值乘以10,并與剛輸入的數(shù)字相加得到新的數(shù)值(4)重復(fù)(2)、(3),直到輸入一個(gè)非數(shù)字字符結(jié)束(5)如果是負(fù)數(shù)則求補(bǔ),轉(zhuǎn)換成補(bǔ)碼,否則直接保存數(shù)字2. 子程序在屏幕上顯示一個(gè)有符號(hào)10進(jìn)制數(shù),負(fù)數(shù)用“-”引導(dǎo)。子程序還包含將二進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼的過程,算法如下:(1)首先判斷數(shù)據(jù)是零、正數(shù)還是負(fù)數(shù),是零,直接顯示0(2)是負(fù)數(shù),顯示“-”,求數(shù)據(jù)的絕對(duì)值(3)數(shù)據(jù)除以10,余數(shù)加30h轉(zhuǎn)換為ASCII碼壓入堆棧(4)重復(fù)步驟(3),直到商為0結(jié)束(5)依次彈出堆棧中的各位數(shù)字,顯示子程序入口參數(shù)為共享變量wtemp傳遞,主程序調(diào)3. 用子程序顯示10個(gè)數(shù)據(jù)。子程序?qū)?6位有符號(hào)二進(jìn)制數(shù)求和,然后除以數(shù)據(jù)個(gè)數(shù)得到平均值(1)為了避免溢出,被加數(shù)要進(jìn)行符號(hào)擴(kuò)展,得到倍長(zhǎng)數(shù)據(jù)(大小沒有變化),然后求和。因?yàn)椴捎?6位二進(jìn)制數(shù)表示數(shù)據(jù)個(gè)數(shù),最大是216,這樣擴(kuò)展到32位二進(jìn)制數(shù)表達(dá)累加和,不再會(huì)出現(xiàn)溢出(考慮極端情況:數(shù)據(jù)全是215,共有216個(gè),求和結(jié)果是231,32位數(shù)據(jù)仍然可以表達(dá))(2)子程序的入口參數(shù)利用堆棧傳遞,主程序需要壓入數(shù)據(jù)個(gè)數(shù)和數(shù)據(jù)緩沖區(qū)的偏移地址。子程序通過BP寄存器從堆棧段相應(yīng)位置取出參數(shù)(非棧頂數(shù)據(jù)),子程序的出口參數(shù)用寄存器AX傳遞。主程序提供10個(gè)數(shù)據(jù),并保存平均值。4. 子程序模塊(1)為了使子程序更加通用和得到復(fù)用,我們可以將子程序單獨(dú)編寫成一個(gè)源程序文件,經(jīng)過匯編之后形成目標(biāo)OBJ文件,這就是子程序模塊。這樣,某個(gè)程序使用到該子程序,只要在連接時(shí)輸入子程序文件名就可以了。實(shí)際上在進(jìn)行連接時(shí)的目標(biāo)模塊文件可以用匯編程序產(chǎn)生,也可以用其他編譯程序產(chǎn)生。(2)子程序庫(kù)當(dāng)子程序模塊很多時(shí),要記住各個(gè)模塊的文件名就是一件很麻煩的事情,有時(shí)還會(huì)把沒有用的子程序也連接到可執(zhí)行程序中,因而我們采用子程序庫(kù)文件,存放各個(gè)子程序的名稱、目標(biāo)代碼。以及有關(guān)定位信息。子程序文件編寫完成,匯編成為目標(biāo)模塊,然后利用庫(kù)管理工具LIB.EXE,把子程序模塊逐個(gè)加入到庫(kù)中,連接就可以使用了。使用子程序庫(kù)中的子程序,需要在連接過程中指明子程序庫(kù),或者主程序使用MASM通提供的子程序庫(kù)文件包含偽指令I(lǐng)NCLUDE指明,其格式為:INCLUDELIB庫(kù)文件名需要明確的是,利用INCLUDE偽命令包含其他文件,其本質(zhì)上還是一個(gè)源文件,只不過是分成了幾個(gè)文件來寫,而且被包含的文件不能獨(dú)立匯編,是依附主程序而存在的。庫(kù)管理工具程序LIB.EXE幫助創(chuàng)建、組織和維護(hù)子程序模塊庫(kù),例如增加、刪除、替換、合并庫(kù)文件等。子程序文件編寫完后,僅進(jìn)行匯編形成目標(biāo)文件;然后利用庫(kù)管理工具程序,把子程序目標(biāo)模塊注意加入到庫(kù)中。加入庫(kù)文件的常用命令為:LIB庫(kù)文件名+子程序目標(biāo)文件名使用庫(kù)文件中的子程序模塊的方法,是在連接程序提示庫(kù)文件名時(shí)(Libraries.lib:)輸入庫(kù)文件名。如果源程序文件中已經(jīng)使用庫(kù)文件包含偽指令I(lǐng)NCLUDELB進(jìn)行了申明,則不需要輸入庫(kù)文件名得到該程序的命令行使用的簡(jiǎn)要說明。宏匯編宏是具有宏名的一段匯編語言序列,宏需要先定義,然后在程序中進(jìn)行宏調(diào)用,由于是在匯編過程中實(shí)現(xiàn)的宏展開,所以常稱為宏匯編。首先進(jìn)行宏定義,之后進(jìn)行宏調(diào)用。在匯編時(shí),宏指令被匯編程序用對(duì)應(yīng)的代碼序列替代,稱之為宏展開。(1) 宏定義格式宏名MACRO形參表;宏定義體ENDM(2)宏調(diào)用宏定義之后就可以使用它,即宏調(diào)用。宏調(diào)用遵循先定義后調(diào)用的原則,格式為:宏名實(shí)參表在匯編時(shí),宏指令被匯編程序用對(duì)應(yīng)的代碼序列替代,稱之為宏展開。匯編后的列表文件中帶“+”(3)局部標(biāo)號(hào)格式當(dāng)宏定義體具有分支、循環(huán)等程序結(jié)構(gòu)時(shí),需要標(biāo)號(hào)。宏定義體中的標(biāo)號(hào)必須用LOCAL偽指令聲明為局部標(biāo)號(hào),否則多次使用宏調(diào)用將出現(xiàn)標(biāo)號(hào)的重復(fù)定義語法錯(cuò)誤。局部標(biāo)號(hào)偽指令LOCAL只能用于宏定義體內(nèi),而且是宏定義MACRO語句之后的第一條語句,而且兩者間也不允許有注釋和分號(hào),格式如下:LOCAL標(biāo)號(hào)列表5、 實(shí)驗(yàn)結(jié)果與數(shù)據(jù)處理6、 結(jié)論 采用寄存器傳遞參數(shù),帶有出口參數(shù)的寄存器不能被保護(hù)和恢復(fù),帶有入口參數(shù)的寄存器可以保護(hù)也可以不保護(hù)。利用共享變量傳遞參數(shù),子程序通用性差,特別適合多個(gè)程序段間,尤其在不同的程序模塊之間傳遞數(shù)據(jù)。堆棧傳遞參數(shù)采用先進(jìn)后出,返回地址和保護(hù)的寄存器,要時(shí)刻注意堆棧的分配。 剛開始做實(shí)驗(yàn)時(shí),只是按照書上的順序執(zhí)行,不怎么明白具體是怎么執(zhí)行的,隨著實(shí)驗(yàn)的深入,漸漸知道匯編語言的特點(diǎn)的,匯編語言是基于計(jì)算機(jī)硬件的操作,所以具有執(zhí)行速度快,語言簡(jiǎn)潔等優(yōu)點(diǎn)。也讓我明白匯編語言和高級(jí)語言的不同。通過這次的實(shí)驗(yàn),讓我對(duì)計(jì)算機(jī)的硬件工作系統(tǒng)有了更加細(xì)致的了解,也希望以后能在這方面加強(qiáng)自己,爭(zhēng)取能有一定的專業(yè)知識(shí)。7、 附錄(關(guān)鍵實(shí)驗(yàn)代碼等)DATASSEGMENTstringdbINPUT:,$;此處輸入數(shù)據(jù)段代碼wtempdw?wmeddw?count=10arraydwcountDUP(0)DATASENDSSTACKSSEGMENT;此處輸入堆棧段代碼STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSstart:MOVAX,DATASMOVDS,AXMOVCX,countMOVBX,OFFSETarrayagain:MOVAH,9MOVDX,OFFSETstringINT21HCALLreadMOVBX,AXINCBXINCBXCALLdpcrlfLOOPagainMOVAH,4CHINT21H;*有符號(hào)十進(jìn)制數(shù)輸入*readprocpushbxpushcxpushdxxorbx,bxxorcx,cx;正負(fù)標(biāo)志movah,1int21hcmpal,+jzread1cmpal,-jnzread2movcx,-1;是-,設(shè)置-1標(biāo)志read1:movah,1;繼續(xù)輸入字符int21hread2:cmpal,0jbread3cmpal,9jaread3subal,30h;imuldx,10;原數(shù)值乘以10shlbx,1movdx,bxshlbx,1shlbx,1;movzxax,aladdbx,dx;movah,0addbx,axjmpread1;已輸入數(shù)值乘10后,與新輸入的數(shù)值相加read3:;求補(bǔ)碼cmpcx,0jzread4negbxread4:movax,bxpopdxpopcxpopbxretreadendpdpcrlfprocpushaxpushdxmovah,2movdl,0dhint21hmovah,2movdl,0ahint21hpopdxpopaxretdpcrlfendp;*有符號(hào)十進(jìn)制數(shù)顯示*writeprocpushaxpushbxpushdxmovax,wtemptestax,ax;判斷數(shù)據(jù)是正數(shù)、負(fù)數(shù)還是0jnzwrite1movdl,0movah,2int21hjmpwrite5write1:jnswrite2;正數(shù),跳轉(zhuǎn)movbx,axmovdl,-movah,2int21hmovax,bxnegaxwrite2:movbx,10pushbxwrite3:cmpax,0jzwrite4subdx,dxdivcxadddl,30hpushdxjmpwrite3write4:popdxcmpdl,10jewrite5movah,2int21hjmpwrite4write5:popdxpopbxpopaxretwriteendp;*計(jì)算有符號(hào)數(shù)平均值*movax,countpushax;壓入數(shù)據(jù)個(gè)數(shù)movax,offsetarraypushax;壓入數(shù)據(jù)緩沖區(qū)的偏移地址callmean;調(diào)用子程序,求平均值addsp,4;平衡堆棧movwmed,ax;保存出口參數(shù)movax,4c00hint21hmeanprocpus

溫馨提示

  • 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. 人人文庫(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)論