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

下載本文檔

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

文檔簡介

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

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

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

4、,按照不同命令的格式其后可加上一個或多個參數(shù),若包含多個命令參數(shù),其間用空格作為分隔符。DEBUG命令不區(qū)分大小寫。(1)匯編命令 A格式:A起始地址功能:以匯編指令的形式輸入代碼,系統(tǒng)自動將匯編指令翻譯成機(jī)器指令代碼,并從默認(rèn)或指定地址單元開始存放。若缺省起始地址,則從當(dāng)前CS:100地址開始存放。A命令按行匯編,主要是用于小段程序的匯編或?qū)δ繕?biāo)程序的修改。舉例:Ø 命令:A含義:從默認(rèn)地址輸入?yún)R編指令;Ø 命令:A 1000:20含義:從地址為1000H:20H的單元輸入?yún)R編指令;Ø 命令:A CS:1000含義:從CS段的1000H單元輸入?yún)R編指令;(2)反

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

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

7、面的8個符號分別表示OF、DF、IF、SF、ZF、AF、PF、CF標(biāo)志位的狀態(tài),符號含義如下表:標(biāo)志位OFDFIFSFZFAFPFCF置位符號(1)OVDNEINGZRACPECY復(fù)位符號(0)NVUPDIPLNZNAPONCØ 界面最后一行:顯示下一條將要執(zhí)行的指令;若指令中有存儲單元尋址方式的操作數(shù),則指令后顯示該操作數(shù)的地址和數(shù)值;舉例:Ø 命令:R含義:查看所有寄存器內(nèi)容;Ø 命令:R ax含義:查看寄存器AX中的內(nèi)容,并可修改;(4)顯示存儲單元命令 D格式1:D起始地址格式2:D起始地址結(jié)束地址|L字節(jié)數(shù)功能:格式1從起始地址開始按十六進(jìn)制顯示128個

8、單元的內(nèi)容,每行16個單元,共8行。格式2顯示指定范圍內(nèi)存儲單元的內(nèi)容,其他顯示方式與格式1一樣。如果省略起始地址或地址范圍,則從當(dāng)前的地址開始按格式1顯示。界面說明:Ø 界面左邊:以邏輯地址形式顯示指定的或默認(rèn)的存儲單元地址;Ø 界面中間:存儲單元中的實際存放內(nèi)容,每一行顯示16個單元,每個單元存放一個字節(jié)數(shù)據(jù);Ø 界面右邊:存儲單元中值的對應(yīng)的ASCII碼字符;若存儲單元中存放的是不可顯示的ASCII碼值,則顯示“.”;例如: -D 200 ;表示從DS:0200H開始顯示128個單元內(nèi)容-D 100 120 ;表示顯示DS:0100-DS:0120單元的內(nèi)容

9、說明:在DEBUG中,地址表示方式有如下形式:段寄存器名:相對地址,如:DS:100段基值:偏移地址(相對地址),如:23A0:1500舉例:Ø 命令:D含義:默認(rèn)查看;Ø 命令:D 1000:0含義:從指定單元查看數(shù)據(jù),默認(rèn)長度;Ø 命令:D DS:0含義:從指定單元查看DS段中的數(shù)據(jù),默認(rèn)長度;Ø 命令:D 0 5含義:查看DS段中05單元中的6個數(shù)據(jù);Ø 命令:D 10 L 5含義:查看DS段中從10H開始的連續(xù)5個單元內(nèi)容;(5)修改存儲單元命令 E格式1:E起始地址 內(nèi)容表格式2:E地址功能: 格式1按內(nèi)容表的內(nèi)容修改從起始地址開始的

10、多個存儲單元內(nèi)容,即用內(nèi)容表指定的內(nèi)容來代替存儲單元當(dāng)前內(nèi)容。例如:E DS:0100 'VAR'12 34表示從DS:0100 為起始單元的連續(xù)五個字節(jié)單元內(nèi)容依次被修改為'V'、'A'、'R'、12H、34H。格式2是逐個修改指定地址單元的當(dāng)前內(nèi)容。如:E DS:0010156F:0010 41.5F其中156F:0010單元原來的值是41H,5FH為輸入的修改值。若只修改一個單元的內(nèi)容,這時按回車鍵即可;若還想繼續(xù)修改下一個單元內(nèi)容,此時應(yīng)按空格鍵,就顯示下一個單元的內(nèi)容,需修改就鍵入新的內(nèi)容,不修改再按空格跳過,如此重復(fù)直

