《匯編語言與接口技術》實驗指導(2013)_第1頁
《匯編語言與接口技術》實驗指導(2013)_第2頁
《匯編語言與接口技術》實驗指導(2013)_第3頁
《匯編語言與接口技術》實驗指導(2013)_第4頁
《匯編語言與接口技術》實驗指導(2013)_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、匯編語言與接口技術實驗指導(2013) 匯編語言與接口技術 實驗指導 河南大學 2013.9 匯編語言實驗環(huán)境和要求 匯編語言是計算機及計算機類專業(yè)學生的專業(yè)基礎課,是培養(yǎng)學生直接使用計算機硬件資源能力的一門課程。它不僅能幫助學生進一步理解計算機組成原理課程中的各種概念,而且還為其他課程:操作系統、接口與通信技術和計算機控制技術等課程提供必要的預備知識。該課程在計算機學科設置中起著承上啟下的作用。 一、實驗環(huán)境 匯編實驗是在一般PC機上完成的,采用MASM6.11宏匯編進行實驗。MASM6.11版本對硬件環(huán)境無特殊要求,對軟件的要求如下: (1) 操作系統:Windows2000的命令提示符狀

2、態(tài)。 在Windows下進入DOS命令行的方法:“開始”?“運行”?鍵入“cmd”即可進入DOS命令行; (2) 編輯環(huán)境:EDIT.COM、記事本等文本編輯器(隨操作系統提供)。 (3) 匯編和連接程序文件: 匯編程序MASM.EXE 連接程序LINK.EXE 匯編連接程序ML.EXE 匯編鏈接錯誤提示ML.ERR (4) 調試程序:DEBUG.EXE(隨操作系統提供)。 二、PC機DEBUG調試工具的使用 DEBUG.EXE程序是專門為分析和開發(fā)匯編語言程序而設計的一種調試工具,具有跟蹤程序執(zhí)行、觀察中間運行結果、顯示和修改寄存器或存儲單元內容等多種功能。是學習匯編語言必須掌握的調試工具。

3、 1、DEBUG程序使用 在命令提示符下鍵入命令: DEBUG 盤符:路徑文件名.EXE參數1參數2 這時屏幕上出現DEBUG的提示符“-”,表示系統在DEBUG狀態(tài)下,此時可以用DEBUG命令進行程序調試。在DEBUG環(huán)境下,默認采用十六進制數制,所有數值不需要帶數制后綴。 若進入DEBUG的命令中將所有的參數都省略,則僅進入DEBUG環(huán)境,內存中不包含特定的程序和數據。此時,可寫入指令和數據進行驗證調試,也可以使用N或者L命令從指定盤上裝入要調試的程序。如果進入DEBUG的命令中包含文件名,則進入 DEBUG環(huán)境的同時,將指定程序調入內存,當前程序的代碼段作為默認的CS段,從0單元保存。

4、2、DEBUG的常用命令 DEBUG命令都是單字母命令,按照不同命令的格式其后可加上一個或多個參數,若包含多個命令參數,其間用空格作為分隔符。DEBUG命令不區(qū)分大小寫。 (1)匯編命令 A 格式:A起始地址 功能:以匯編指令的形式輸入代碼,系統自動將匯編指令翻譯成機器指令代碼,并從默認或指定地址單元開始存放。 若缺省起始地址,則從當前CS:100地址開始存放。A命令按行匯編,主要是用于小段程序的匯編或對目標程序的修改。 舉例: ? 命令:A 含義:從默認地址輸入匯編指令; ? 命令:A 1000:20 含義:從地址為1000H:20H的單元輸入匯編指令; ? 命令:A CS:1000 含義:

5、從CS段的1000H單元輸入匯編指令; (2)反匯編命令 U 格式1:U起始地址 格式2:U起始地址結束地址|字節(jié)數 功能: 格式1從指定起始地址處開始將32個字節(jié)的目標代碼(非32條指令)轉換成匯編指令形式,如果省略起始地址,則從當前CS:IP指向地址開始反匯編、或接著上次U命令繼續(xù)反匯編。 格式2將指定范圍的內存單元中的目標代碼轉換成匯編指令。注意,這里的反匯編是以指令為單位進行顯示。 界面說明: ? 界面左邊:以邏輯地址形式顯示每條匯編指令所在存儲單元的首單元地址; ? 界面中間:每條匯編指令對應的機器指令代碼; ? 界面右邊:處理了符號之后的匯編指令; 舉例: ? 命令:U 含義:查看

