微機原理實驗報告期中 華北電力大學保定_第1頁
微機原理實驗報告期中 華北電力大學保定_第2頁
微機原理實驗報告期中 華北電力大學保定_第3頁
微機原理實驗報告期中 華北電力大學保定_第4頁
微機原理實驗報告期中 華北電力大學保定_第5頁
已閱讀5頁,還剩4頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論