11、到修改完畢,按回車鍵返回DEBUG“-”提示符。如果在修改過程中,將空格鍵換成按“-”鍵,則表示可以修改前一個單元的內(nèi)容。舉例:Ø 命令:E 100含義:查看DS段中100H單元起始的存儲單元內(nèi)容,并可隨時修改;Ø 命令:E ES:10 1 31 20含義:將ES段中地址為10H12H的3個單元中的值修改為1、31H、20H;Ø 命令:E 10 ABCD含義:將DS段中地址10H13H的連續(xù)4個單元內(nèi)容修改為41H44H;(6)運行命令 G格式:G=起始地址斷點地址功能:CPU從指定起始地址開始執(zhí)行,在斷點地址處停止,即斷點地址中的指令不執(zhí)行。若省略起始地址,則從

12、當(dāng)前CS:IP指示地址開始執(zhí)行一條指令。注意,斷點地址必須是某一條指令的起始地址,否則查看到的程序有可能會出錯。舉例:Ø 命令:G含義:從當(dāng)前位置連續(xù)執(zhí)行程序,到結(jié)束;Ø 命令:G=0含義:從0地址連續(xù)執(zhí)行程序,到結(jié)束;Ø 命令:G 14含義:從當(dāng)前位置執(zhí)行程序到14H,中斷;Ø 命令:G=3 20含義:從地址3執(zhí)行程序到地址20H,中斷;(7)跟蹤命令 T格式:T=起始地址指令條數(shù)功能:從指定地址開始執(zhí)行指定條數(shù)的指令,若省略指令條數(shù),則默認(rèn)執(zhí)行一條指令,若省略起始地址,則從當(dāng)前CS:IP指示地址開始執(zhí)行。舉例:Ø 命令:T含義:從當(dāng)前位置單

13、步執(zhí)行1條指令;Ø 命令:T 3含義:從當(dāng)前位置單步執(zhí)行3條指令;Ø 命令:T=0含義:從0地址單步執(zhí)行1條指令;Ø 命令:T=4 2含義:從4地址單步執(zhí)行2條指令;(8)退出命令 Q格式:Q功能:退出DEBUG,返回到操作系統(tǒng)。三、PC機(jī)匯編語言程序設(shè)計實驗步驟 編輯源程序文件使用EDIT文本編輯器編輯源文件,鍵入EDIT <源文件名.ASM>或 EDIT但使用后者時應(yīng)注意將文件保存為.ASM文件。 匯編連接源程序文件ML <源文件名.ASM>如果源程序沒有錯誤,則自動生成.OBJ文件和.EXE可執(zhí)行文件。若源程序有語法錯誤時,會出現(xiàn)錯誤

14、信息提示,需回到編輯狀態(tài)下修改源程序后重新匯編。運行程序 經(jīng)過匯編、連接后生成的.EXE文件,可直接運行,只要鍵入相應(yīng)的文件名即可。調(diào)試程序:使用DEBUG調(diào)試前面生成的可執(zhí)行的.EXE文件。各種DEBUG命令如前所述。四、實驗報告書寫要求 使用專用的實驗報告紙,每個實驗一份,字跡工整,內(nèi)容清晰,注意填寫必要的信息(如:姓名、學(xué)號、班級、輔導(dǎo)教師、同實驗者); 填寫實驗題目、實驗?zāi)康牡?;實驗步驟中要求列出當(dāng)次實驗的過程及各種數(shù)據(jù)輸入輸出的情況;匯編語言程序設(shè)計部分還要寫出完整的源程序,以及上機(jī)調(diào)試過程中遇到的問題和解決方法。預(yù)備實驗一 DEBUG命令練習(xí)實驗?zāi)康?、熟悉匯編語言程序的編寫、匯編

15、、運行的一般過程;2、掌握常用的DEBUG命令,并可應(yīng)用于匯編語言程序調(diào)試過程中。實驗內(nèi)容1、使用給定程序練習(xí)匯編語言程序的編輯、匯編、執(zhí)行、調(diào)試的過程;2、在DEBUG狀態(tài)下,練習(xí)常用的DEBUG命令調(diào)試給定程序。實驗學(xué)時本實驗內(nèi)容共用4學(xué)時,分兩次實驗完成。實驗步驟1、匯編語言程序的編輯、匯編、執(zhí)行練習(xí)(1)建立匯編語言程序源文件使用DOS或Windows下的任何文本編輯器來建立匯編語言程序源文件,建議使用記事本,文件后綴名應(yīng)保存為“.asm”(請注意不要隱藏已知后綴名)。將如下程序代碼保存為“test.asm”的源文件。程序功能:在屏幕上顯示CHAR變量所定義的字符。程序代碼:DATA