6、默認地址的匯編指令,默認條數; ? 命令:U 0 含義:從0地址查看匯編指令,默認CS段; ? 命令:U 0 50 含義:查看地址0到50H的匯編指令,默認CS段; 地址范圍要確認該范圍中所有指令都是完整的。 ? 命令:U DS:0 含義:將DS:0地址中的內容當作指令,查看默認條數; (3)顯示、修改寄存器命令 R 格式:R寄存器名 功能:如果給出寄存器名,則顯示該寄存器的內容并可進行修改。如果不指定寄存器名,則顯示所有寄存器的內容及當前值(不能修改)。 R命令只能顯示、修改16位寄存器,對于標志寄存器只能通過執(zhí)行指令的方式修改。 界面說明: ? 界面中間兩行:顯示各寄存器內容;先顯示13個

7、寄存器的值;后面的8個符號分別表示OF、DF、IF、SF、ZF、AF、PF、CF標志位的狀態(tài),符號含義如下表: 的操作數,則指令后顯示該操作數的地址和數值; 舉例: ? 命令:R 含義:查看所有寄存器內容; ? 命令:R ax 含義:查看寄存器AX中的內容,并可修改; (4)顯示存儲單元命令 D 格式1:D起始地址 格式2:D起始地址結束地址|L字節(jié)數 功能:格式1從起始地址開始按十六進制顯示128個單元的內容,每行16個單元,共8行。格式2顯示指定范圍內存儲單元的內容,其他顯示方式與格式1一樣。如果省略起始地址或地址范圍,則從當前的地址開始按格式1顯示。 界面說明: ? 界面左邊:以邏輯地址

8、形式顯示指定的或默認的存儲單元地址; ? 界面中間:存儲單元中的實際存放內容,每一行顯示16個單元,每個單元 存放一個字節(jié)數據; ? 界面右邊:存儲單元中值的對應的ASCII碼字符;若存儲單元中存放的是不 可顯示的ASCII碼值,則顯示“.”; 例如: -D 200 ;表示從DS:0200H開始顯示128個單元內容 -D 100 120 ;表示顯示DS:0100-DS:0120單元的內容 說明:在DEBUG中,地址表示方式有如下形式: 段寄存器名:相對地址,如:DS:100 段基值:偏移地址(相對地址),如:23A0:1500 舉例: ? 命令:D 含義:默認查看; ? 命令:D 1000:0

9、 含義:從指定單元查看數據,默認長度; ? 命令:D DS:0 含義:從指定單元查看DS段中的數據,默認長度; ? 命令:D 0 5 含義:查看DS段中05單元中的6個數據; ? 命令:D 10 L 5 含義:查看DS段中從10H開始的連續(xù)5個單元內容; (5)修改存儲單元命令 E 格式1:E起始地址 內容表 格式2:E地址 功能: 格式1按內容表的內容修改從起始地址開始的多個存儲單元內容,即用內容表指定的內容來代替存儲單元當前內容。 例如: E DS:0100 VAR12 34 表示從DS:0100 為起始單元的連續(xù)五個字節(jié)單元內容依次被修改為 V、A、R、12H、34H。 格式2是逐個修改

10、指定地址單元的當前內容。 如:E DS:0010 156F:0010 41.5F 其中156F:0010單元原來的值是41H,5FH為輸入的修改值。若只修改一個單元的內容,這時按回車鍵即可;若還想繼續(xù)修改下一個單元內容,此時應按空格鍵,就 顯示下一個單元的內容,需修改就鍵入新的內容,不修改再按空格跳過,如此重復直到修改完畢,按回車鍵返回DEBUG“-”提示符。如果在修改過程中,將空格鍵換成按“-”鍵,則表示可以修改前一個單元的內容。 舉例: ? 命令:E 100 含義:查看DS段中100H單元起始的存儲單元內容,并可隨時修改; ? 命令:E ES:10 1 31 20 含義:將ES段中地址為1

11、0H12H的3個單元中的值修改為1、31H、20H; ? 命令:E 10 ABCD 含義:將DS段中地址10H13H的連續(xù)4個單元內容修改為41H44H; (6)運行命令 G 格式:G=起始地址斷點地址 功能:CPU從指定起始地址開始執(zhí)行,在斷點地址處停止,即斷點地址中的指令不執(zhí)行。若省略起始地址,則從當前CS:IP指示地址開始執(zhí)行一條指令。 注意,斷點地址必須是某一條指令的起始地址,否則查看到的程序有可能會出錯。 舉例: ? 命令:G ? 命令:G=0 ? 命令:G 14 ? 命令:G=3 20 含義:從當前位置連續(xù)執(zhí)行程序,到結束; 含義:從0地址連續(xù)執(zhí)行程序,到結束; 含義:從當前位置執(zhí)

