匯編程序調試實驗報告_第1頁
匯編程序調試實驗報告_第2頁
匯編程序調試實驗報告_第3頁
匯編程序調試實驗報告_第4頁
匯編程序調試實驗報告_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、微機原理與接口技術課程作業班級:目錄一、實驗目的:2二、實驗環境2三、實驗過程2(一)基礎知識儲備2(二)匯編語言程序設計2(三)匯編程序調試2四、調試實例3(一)實例一3(二)實例二4(三)實例三5(四)實例四6五、實驗總結7(一)實驗收獲8(二)實驗感悟8一、實驗目的:匯編語言是一種用助記符表示的程序設計語言。用匯編語言編寫的源程序生成的目標代碼短,占內存少,執行速度快,適合于系統軟件、實時控制軟件、I/O接口驅動等程序設計。通過本次實驗,熟練掌握匯編程序的調試,深入了解MASM匯編語言及其程序設計方法。二、實驗環境EDIT編輯器、MASM匯編程序、LINK連接程序、TD調試程序三、實驗過

2、程(一)基礎知識儲備1.了解微處理器80486的內部結構、寄存器組、工作模式等基本知識。2.熟練掌握微處理器指令系統的相關知識,重點掌握80486的尋址方式和常用的指令格式及功能。3.了解MASM匯編語言及其程序設計方法。掌握MASM匯編語言的語句格式、語法規則、常用偽指令及DOS功能的調用等。了解順序結構、分支結構、循環結構和子程序的設計方法。(二)匯編語言程序設計1.分析問題,明確要解決的問題和要求。2.確定解決問題的思路和方法。3.將解決問題的方案編制成程序流程圖。4.根據流程圖,逐條編寫程序。5.上機調試,驗證程序是否正確。(三)匯編程序調試MASM匯編程序的主要功能是:把源文件轉換成

3、用二進制代碼表示的目標文件,并生成列表文件;在轉換過程中匯編程序將對源程序進行掃描,檢查源程序是否有語法錯誤并指出源程序的語法錯誤。匯編語言源程序的調試過程需要經過編輯、匯編、連接、運行、調試等幾個步驟:1.編輯:使用編輯程序,將編寫好的程序輸入計算機,建立一個擴展名為ASM的匯編語言源文件*.ASM。2.匯編:使用匯編程序,將*.ASM文件經匯編后生成擴展名為*.OBJ。3.連接:使用連接程序,把一個或多個目標程序連接成可執行文件*.EXE。4.運行:運行可執行文件,驗證程序是否正確。5.調試:如果運行中有問題,可使用編輯或調試程序進行修改和調試,重復上述步驟,直到運行正確為止。四、調試實例

4、(一)實例一要求:編寫程序,將MBUF為起始單元的5個數按相反次序傳送到NBUF開始的存儲單元中。實驗思路:本例采用順序結構和循環結構,合理利用堆棧,通過堆棧實現數據按照相反次序傳送。源程序:DATA SEGMENT ;數據段開始 MBUF DB 0,1,2,3,4 ;每個數據分配一個存儲單元 NBUF DB 5 DUP(0) ;空5個存儲單元備用DATA ENDS ;數據段結束STACK SEGMENT PARA STACK ;堆棧段開始,定位類型是PARA DB 100 DUP(0)STACK ENDSCODE SEGMENT ;代碼段開始ASSUME CS:CODE, DS:DATA,S

5、S:STACK ;段分配偽指令START: MOV AX,DATA ;數據傳送 MOV DS,AX ;存儲器數據傳送到段寄存器中 MOV SI,OFFSET MBUF ;取第一組操作數的偏移地址 MOV DI,OFFSET NBUF ;取第二組操作數的偏移地址 MOV CX,5 ;數據個數5傳送到CX中LOP1: MOV AX,SI ;數據傳送 PUSH AX ;數據入棧 INC SI ;指針加1 LOOP LOP1 ;循環LOP2: POP AX ;數據出棧 MOV DI,AX ;數據傳送 INC DI LOOP LOP2 MOV AH,4CH ;終止進程 INT 21HCODE ENDS

6、END START(二)實例二要求:編寫程序,將內存中某數據塊中的正數和負數分開,并分別將這些正數和負數送同一數據段的兩個緩沖區中,并在屏幕上顯示正數和負數的個數。實驗思路:本例中要求將正數和負數分開,因此應先判斷數據塊中數據的正負,然后將不同符號的數分別傳送到兩個緩沖區中,同時分別計數。利用分支結構和循環結構解決問題。源程序:DATA SEGMENT ;數據段 BUF DB 5,2,7,-4,-2,-3,4,9,-6 COUNT EQU $-BUF ;等值語句,COUNT等于BUF數據長度 ZS DB ? FS DB ? STR1 EQU BUF+20 ;正數首地址 STR2 EQU BUF