16、SEGMENT CHAR DB FDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX , DATA MOV DS , AX MOV DL , CHAR MOV AH , 2 INT 21H MOV AX , 4C00H INT 21HCODE ENDSEND START(2)匯編源程序,生成可執(zhí)行文件在保證工作目錄下存在ml.exe文件和link.exe文件時,可直接對匯編語言源程序進(jìn)行匯編連接,使用的命令如下(以test.asm文件名為例):ml test.asm若源程序無語法和邏輯錯誤,即可匯編連接成功,同時生成目標(biāo)文件tes

17、t.obj和可執(zhí)行文件test.exe。當(dāng)源程序中存在語法錯誤時,匯編連接不會進(jìn)行。若工作目錄下存在ml.err文件,則會顯示包含錯誤存在行的提示信息,程序員可以依次來判斷錯誤所在。圖1 test.asm文件的匯編過程注意:該命令中源文件的后綴名一定不可省去,否則會提示無法找到源文件。本程序中常出現(xiàn)的錯誤: 第2行出錯:源程序第2行中的“CHAR DB F”單引號改為英文狀態(tài),如圖2中的第一行錯誤“invalid character in file”;該錯誤會導(dǎo)致第三行的錯誤“undefined symbol”,即CHAR定義語句寫錯,導(dǎo)致程序中使用CHAR變量時無法找到。 第11行出錯:源程

18、序第11行中的“MOV AX , 4C00H”,將數(shù)字“00”寫成了字母“oo”;該錯誤會導(dǎo)致如圖2中的第二行錯誤“nondigit in number”,即該使用數(shù)值中沒有找到數(shù)字。 找不到源文件:源文件不在當(dāng)前操作的目錄下;或者文件名用錯了。圖2 錯誤信息(3)執(zhí)行程序,查看結(jié)果在DOS命令行下,運行生成的可執(zhí)行文件,命令為:test.exe該命令中,文件的后綴名可省去。若程序有輸入輸出內(nèi)容,則會在DOS命令行下看到結(jié)果。若程序沒有輸入輸出內(nèi)容,則只能進(jìn)入DEBUG狀態(tài)下查看程序的運行結(jié)果。2、DEBUG命令練習(xí)將上面生成的可執(zhí)行文件test.exe文件調(diào)入DEBUG進(jìn)行調(diào)試,使用的命令是

19、:debug test.exe注意,這里調(diào)入的是可執(zhí)行文件,后綴名必須加。進(jìn)入DEBUG下,命令提示符是“-”,可以使用各種DEBUG命令調(diào)試。這里建議使用以下命令查看,注意以下命令是進(jìn)入DEBUG后連續(xù)執(zhí)行的結(jié)果,單獨使用可能無法得到預(yù)期效果。(1)反匯編命令U當(dāng)調(diào)入程序文件后,直接使用無參數(shù)的U命令可從第一條指令開始查看當(dāng)前的程序代碼。屏幕顯示的內(nèi)容是:默認(rèn)從第一行代碼開始顯示,共反匯編32個單元的指令(指令條數(shù)依據(jù)指令長度而不同,以整條指令為單位)。請注意查看DEBUG狀態(tài)下的指令與源文件中的指令有何不同。(2)寄存器查看命令R直接使用無參的R命令可查看當(dāng)前各寄存器狀態(tài),由于程序還未執(zhí)行

20、,可以看到寄存器的狀態(tài)為初始的隨機(jī)值。請注意當(dāng)前CS:IP寄存器的內(nèi)容與上一步U命令看到的指令地址是一致的,但DS、ES等段寄存器則為初始的隨機(jī)值。(3)查看存儲單元命令D直接使用無參數(shù)的D命令,顯示存儲單元內(nèi)容。應(yīng)注意區(qū)分的是:當(dāng)前查看到的是從DS:0地址開始的連續(xù)128個單位的數(shù)據(jù),并不是當(dāng)前程序的數(shù)據(jù)段數(shù)據(jù)。(4)單步執(zhí)行命令T從程序開始單步執(zhí)行程序的前兩條指令,使用的命令格式為:T 2執(zhí)行完前兩條指令即返回,顯示當(dāng)前的寄存器狀態(tài),請注意查看當(dāng)前的CS、IP寄存器狀態(tài)與執(zhí)行指令前的差別,請試著解釋這兩個寄存器的含義。注意:INT指令不可單步執(zhí)行,需使用G命令連續(xù)執(zhí)行。(5)查看存儲單元命