12、行程序到14H,中斷; 含義:從地址3執(zhí)行程序到地址20H,中斷; (7)跟蹤命令 T 格式:T=起始地址指令條數 功能:從指定地址開始執(zhí)行指定條數的指令,若省略指令條數,則默認執(zhí)行一條指令,若省略起始地址,則從當前CS:IP指示地址開始執(zhí)行。 舉例: ? 命令:T 含義:從當前位置單步執(zhí)行1條指令; ? 命令:T 3 含義:從當前位置單步執(zhí)行3條指令; ? 命令:T=0 含義:從0地址單步執(zhí)行1條指令; ? 命令:T=4 2 含義:從4地址單步執(zhí)行2條指令; (8)退出命令 Q 格式:Q 功能:退出DEBUG,返回到操作系統。 三、PC機匯編語言程序設計實驗步驟 編輯源程序文件 使用EDIT

13、文本編輯器編輯源文件,鍵入 EDIT <源文件名.ASM> 或 EDIT 但使用后者時應注意將文件保存為.ASM文件。 匯編連接源程序文件 ML <源文件名.ASM> 如果源程序沒有錯誤,則自動生成.OBJ文件和.EXE可執(zhí)行文件。 若源程序有語法錯誤時,會出現錯誤信息提示,需回到編輯狀態(tài)下修改源程序后重新匯編。 運行程序 經過匯編、連接后生成的.EXE文件,可直接運行,只要鍵入相應的文件名即可。 調試程序: 使用DEBUG調試前面生成的可執(zhí)行的.EXE文件。各種DEBUG命令如前所述。 四、實驗報告書寫要求 使用專用的實驗報告紙,每個實驗一份,字跡工整,內容清晰,注意

14、填寫必要的信息(如:姓名、學號、班級、輔導教師、同實驗者); 填寫實驗題目、實驗目的等;實驗步驟中要求列出當次實驗的過程及各種數據輸入輸出的情況;匯編語言程序設計部分還要寫出完整的源程序,以及上機調試過程中遇到的問題和解決方法。 預備實驗一 DEBUG命令練習 實驗目的 1、熟悉匯編語言程序的編寫、匯編、運行的一般過程; 2、掌握常用的DEBUG命令,并可應用于匯編語言程序調試過程中。 實驗內容 1、使用給定程序練習匯編語言程序的編輯、匯編、執(zhí)行、調試的過程; 2、在DEBUG狀態(tài)下,練習常用的DEBUG命令調試給定程序。 實驗學時 本實驗內容共用4學時,分兩次實驗完成。 實驗步驟 1、 匯編

15、語言程序的編輯、匯編、執(zhí)行練習 (1)建立匯編語言程序源文件 使用DOS或Windows下的任何文本編輯器來建立匯編語言程序源文件,建議使用記事本,文件后綴名應保存為“.asm”(請注意不要隱藏已知后綴名)。 將如下程序代碼保存為“test.asm”的源文件。 程序功能: 在屏幕上顯示CHAR變量所定義的字符。 程序代碼: DATA SEGMENT CHAR DB F DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX , DATA MOV DS , AX MOV DL , CHAR MOV AH , 2 INT 21H MO

16、V AX , 4C00H INT 21H CODE ENDS END START (2)匯編源程序,生成可執(zhí)行文件 在保證工作目錄下存在ml.exe文件和link.exe文件時,可直接對匯編語言源程序進行匯編連接,使用的命令如下(以test.asm文件名為例): ml test.asm 若源程序無語法和邏輯錯誤,即可匯編連接成功,同時生成目標文件test.obj和可執(zhí)行文件test.exe。當源程序中存在語法錯誤時,匯編連接不會進行。若工作目錄下存在ml.err文件,則會顯示包含錯誤存在行的提示信息,程序員可以依次來判斷錯誤所在。 圖1 test.asm文件的匯編過程 注意:該命令中源文件的后

17、綴名一定不可省去,否則會提示無法找到源文件。 本程序中常出現的錯誤: 第2行出錯:源程序第2行中的“CHAR DB F”單引號改為英文狀態(tài),如圖2中的第一行錯誤“invalid character in file”;該錯誤會導致第三行的錯誤“undefined symbol”,即CHAR定義語句寫錯,導致程序中使用CHAR變量時無法找到。 第11行出錯:源程序第11行中的“MOV AX , 4C00H”,將數字“00”寫成了 字母“oo”;該錯誤會導致如圖2中的第二行錯誤“nondigit in number”,即該使用數值中沒有找到數字。 找不到源文件:源文件不在當前操作的目錄下;或者文件名