7、+30 ;負數首地址DATA ENDSSTACK SEGMENT STACK ;堆棧段 DB 100 DUP(0)STACK ENDSCODE SEGMENT ;代碼段 ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX ;初始化 MOV BX,OFFSET BUF ;取BUF中操作數的偏移地址 MOV CX,COUNT MOV ZS,0 MOV FS,0 MOV SI,OFFSET STR1 MOV DI,OFFSET STR2LOP:MOV AL,BX CMP AL,0 ;帶符號數比較 JG LOP1 ;數據大于0時跳轉至

8、LOP1 JL LOP2 ;數據小于0時跳轉至LOP2LOP1:INC ZS ;正數計數加1 MOV SI,AL ;正數數據存入SI寄存器中 INC BX INC SI LOOP LOP JMP LASTLOP2:INC FS MOV DI,AL ;負數數據存入DI中 INC BX INC DI LOOP LOPLAST:MOV DL,ZS MOV AH,06H ;顯示字符 INT 21H MOV DL,FS MOV AH,06H INT 21H MOV AH,4CH INT 21HCODE ENDS END START(三)實例三要求:編寫程序,從內存BLOCK開始,存放著10個字節的有符號

9、數,從這些數中找出絕對值最大的那個最大的數,將其存入MAX中。源程序:DATA SEGMENT BLOCK DB 1,-1,2,-3,4,5,3,-1,2 ;設置數據 COUNT EQU $-BLOCK ;置計數值 MAX DB ? ;存最大值DATA ENDSSTACK SEGMENT STACK DB 100 DUP(0)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV SI,OFFSET BLOCK ;數據首地址 MOV MAX,0 MOV CX,COUNT ;CX

10、為計數器AGAIN: MOV AL,SI ;將第一個數據存在AL中 CMP AL,0 ;判斷正負 JS JDZ ;小于0轉到JDZLOP: CMP AL,MAX ;比較數據與最大值 JG BIG ;AL大轉到BIG JMP LOP1JDZ: NEG AL ;求補,即絕對值 JMP LOP1 ;跳轉至LOP1BIG: MOV MAX,AL JMP LOP1LOP1: INC SI ;指針加1,指向下一個數 DEC CX ;計數值減1 MOV AH,MAX ;最大值存入AH JNZ AGAIN ;跳轉至AGAIN MOV AH,4CH INT 21HCODE ENDS END START(四)實例

11、四要求:編寫程序,將內存中N個無符號數從大到小排序后輸出顯示。源程序:DATA SEGMENT BUF DB 1H,9H,6H,15H,10H COUNT EQU $-BUFDATA ENDSSTACK SEGMENT STACK DB 100H DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX ;初始化 MOV CX,COUNT ;置計數器 DEC CX ;外層循環減1LOP1: MOV SI,CX MOV DI,1 ;交換標志DI=1 MOV BX,OFFSET

12、BUF ;取數組中第一個偏移地址LOP2: MOV AL,BX ;第一個數據送到AL中 CMP AL,BX+1 ;兩數進行比較 JAE LOP3 ;大于等于轉到LOP3 XCHG AL,BX+1 ;小于交換兩數位置,AL存大數 MOV BX,AL MOV DI,0 ;交換標志DI=0LOP3: INC BX ;數據指針指向下一位 LOOP LOP2 ;循環LOP2 CMP DI,0 ;交換標志為0繼續,交換標志為1結束 JNZ OK ;不等于0轉到OK,結束 MOV CX,SI LOOP LOP1 ;等于0循環LOP1OK: MOV CX,COUNT MOV BX,OFFSET BUF ;BX

13、為BUF首地址的偏移地址LOP4: MOV DL,BX ;BX中的數放在DL中 MOV AH,06H ;輸出顯示 INT 21H INC BX ;指針指向下一字符 LOOP LOP4 ;循環LOP4 MOV AH,4CH ;結束進程 INT 21H ;返回DOSCODE ENDS END START五、實驗總結本次實驗,雖然花費時間較長,但通過實驗的完成,我的收獲也很多。(一)實驗收獲無論是知識方面還是能力方面,本次實驗都讓我得到了很大提升。知識方面,本次實驗需要編寫符合要求的程序。首先要進行程序的設計,明確實驗目的和設計思路,畫出程序框圖,然后進行程序的編寫。通過程序的設計與編寫,使我能夠更加深入的了解和掌握80486了指令系統。程序編寫完成后,便需要進行調試,最初編寫的程序中出現了很多錯誤,在編譯過程中發現錯誤后,不斷進行修正,直到程序正確,可以實現所需功能。在這一過程中,我逐漸熟悉了匯編程序編輯、編譯、連接、調試的過程,并能通過這些軟件的功能找到自己的錯誤加以改正,最終實現實驗目的。能力方面,由于系統原因,不能直接在電腦當前系統中進行匯編程序的調試,因此我安裝了虛擬機,在虛擬機安裝過程中遇到很多問題,通過對搜索引擎的有效利用,我解決了安裝過程中的問題并成功安裝了XP系統,建立了實驗所需環境,為實驗的完成打下基礎。本次

溫馨提示

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

評論

0/150

提交評論