21、令D使用帶參數(shù)的D命令,顯示從有效地址為0的存儲單元開始的連續(xù)128個單元中的數(shù)據(jù)。在此查看存儲單元地址、單元內(nèi)容、以及對應(yīng)的字符顯示。命令為:D 0請注意該D命令顯示的內(nèi)容與上一個D命令顯示的單元地址是否相同,為什么?(6)反匯編命令U直接使用反匯編命令U,會接著上次T命令執(zhí)行的位置05處開始反匯編顯示指令。 (7)斷點/連續(xù)執(zhí)行命令G使用斷點執(zhí)行的功能,從當(dāng)前位置執(zhí)行到顯示指令結(jié)束,命令為:G 0D程序執(zhí)行,可在屏幕上看到“F”字符的顯示。注意,該命令中的“0D”是斷點地址,即指令“MOV AX , 4C00H”的保存位置,該命令會將該位置之前的所有指令執(zhí)行完畢。斷點地址必須是U命令可見的

22、地址。(8)修改存儲單元內(nèi)容命令E使用E命令將CHAR變量中的字符修改為“M”,命令為:E 0 M或者使用命令E 0在提示下輸入M的ASCII碼4DH。(9)查看存儲單元內(nèi)容命令D使用D命令查看所修改的內(nèi)容,命令為:D 0 L1(10)連續(xù)執(zhí)行命令G從第一條指令開始重新執(zhí)行程序,使用G命令:G=0 10指定程序執(zhí)行的區(qū)間,在屏幕上可以看到“M”字符的顯示。(11)匯編命令A(yù)在DEBUG下修改匯編語言程序,使用A命令:A 5在給定的單元中輸入指令“MOV DL , 39”,兩次回車,返回到DEBUG提示符下。(12)連續(xù)執(zhí)行命令G重新執(zhí)行程序,使用G命令:G=0指定程序執(zhí)行的區(qū)間,在屏幕上可以看

23、到“9” 字符的顯示,同時顯示“Program terminated normally”的提示信息,表示程序執(zhí)行結(jié)束。(13)退出命令Q執(zhí)行Q命令,即可從DEBUG狀態(tài)下退出,返回DOS系統(tǒng)。思考問題1. DEBUG狀態(tài)下如何觀察源程序?和文本編輯方式下的源程序有哪些區(qū)別?2. 試解釋以上第2步中各DEBUG命令的含義。3. 若要將程序中的第三條匯編指令換成“MOV DL , 61H”,則更換該指令的DEBUG命令應(yīng)為什么?更換后程序的執(zhí)行結(jié)果是什么?實驗報告要求本次實驗不寫實驗報告。練習(xí)嘗試按上面的方法調(diào)試該程序。程序功能:從鍵盤上輸入一個字符串,保存于數(shù)據(jù)段中,分別顯示該字符串的長度和字符

24、串中第二個字符。程序代碼:DATA SEGMENT INMESS DB 'PLEASE INPUT A STRING(LENGTH<9):$' LENMESS DB 10,13,'THE LENGTH OF THE STRING IS:$' CHARMESS DB 10,13,'THE SECOND CHAR OF THE STRING IS:$' INSTRING DB 10,?,10 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX , DATA MOV DS

25、 , AX LEA DX , INMESS ; 顯示提示信息 MOV AH , 09H INT 21H LEA DX , INSTRING ; 輸入字符串,保存于INSTRING MOV AH , 0AH INT 21H LEA DX , LENMESS ; 顯示提示信息 MOV AH , 09H INT 21H LEA BX , INSTRING ; 獲取輸入字符串的長度值,并顯示 INC BX MOV DL , BX ADD DL , 30H MOV AH , 02H INT 21H LEA DX , CHARMESS ; 顯示提示信息 MOV AH , 09H INT 21H MOV D

26、L , BX+2 ; 顯示字符串中的第二個字符 MOV AH , 02H INT 21H MOV AX , 4C00H ; 程序返回 INT 21HCODE ENDS END START調(diào)試內(nèi)容:(1)將生成的可執(zhí)行文件調(diào)入DEBUG,觀察各寄存器的內(nèi)容;(2)斷點執(zhí)行到指令的位置,觀察各寄存器的變化情況、數(shù)據(jù)段中定義的各字符串INMESS、LENMESS、CHARMESS、INSTRING的位置;(3)斷點執(zhí)行到指令的位置,觀察程序執(zhí)行的結(jié)果;(4)斷點執(zhí)行到指令的位置,從鍵盤輸入字符串,返回后觀察輸入字符串的保存位置;(5)斷點執(zhí)行到指令的位置,觀察程序執(zhí)行的結(jié)果;(6)分別單步執(zhí)行指令開