18、用錯了。 圖2 錯誤信息 (3)執(zhí)行程序,查看結果 在DOS命令行下,運行生成的可執(zhí)行文件,命令為: test.exe 該命令中,文件的后綴名可省去。 若程序有輸入輸出內容,則會在DOS命令行下看到結果。若程序沒有輸入輸出內容,則只能進入DEBUG狀態(tài)下查看程序的運行結果。 2、DEBUG命令練習 將上面生成的可執(zhí)行文件test.exe文件調入DEBUG進行調試,使用的命令是: debug test.exe 注意,這里調入的是可執(zhí)行文件,后綴名必須加。 進入DEBUG下,命令提示符是“-”,可以使用各種DEBUG命令調試。這里建議使用以下命令查看,注意以下命令是進入DEBUG后連續(xù)執(zhí)行的結果,

19、單獨使用可能無法得到預期效果。 (1)反匯編命令U 當調入程序文件后,直接使用無參數的U命令可從第一條指令開始查看當前的程序代碼。屏幕顯示的內容是:默認從第一行代碼開始顯示,共反匯編32個單元的指令(指令條數依據指令長度而不同,以整條指令為單位)。 請注意查看DEBUG狀態(tài)下的指令與源文件中的指令有何不同。 (2)寄存器查看命令R 直接使用無參的R命令可查看當前各寄存器狀態(tài),由于程序還未執(zhí)行,可以看到寄存器的狀態(tài)為初始的隨機值。 請注意當前CS:IP寄存器的內容與上一步U命令看到的指令地址是一致的,但DS、ES等段寄存器則為初始的隨機值。 (3)查看存儲單元命令D 直接使用無參數的D命令,顯示

20、存儲單元內容。 應注意區(qū)分的是:當前查看到的是從DS:0地址開始的連續(xù)128個單位的數據,并不是當前程序的數據段數據。 (4)單步執(zhí)行命令T 從程序開始單步執(zhí)行程序的前兩條指令,使用的命令格式為: T 2 執(zhí)行完前兩條指令即返回,顯示當前的寄存器狀態(tài),請注意查看當前的CS、IP寄存器狀態(tài)與執(zhí)行指令前的差別,請試著解釋這兩個寄存器的含義。 注意:INT指令不可單步執(zhí)行,需使用G命令連續(xù)執(zhí)行。 (5)查看存儲單元命令D 使用帶參數的D命令,顯示從有效地址為0的存儲單元開始的連續(xù)128個單元中的數據。在此查看存儲單元地址、單元內容、以及對應的字符顯示。命令為: D 0 請注意該D命令顯示的內容與上一

21、個D命令顯示的單元地址是否相同,為什么? (6)反匯編命令U 直接使用反匯編命令U,會接著上次T命令執(zhí)行的位置05處開始反匯編顯示指令。 (7)斷點/連續(xù)執(zhí)行命令G 使用斷點執(zhí)行的功能,從當前位置執(zhí)行到顯示指令結束,命令為: G 0D 程序執(zhí)行,可在屏幕上看到“F”字符的顯示。 注意,該命令中的“0D”是斷點地址,即指令“MOV AX , 4C00H”的保存位置,該命令會將該位置之前的所有指令執(zhí)行完畢。斷點地址必須是U命令可見的地址。 (8)修改存儲單元內容命令E 使用E命令將CHAR變量中的字符修改為“M”,命令為: E 0 M 或者使用命令 E 0 在提示下輸入M的ASCII碼4DH。 (9)查看存儲單元內容命令D 使用D命令查看所修改的內容,命令為: D 0 L1 (10)連續(xù)執(zhí)行命令G 從第一條指令開始重新執(zhí)行程序,使用G命令: G=0 10 指定程序執(zhí)行的區(qū)間,在屏幕上可以看到“M”字符的顯示。 (11)匯編命令A 在DEBUG下修改匯編語言程序,使用A命令: A 5 在給定的單元中輸入指令“MOV DL , 39”,兩次回車,返回到DEBUG提示符下。 (12)連續(xù)執(zhí)行命令G 重新執(zhí)行程序,使用G命令: G=0 指定程序執(zhí)行的區(qū)間,在屏幕上可以看到“9” 字符的顯示

溫馨提示

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

評論

0/150

提交評論