27、始的4條指令,試觀察每條指令執(zhí)行的結(jié)果;(7)斷點執(zhí)行到指令的位置,觀察程序執(zhí)行的結(jié)果;(8)斷點執(zhí)行到指令的位置,觀察程序執(zhí)行的結(jié)果;(9)斷點執(zhí)行到指令的位置,觀察程序執(zhí)行的結(jié)果;預(yù)備實驗二 預(yù)備知識練習(xí)實驗?zāi)康?、熟悉各種操作數(shù)的尋址方式,并能在DEBUG環(huán)境中查看各操作數(shù);2、熟悉8086指令系統(tǒng)中的各類指令的用法和功能,為以后的程序編寫打下基礎(chǔ)。實驗內(nèi)容1、使用給定程序練習(xí)匯編語言程序的編輯、匯編、執(zhí)行、調(diào)試的過程;2、在DEBUG狀態(tài)下,練習(xí)常用的DEBUG命令調(diào)試給定程序。實驗學(xué)時本實驗內(nèi)容共用6學(xué)時,分三次實驗完成。實驗步驟1、尋址方式練習(xí)(1)在DEBUG命令行下,按以下步驟

28、完成操作。(A)使用e命令修改存儲地址以150、200為首的6個單元的內(nèi)容:-e150 *:0150 *.00 *.01-e200 *:0200 *.10 *.20 *.30 *.40注意:帶下劃線的部分是需要輸入的內(nèi)容。(B)使用查看命令d,查看上步所修改的存儲單元的內(nèi)容(注意對應(yīng)的段地址):-d150 L2-d200 L4(C)使用匯編命令a,輸入以下指令序列:-a100 *:0100 mov ax , cs *:0102 mov ds , ax *:0104 mov bx , 100 *:0107 mov ax , 150 *:010A add bx , ax *:010C mov al

29、 , bx *:010E add al , bx+1 *:0111 mov si , 2 *:0114 add al , bx+si *:0116 mov ah , 0 *:0118 mov ch , 0 *:011A mov cl , bx+si+1 *:011D add ax , cx(D)使用反匯編命令u,查看上步輸入的匯編語言程序(注意對應(yīng)的段地址):-u100(E)使用單步執(zhí)行命令t執(zhí)行該指令序列,查看每一步執(zhí)行的結(jié)果,并記錄。(2)使用適當(dāng)?shù)腄EBUG命令,按以下步驟完成操作。(A)修改以下寄存器的值: (DS)=1000H , (ES)=2000H , (SI)=1FEH(B)將

30、從存儲單元1000H:01FEH開始的連續(xù)四個單元內(nèi)容修改為:11H、22H、33H、44H;將從存儲單元2000H:01FEH開始的連續(xù)四個單元內(nèi)容修改為:12H、34H、56H、78H;(C)輸入?yún)R編指令:MOV AX , DS MOV BX , SI+2 MOV CX , BX ES: MOV DX , SI(D)指出以上各指令中源操作數(shù)的尋址方式,邏輯地址,并使用相關(guān)的DEBUG查看源操作數(shù)的值;(3)在Debug命令行下,完成以下操作。(A)將字?jǐn)?shù)據(jù)2345H存放到地址為1200H:100H單元中;(B)使用適當(dāng)?shù)腄EBUG命令,采用三種不同的邏輯地址形式查看這個字?jǐn)?shù)據(jù);(C)選擇不

31、同的尋址方式,使用MOV指令將這個字?jǐn)?shù)據(jù)送入AX寄存器中;要求至少采用3種不同的尋址方式。2、操作符與表達(dá)式練習(xí)(1)已知數(shù)據(jù)段定義如下,請驗證以下各指令的正誤,并指出錯誤原因,或給出指令執(zhí)行結(jié)果。DATA SEGMENTWordVar dw 2 dup(?)ByteVar db ?DATA ENDS驗證指令: MOVbyte ptr ES:WordVarBX , 100 MOVAX , offset WordVarSI LEAAX , WordVarSI CMPWordVar , ByteVar MOVAL , ByteVar + WordVar ADDWordVar , AL MOVByt

32、eVar , ByteVar WordVar(2)已知數(shù)據(jù)段定義如下,請畫出數(shù)據(jù)段中各數(shù)據(jù)的存放形式,并指出下列指令的執(zhí)行結(jié)果。 DSEG SEGMENT ORG 10H MyAddrDW$ BvarDB1,2,3 DB123 BufDB5 DUP(?) EVEN Len1=$-Bvar WvarDW1,2 ALIGN 4 DvarDD1,2,3 Len2EQU$-Dvar Len3EQUBuf-Bvar DSEG ENDS指令如下: MOV AX , offset Dvar MOV AX , Len1 MOV AX , Len2 MOV AX , Len3 MOV AX , MyAddr M

33、OV AX , word ptr BVar + 2 MOV AX , lengthof WVar + lengthof BVar MOV AX , type DVar + sizeof BVar MOV AX , word ptr DVar + 1(3)已知數(shù)據(jù)段定義如下,試完成以下要求的操作。DSEG SEGMENTARRAY DW 34H , 56H , 12H , 78HOTHER DW ?DA1DB20H DUP(?)DA2DW10HDSEG ENDS 試用MOV指令將數(shù)組ARRAY中的最后一個字?jǐn)?shù)據(jù)傳送到BX寄存器; 試用MOV指令將數(shù)組長度存入CX寄存器中; 試使用一條指令將變量D

34、A1中的數(shù)據(jù)個數(shù)送入CX寄存器中。3、基本指令練習(xí)(1)數(shù)據(jù)傳送指令的練習(xí)在DEBUG命令行下,利用A命令輸入以下指令序列,然后使用T命令單步跟蹤執(zhí)行,并使用相應(yīng)的DEBUG命令查看每條指令的執(zhí)行結(jié)果。指令序列如下:MOV SP , B0MOV AX , 1234MOV BX , 5678PUSH AXPUSH BXPOP CXPOP DXMOV SI , 2000LEA BX , SIMOV WORD PTR SI , 5566MOV WORD PTR BX+2 , 7788LDS AX , SIMOV DI , SI(2)算術(shù)運算指令的練習(xí)在DEBUG命令行下,利用A命令輸入以下指令序列,

35、然后使用T命令單步跟蹤執(zhí)行,并使用相應(yīng)的DEBUG命令查看每條指令的執(zhí)行結(jié)果和標(biāo)志位變化情況。指令序列如下:MOV AX , 1234MOV BX , 5678ADD AX , BXMOV CX , 9ABCSUB CL , CHMOV BYTE PTR 2000 , 55INC BYTE PTR 2000MOV AX , 20MOV BL , 8DIV BLMOV AL , 2MOV CL , 10MUL CLMOV AL , 6CBWMOV AX , 1050CWD(3)邏輯運算指令的練習(xí)在DEBUG命令行下,利用A命令輸入以下指令序列,然后使用T命令單步跟蹤執(zhí)行,并使用相應(yīng)的DEBUG命

36、令查看每條指令的執(zhí)行結(jié)果和標(biāo)志位變化情況。指令序列如下:MOV AX , FEMOV BX , 5678AND AX , BXMOV CX , 9ABCMOV DX , FF00OR DX , CXMOV AL , 55XOR AL , 0FMOV BL , 1SHL BL , 1SHL BL , 1MOV CL , 80SAR CL , 1SHR CL , 1實驗報告要求本次實驗不寫實驗報告。實驗一 基本編程方法練習(xí)實驗?zāi)康?、通過編制簡單的程序,練習(xí)匯編語言基本編程方法。2、練習(xí)在Debug 狀態(tài)下調(diào)試程序的方法。實驗內(nèi)容根據(jù)以下題目要求,編寫匯編語言源程序,并完成調(diào)試。1、試編寫程序,完

37、成下面公式的計算。 A (X-Y+24)/ Z的商,B (X-Y+24)/ Z的余數(shù) 其中,變量X和Y是32位有符號數(shù),變量A、B、Z是16位有符號數(shù)。Y DD 12A DW ?B DW ?Z DW 5DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV CX,DSLDS AX,XMOV DX,DSMOV DS,CXLES BX,YMOV CX,DXMOV DX,ESSUB AX,BXSBB CX,DXADD AX,24ADC CX,0MOV DX,CXLEA BX,ZIDIV BXMOV A,AXMO

38、V B,DXMOV AX,4C00HINT 21HCODE ENDSEND START2、試將字節(jié)數(shù)據(jù)B1 拆分成兩個半字節(jié)數(shù)據(jù),分別存放于其后兩個單元X 和Y 中。編程提示:數(shù)據(jù)段定義應(yīng)包含B1、X、Y 三個變量,其中B1變量自定義具體的數(shù)值,X、Y 變量的數(shù)值由程序賦值,分別是B1 的高低半個字節(jié)。該程序中需要使用邏輯操作完成半字節(jié)數(shù)據(jù)的拆分。DATA SEGMENTB1 DB 12HX DB ?Y DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AL,B1MOV AH,B1AND

39、AL,0FHMOV Y,ALMOV CL,4SHR AH,CLAND AH,0FHMOV X,AHMOV AX,4C00HINT 21HCODE ENDSEND START3、從鍵盤接收兩個不大于5的十進(jìn)制數(shù)字,并以十進(jìn)制數(shù)據(jù)形式顯示其和。編程提示: 該程序中要求的均為一位數(shù)據(jù)的輸入輸出,暫時不考慮多位數(shù)據(jù),請輸入05 之間的數(shù)據(jù),顯示的結(jié)果為09。請不要輸入兩個5,以免出現(xiàn)不能直接輸出的情況。DATA SEGMENTA DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AH,01INT 2

40、1HAND AL,0FHMOV BL,ALMOV AH,01INT 21HAND AL,0FHADD AL,BLADD AL,30HMOV DL,ALMOV AH,02INT 21HMOV AX,4C00HINT 21HCODE ENDSEND START4、從鍵盤接收一個字符串(假定輸入字符串長度大于3),試換行輸出該字符串中第二個字符開始的連續(xù)2個字符。 編程提示:該程序應(yīng)先使用DOS功能調(diào)用接收一個字符串。顯示其中的子串,要求從第二個字符開始,連續(xù)顯示2個字符,該功能可使用字符串顯示的DOS功能調(diào)用,也可以使用單字符顯示的DOS功能調(diào)用,重復(fù)顯示兩次。DATA SEGMENTBUF DB

41、 10,?,10 DUP("$")DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA DX,BUFMOV AH,0AHINT 21HMOV AH,2MOV DL,10INT 21HMOV DL,13INT 21HMOV DL,BUF+3MOV AH,2INT 21HMOV DL,BUF+4MOV AH,2INT 21HMOV AX,4C00HINT 21HCODE ENDSEND START實驗學(xué)時本實驗內(nèi)容共用4學(xué)時,分兩次實驗完成。實驗報告要求本次實驗報告中要求寫實驗內(nèi)容3 的

42、編寫、調(diào)試過程,其中包括程序設(shè)計思路、程序流程圖、程序代碼、和調(diào)試過程中遇到的典型問題以及解決方法。實驗二 分支循環(huán)結(jié)構(gòu)程序練習(xí)實驗?zāi)康模?)通過編制包含分支、循環(huán)結(jié)構(gòu)的程序,練習(xí)匯編語言綜合編程方法。(2)練習(xí)在Debug 狀態(tài)下調(diào)試程序的方法。實驗內(nèi)容1、試編寫程序,完成以下功能。(1)程序執(zhí)行時,顯示提示信息“Please input a string(length<9):”,由用戶輸入一個長度小于9的字符串;(2)然后顯示提示信息“Please input the index of the char to display:”,請用戶指定該串中的某個字符的位置號;(3)程序?qū)⒂脩糁?/p>

43、定位置的字符顯示出來。例如:用戶輸入一個字符串“ABCDEFG”,然后指定的位置號為2,則屏幕顯示字符“C”。注意:這里的位置號從0開始。注意:以上功能的實現(xiàn)不要求程序做控制判斷,在字符串輸入時,由人為控制字符串長度小于9;在指定位置號時,由人為控制輸入的位置號是合法的。2、試使用分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)程序完善上面的程序功能。(1)采用01號DOS功能調(diào)用,接收用戶輸入的字符串,并在程序中對字符串進(jìn)行長度檢查,若長度大于9,則要求用戶重新輸入;(2)用戶在指定位置號時,進(jìn)行判斷,若輸入非法(位置號大于實際字符串長度),則提示用戶重新輸入;(3)統(tǒng)計用戶輸入的字符串中特定字符的數(shù)目并顯示??上戎付ㄌ?/p>

44、定字符進(jìn)行統(tǒng)計,然后再由用戶指定字符進(jìn)行統(tǒng)計。實驗學(xué)時本實驗內(nèi)容共用6學(xué)時,分三次實驗完成。實驗報告要求本次實驗報告中,可只寫分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的程序段,報告中要包含分支、循環(huán)結(jié)構(gòu)程序段的設(shè)計思路、程序流程圖、程序代碼、和調(diào)試過程中遇到的典型問題以及解決方法。data segment buf1 db 'Please input a string(length<9):',10,13,'$' buf2 db 9 dup('$'),10,13,'$' buf3 db 'Please input the index of t

45、he char todisplay:',10,13,'$'data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax lea dx,buf1 mov ah,9 int 21h lea dx,buf2 mov ah,10 int 21h lea dx,buf3 mov ah,9 int 21h mov ah,1 int 21h and al,0fh mov ah,0 mov si,2 mov bx,ax mov dl,buf2bx+si mov ah,2 int 21h mov ax,4

46、c00h int 21hcode endsend startDATA SEGMENT BUF1 DB 'Please input a string(length<9)',10,13,'$' BUF2 DB 20,?,20 DUP(?) BUF3 DB 'Please input the index of the char to display',10,13,'$' NUM DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX L

47、EA DX,BUF1 MOV AH,9 INT 21HINPUT:LEA DX,BUF2 MOV AH,10 INT 21H MOV SI,1 MOV CH,0 MOV CL,BUF2SI JCXZ INPUT CMP CL,9 JA INPUT INDEX:LEA DX,BUF3 MOV AH,9 INT 21H MOV AH,01 INT 21H SUB AL,30H CMP AL,CL JA INDEX MOV BL,AL MOV BH,0 MOV AL,BUF2SI+BX MOV DL,AL MOV AH,02 INT 21H MOV DL,0AGAIN:INC SI CMP AL,B

48、UF2SI JZ SUM LOOP AGAIN JMP DISPSUM: INC DL LOOP AGAIN MOV NUM,DLDISP: ADD DL,30H MOV AH,02 INT 21H MOV AX,4C00H INT 21HCODE ENDS END START 實驗三 綜合程序練習(xí)實驗?zāi)康?、練習(xí)編寫包含分支、循環(huán)、子程序結(jié)構(gòu)的程序。2、練習(xí)在Debug狀態(tài)下跟蹤調(diào)試程序的方法。實驗內(nèi)容根據(jù)以下題目要求,編寫匯編語言源程序,并完成調(diào)試。1、已知無符號字?jǐn)?shù)組LIST的第一個字?jǐn)?shù)據(jù)為其元素個數(shù),其后數(shù)據(jù)按大小關(guān)系排序保存。試將某無符號字?jǐn)?shù)據(jù)X插入數(shù)組LIST的正確位置,并修改元素

49、個數(shù)。編程提示:該程序中要將X插入遞增數(shù)組,需要和數(shù)組中每一個數(shù)據(jù)值進(jìn)行大小比較,直至找到大于X的元素。數(shù)據(jù)比較的方式:(1)從前向后比較:找到合適位置后,再移動其后元素; (2)從后向前比較:比較到不合適,直接移動該元素,直到找到合適位置,剛好騰出X的保存空間;2、試用子程序?qū)崿F(xiàn)以下要求。 題目:從鍵盤接收若干個一位十進(jìn)制數(shù)值(09),并以十進(jìn)制數(shù)據(jù)形式顯示其和。 要求:(1)用子程序?qū)崿F(xiàn)一位十進(jìn)制數(shù)值的輸入; (2)當(dāng)用戶未輸入數(shù)值,直接回車時,結(jié)束輸入; (3)輸出的數(shù)據(jù)為多位十進(jìn)制數(shù)據(jù),而機(jī)器內(nèi)部計算的和是十六進(jìn)制形式,需要進(jìn)行數(shù)制轉(zhuǎn)換,然后以字符串的形式輸出結(jié)果; (4)程序中要求有

50、必要的提示信息。 例如:用戶在提示信息下輸入三個數(shù)值: Please input a number:5 Please input a number:3 Please input a number:4程序顯示運算結(jié)果 The sum is:123、試用子程序改進(jìn)以上題目。 題目:從鍵盤接收若干個N位的十進(jìn)制數(shù)值(065535),并以二進(jìn)制、十進(jìn)制、十六進(jìn)制三種數(shù)制形式顯示其和。 要求:(1)用子程序?qū)崿F(xiàn)一個N位十進(jìn)制數(shù)值的輸入,在主程序的循環(huán)結(jié)構(gòu)中調(diào)用該子程序; (2)當(dāng)用戶未輸入數(shù)值,直接回車時,結(jié)束輸入; (3)輸出的數(shù)據(jù)為多位十進(jìn)制數(shù)據(jù),而機(jī)器內(nèi)部計算的和是十六進(jìn)制形式,需要進(jìn)行數(shù)制轉(zhuǎn)換,然后以十進(jìn)制字符串的形式輸出結(jié)果; (4)程序中要求有必要的提示信息。 例如:用戶在提示信息下輸入三個數(shù)值: Please input a number:15 Please input a number:30 Please input a number:45 程序顯示運算結(jié)果 The sum is:0101 101

溫馨提示

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

評論

0/150

提交評論