機(jī)械專業(yè)-微機(jī)原理及接口技術(shù)-實(shí)驗(yàn)指導(dǎo)書_第1頁
機(jī)械專業(yè)-微機(jī)原理及接口技術(shù)-實(shí)驗(yàn)指導(dǎo)書_第2頁
機(jī)械專業(yè)-微機(jī)原理及接口技術(shù)-實(shí)驗(yàn)指導(dǎo)書_第3頁
機(jī)械專業(yè)-微機(jī)原理及接口技術(shù)-實(shí)驗(yàn)指導(dǎo)書_第4頁
機(jī)械專業(yè)-微機(jī)原理及接口技術(shù)-實(shí)驗(yàn)指導(dǎo)書_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、微機(jī)原理與接口技術(shù)實(shí)驗(yàn)指導(dǎo)書1 匯編基本原理21.1 程序,可直接運(yùn)行的程序,匯編源程序,匯編21.2 CPU取指令、執(zhí)行指令的過程32匯編工具M(jìn)ASM5.0使用方法32.1匯編源程序文件的建立方法32.2編譯階段52.3鏈接階段62.4程序調(diào)試階段73實(shí)驗(yàn)項(xiàng)目9實(shí)驗(yàn)一 尋址方式和匯編語言程序上機(jī)調(diào)試步驟9實(shí)驗(yàn)二 清零實(shí)驗(yàn)11實(shí)驗(yàn)三 碼制轉(zhuǎn)換實(shí)驗(yàn)13實(shí)驗(yàn)四 數(shù)據(jù)區(qū)移動實(shí)驗(yàn)16實(shí)驗(yàn)五 冒泡法排序?qū)嶒?yàn)181 匯編基本原理1.1 程序,可直接運(yùn)行的程序,匯編源程序,匯編程序程序以文件的形式存在,它是由若干條“指令”順序排列存儲構(gòu)成的。指令是對符合CPU指令集的所有信息的統(tǒng)稱,“指令”在程序中以兩種形

2、式存在,一種是以“指令代碼”的形式(在可直接運(yùn)行的程序文件中),另一種是以“助記符”的形式(在匯編源程序文件中)。無論“可直接運(yùn)行的程序”還是“匯編源程序”,其中的指令都是以順序排列的方式存儲的,只是指令存在的方式不同。可直接運(yùn)行的程序當(dāng)程序中的指令是以可執(zhí)行的“指令代碼”的形式存在時,該程序即為可直接運(yùn)行的程序,該程序所在的文件即為“可執(zhí)行程序文件”。“直接運(yùn)行”是指該程序中的指令代碼可以被CPU直接執(zhí)行。匯編源程序當(dāng)程序中的指令是以“助記符”的形式存在時,該程序即為匯編源程序。該程序所在的文件即為“匯編源程序文件”。匯編每一條指令助記符都一一對應(yīng)著一條指令代碼。將以助記符形式存儲的匯編源程

3、序文件翻譯成以指令代碼形式存儲的可執(zhí)行程序文件的過程叫匯編。其逆過程叫反匯編。換言之,以圖1所示為例,經(jīng)過匯編過程后,匯編源程序文件(*.asm)中以順序排列方式存儲著的所有指令助記符1到指令助記符n,都一一對應(yīng)的轉(zhuǎn)換成了可執(zhí)行程序文件(*.exe)中的指令代碼1到指令代碼n。圖11.2 CPU取指令、執(zhí)行指令的過程如圖1所示,CPU取指、執(zhí)行指令的的過程如下1) CPU中程序計(jì)數(shù)器PC所指向的地址即為將要取出的指令代碼所在的地址;2) PC指向地址后,經(jīng)讀信號有效,該地址中存放的指令代碼通過數(shù)據(jù)總線傳送到CPU內(nèi)部指令寄存器IR中,此時CPU只是取出該指令的二進(jìn)制代碼,尚不知道該二進(jìn)制代碼的

4、具體含義;3) CPU內(nèi)部的指令譯碼器ID對IR寄存器中的二進(jìn)制代碼進(jìn)行譯碼,經(jīng)比對其內(nèi)部的指令集后,CPU即可知道IR中二進(jìn)制代碼的具體指令代碼含義;4) 知道指令代碼的具體含義后,IR中的指令將被執(zhí)行。2匯編工具M(jìn)ASM5.0使用方法MASM5.0宏匯編程序用于DOS環(huán)境下。這里我們主要使用它的MASM.exe編譯工具和LINK.exe鏈接工具。如前所述,匯編是將助記符書寫的源程序文件翻譯為二進(jìn)制指令代碼的可執(zhí)行文件的過程。在MASM5.0工具,實(shí)際的匯編過程分為兩個階段,編譯階段和鏈接階段。圖22.1匯編源程序文件的建立方法可以使用任何一個文本編輯軟件來建立匯編源程序文件。如在windo

5、ws環(huán)境下可以使用其“記事本”工具,在DOS環(huán)境下可以使用工具等。需要注意的是,建立的匯編源程序文件必須以.asm為擴(kuò)展名,由于DOS不支持中文和長文件名系統(tǒng),因此*.asm的文件名部分不可以采用中文輸入法輸入文件名,常見的可以采用英文、數(shù)字或下劃線等,并且字符的長度不可以超過8個(最多可以是8個)。例如“12345678.asm”和“abc_1.asm”都是合法的,而“123456789.asm”及“匯編.asm”都是非法文件名,不能被masm5.0的編譯工具識別。此外,存盤路徑也不可以出現(xiàn)中文或長字符。實(shí)例:在windows操作系統(tǒng)點(diǎn)“開始”菜單“運(yùn)行”欄,在其中輸入cmd,回車,進(jìn)入模擬

6、DOS環(huán)境。如圖3所示。MASM5.0工具通常安裝在實(shí)驗(yàn)室電腦的D:或者E:根目錄下。在模擬DOS環(huán)境中敲入D:或者E:,進(jìn)入相應(yīng)盤的根目錄。然后敲edit回車,進(jìn)入文本編輯環(huán)境。如圖4所示。圖3圖4在edit編譯器中,輸入源程序,點(diǎn)擊“file”菜單的“save as”“另存為”選項(xiàng),選擇存盤路徑為D:或者E:(根據(jù)masm5.0所在的路徑選擇),在File Name欄中輸入?yún)R編源程序文件名abc.asm,點(diǎn)擊“ok”即建立匯編源程序文件成功。如圖5所示。圖52.2編譯階段如圖2所示,建立好匯編源程序后,需要使用masm.exe工具進(jìn)行編譯,編譯的目的是為了得到*.obj的目標(biāo)代碼文件,該文

7、件是純二進(jìn)制代碼文件,不能直接顯示在屏幕上。經(jīng)鏈接后才能得到可執(zhí)行文件*.exe。在編譯階段中,masm.exe工具將對源程序的語法進(jìn)行檢驗(yàn),如果發(fā)現(xiàn)錯誤將給予提示。錯誤提示分為嚴(yán)重錯誤和警告錯誤兩種。嚴(yán)重錯誤指示某些指令存在語法錯誤,不能形成對應(yīng)的二進(jìn)制機(jī)器指令。而警告錯誤指示某些指令含義不夠明確,需要提醒程序員注意。程序員可以根據(jù)提示對源程序進(jìn)行修改,直到得到正確的結(jié)果為止。在匯編過程中還會產(chǎn)生列表文件和交叉引用文件。列表文件的后綴為.LST,主要用于給出源程序和機(jī)器代碼程序的清單,其中包含了源程序中各語句及其對應(yīng)的目標(biāo)代碼,各語句的偏移量等相關(guān)信息,對調(diào)試程序有幫助,以供檢查程序使用。交

8、叉索引文件的后綴為.CRF,它是一個為源程序所引用的各種符號進(jìn)行前后對照的文件,主要用于給出不同程序段中互相引用的全部符號列表。初學(xué)者可以不用建立。舉例:在以上步驟建立abc.asm源程序文件后,對源文件進(jìn)行編譯。鍵入 “masm abc.asm”回車,如沒有語法錯誤,則生成目標(biāo)文件,如圖6所示。圖6若有錯誤,則提示錯誤所在的行號及錯誤類型,回到源程序中重新改正相應(yīng)錯誤處存盤,重復(fù)編譯過程,直到?jīng)]有錯誤才可以得到.obj的目標(biāo)文件。如圖7所示圖72.3鏈接階段在匯編過程中形成了目標(biāo)文件(.OBJ),但是在該文件中,只是將源程序的操作碼部分變成了機(jī)器碼,而地址操作數(shù)還是可浮動的相對地址,不是實(shí)際

9、地址,浮動地址需要再定位。只有經(jīng)過鏈接過程才能形成最后的可執(zhí)行文件。鏈接程序的功能就是把一個或多個目標(biāo)文件合并成一個可執(zhí)行文件,其后綴為.EXE。其實(shí)在鏈接過程中一共形成兩個文件:第一個是可執(zhí)行文件(.EXE)。默認(rèn)的可執(zhí)行文件名字與源程序文件相同,也可以根據(jù)用戶要求修改可執(zhí)行文件的名字;鏈接過程中形成的第二個文件是內(nèi)存映像文件(.MAP),它給出了每個段的地址分配情況和長度。如果不需要該文件則可以在鏈接命令執(zhí)行時直接輸入Enter鍵。在鏈接過程中還與一個庫文件(.LIB文件)相關(guān)。一般的匯編程序不需要庫文件。但是當(dāng)匯編語言與高級語言(如C語言)接口時需要用到庫文件。此時輸入相應(yīng)的庫文件名字即

10、可。如圖8所示,輸入link abc.obj,對目標(biāo)文件進(jìn)行鏈接,得到可執(zhí)行文件abc.exe。圖82.4 程序調(diào)試階段只有得到*.exe可執(zhí)行文件后才可以進(jìn)行調(diào)試,調(diào)試使用windows自帶的debug.exe調(diào)試工具。使用方法是,在圖8所示狀態(tài)下,輸入“debug abc.exe ”回車。進(jìn)入debug調(diào)試環(huán)境提示符“-”,用“-U”命令可以顯示反匯編信息。如圖9所示,在-u命令后的第一行處,顯示的“0b5e:0000”即第一條指令代碼存放的地址,其中0b5e是指令段段地址,0000是偏移地址。該地址存放的指令代碼是b44c,占兩個字節(jié)(0000和0001兩個便宜地址),因此第二行指令偏移

11、地址從0002開始存放。該行右邊的“mov ah,4ch”即“b44c”這條指令代碼對應(yīng)的助記符。回顧匯編過程,源程序*.asm中存放的即為圖9右邊所示的助記符;經(jīng)過masm.exe工具編譯后得到目標(biāo)文件*.obj,即得到了圖9中間部分的指令代碼(該指令代碼可以直接被CPU識別),但是此時并沒有得到物理地址,只有相對的浮動地址;再經(jīng)過link.exe工具鏈接后得到可執(zhí)行文件*.exe,即得到了圖9左邊所示的指令代碼所在的具體物理地址。所以只有可執(zhí)行文件.exe才可以直接運(yùn)行,因?yàn)槠渲屑劝酥噶畲a,又包含了指令代碼所在的具體物理地址。圖9在debug調(diào)試環(huán)境中,“-q”命令是退出調(diào)試狀態(tài)。“

12、-d”,“-g”,“-t”也經(jīng)常使用,如圖10所示。圖10單步執(zhí)行-t后狀態(tài)字信息的含義如表1所示溢出標(biāo)志OF方向標(biāo)志DF中斷標(biāo)志IF符號標(biāo)志SF零標(biāo)志ZF輔助標(biāo)志AF奇偶標(biāo)志PF進(jìn)位標(biāo)志CFOV(1)DN(1)EI(1)NG(1)ZR(1)AC(1)PE(1)CY(1)NV(0)UP(0)DI(0)PL(0)NZ(0)NA(0)PO(0)NC(0)表1 debug中狀態(tài)字信息的含義3軟件實(shí)驗(yàn)項(xiàng)目實(shí)驗(yàn)一 尋址方式和匯編語言程序上機(jī)調(diào)試步驟一、 實(shí)驗(yàn)?zāi)康?、 掌握在HQFC環(huán)境下8086的尋址方式。2、 掌握在HQFC環(huán)境下匯編語言程序上機(jī)步驟及調(diào)試過程。3、 掌握連續(xù)執(zhí)行、單步執(zhí)行、跳過執(zhí)行及

13、設(shè)置斷點(diǎn)的方法。4、 掌握連續(xù)執(zhí)行、單步執(zhí)行過程中如何查寄存器、存儲器、堆棧中的數(shù)據(jù)。二、 實(shí)驗(yàn)內(nèi)容1、在HQFC環(huán)境下單步執(zhí)行下列指令,查看每條指令的執(zhí)行過程,隨時查看寄存器、存儲器、堆棧及反匯編窗口并記錄執(zhí)行結(jié)果,查看、記錄每條指令的操作碼和操作數(shù),查看、記錄所有指令的反匯編結(jié)果。code segmentassume cs:codestart: mov ax,1234h mov bx,4321h add ax,bx mov cx,ax push cx pop dxloop: jmp loopcode ends end start 將3、4語句1234h、4321h改為1234、4321后再

14、執(zhí)行程序,觀察結(jié)果寄存器窗口,說明變化原因。在語句PUSH CX設(shè)置斷點(diǎn),連續(xù)執(zhí)行后查看結(jié)果,說明設(shè)置斷點(diǎn)對程序調(diào)試有何作用?2、 在數(shù)據(jù)段X單元存放有數(shù)據(jù)42,Y單元存放有數(shù)據(jù)43,編程求這兩數(shù)之和,并把結(jié)果存放到S單元,編寫出完整程序,上機(jī)調(diào)試,查看、記錄執(zhí)行結(jié)果。3、 已知數(shù)據(jù)段X單元存放的數(shù)據(jù)為10H,編程將該數(shù)據(jù)左移四位后存放到Y(jié)單元,編寫出完整程序,上機(jī)調(diào)試,查看、記錄執(zhí)行結(jié)果。三、 實(shí)驗(yàn)預(yù)習(xí)1、 8086的尋址方式,理解什么是操作碼和操作數(shù)。2、 了解匯編語言程序上機(jī)(編輯編譯鏈接執(zhí)行)過程。3、 學(xué)習(xí)利用匯編語言編寫簡單的源程序。4、 什么是反匯編,反匯編的作用?四、 實(shí)驗(yàn)報告

15、要求1、 寫出在HQFC環(huán)境下匯編語言程序上機(jī)的步驟。2、 寫出第1題源程序及對應(yīng)指令的反匯編結(jié)果,寫出3、4條指令的操作碼和操作數(shù),說出雙字節(jié)數(shù)在存儲器中的存放規(guī)律,寫出單步執(zhí)行完每條指令后,對應(yīng)指令寄存器的值。3、 寫出第2題、第3題的源程序和執(zhí)行結(jié)果。實(shí)驗(yàn)二 清零實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康氖煜ASM編譯環(huán)境,了解程序的匯編方法,熟悉常用匯編指令。二、實(shí)驗(yàn)內(nèi)容編寫程序,將程序數(shù)據(jù)段內(nèi)256個字節(jié)內(nèi)容清零(或?qū)憺?5h)三、實(shí)驗(yàn)步驟1)按照本章第2節(jié)所述,建立源程序文件*.asm(*為自己輸入的文件名)2)用masm.exe工具隊(duì)源程序進(jìn)行編譯,得到目標(biāo)文件*.obj;3)用link.exe工具對目

16、標(biāo)文件進(jìn)行鏈接,得到可執(zhí)行文件*.exe;4)用debug調(diào)試環(huán)境的-U命令,查看數(shù)據(jù)段段地址,用-D命令查看運(yùn)行前存儲器內(nèi)容,用-g運(yùn)行程序后再用-d查看清0(清55H)后的內(nèi)容圖11 調(diào)試時先用-U命令查看數(shù)據(jù)段段地址圖12 運(yùn)行程序前先用-d命令查看數(shù)據(jù)段,看到0000-00ffh地址中有256個AAH圖13 g連續(xù)運(yùn)行程序,提示程序正常執(zhí)行圖14 再次用d命令看數(shù)據(jù)段,看到00-00ffH共256個單元清成了55h五、參考程序data segment buf db 256 dup(0aah)data endscode segment assume cs:code,ds:datastar

17、t:mov ax,data mov ds,ax mov cx,256 lea si,buf mov al,55h L1: mov si,al inc si loop L1 mov ah,4ch int 21hcode endsend start實(shí)驗(yàn)三 碼制轉(zhuǎn)換實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康牧私?6進(jìn)制碼轉(zhuǎn)ascii碼的方法,學(xué)習(xí)匯編指令。二、實(shí)驗(yàn)內(nèi)容編寫程序,將程序數(shù)據(jù)段內(nèi)0,1,2,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh 的16個16進(jìn)制數(shù)轉(zhuǎn)換為相應(yīng)的ascii碼,并存儲在原碼所在的相應(yīng)地址中。三、編程原理取出一個數(shù)后,首先判斷該數(shù)是否大于等于10(或小于10),如果大于10則加37H轉(zhuǎn)換,小于1

18、0則加30H。四、實(shí)驗(yàn)步驟1)按照本章第2節(jié)所述,建立源程序文件*.asm(*為自己輸入的文件名)2)用masm.exe工具隊(duì)源程序進(jìn)行編譯,得到目標(biāo)文件*.obj;3)用link.exe工具對目標(biāo)文件進(jìn)行鏈接,得到可執(zhí)行文件*.exe;4)用debug調(diào)試環(huán)境的-U命令,查看數(shù)據(jù)段段地址,用-D命令查看運(yùn)行前存儲器內(nèi)容,用-g運(yùn)行程序后再用-d查看轉(zhuǎn)碼后的內(nèi)容圖15 U命令查看數(shù)據(jù)段段地址圖16 程序運(yùn)行前先用-d命令查看數(shù)據(jù)段內(nèi)容圖17 程序運(yùn)行后再用-d命令查看數(shù)據(jù)段內(nèi)容四、參考程序data segment buf db 0,1,2,3,4,5,6,7,8,9,0Ah,0bH,0CH,0

19、Dh,0Eh,0Fhdata endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov cx,16 lea si,buf L2: mov al,si cmp al,10 jb L1 add al,7h L1: add al,30h mov si,al inc si loop L2 mov ah,4ch int 21hcode endsend start實(shí)驗(yàn)四 數(shù)據(jù)區(qū)移動實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康牧私饨徊鎱^(qū)域的數(shù)據(jù)移動方法,學(xué)習(xí)匯編指令。二、實(shí)驗(yàn)內(nèi)容編寫程序,將程序數(shù)據(jù)段內(nèi)00-000fH 的16個數(shù)據(jù)傳送到從0008偏

20、移地址開始的16個字節(jié)的區(qū)域中。三、編程原理在沒有數(shù)據(jù)區(qū)重疊的情況下,可以用遞增或遞減的方式隨意傳送。在有數(shù)據(jù)區(qū)重疊的情況只能使用其中一種。因此作為通用的情況,可以先將源區(qū)域的首地址和目的區(qū)域的首地址進(jìn)行比較,如果源區(qū)域首地址比目的區(qū)域首地址小,無論有沒有重疊區(qū)域,一律采用遞減方式傳送(即先傳送末地址,然后地址指針遞減);否則如果源區(qū)域首地址比目的區(qū)域首地址大,無論有沒有數(shù)據(jù)區(qū)重疊,一律用遞增方式傳送。圖18 數(shù)據(jù)重疊情況數(shù)據(jù)傳送原理示意圖四、實(shí)驗(yàn)步驟1)按照本章第2節(jié)所述,建立源程序文件*.asm(*為自己輸入的文件名)2)用masm.exe工具隊(duì)源程序進(jìn)行編譯,得到目標(biāo)文件*.obj;3)

21、用link.exe工具對目標(biāo)文件進(jìn)行鏈接,得到可執(zhí)行文件*.exe;4)用debug調(diào)試環(huán)境的-U命令,查看數(shù)據(jù)段段地址,用-D命令查看運(yùn)行前存儲器內(nèi)容,用-g運(yùn)行程序后再用-d查看數(shù)據(jù)傳送后的內(nèi)容圖19 運(yùn)行前后數(shù)據(jù)區(qū)的變化五、參考程序data segment buf1 db 0,1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh;buf1為源區(qū)域首地址org 08H buf2 db 8 ;buf2為目的區(qū)域首地址 org 10H ;由于偏移地址10H-1Fh區(qū)域可能被使用,所以建立足夠的數(shù)據(jù)段緩沖區(qū) db ? ;當(dāng)10H被db偽指令占用后,10h-1fH都會

22、分配給數(shù)據(jù)段使用data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov cx,16 lea si,buf1 ;如需改變源區(qū)域和目的區(qū)域位置關(guān)系,只要將這里的buf1 lea di,buf2 ;和這里的buf2倒一下次序即可 cmp si,di ja L1 add si,cx dec si ;源區(qū)域首地址+16-1即為源區(qū)域末地址 add di,cx ; dec di ;目的區(qū)域首地址+16-1即為目的區(qū)域末地址 std L3: mov al,si L3:rep movsb mov di,al ;遞

23、減方式 jmp L2 dec si dec di loop L3 jmp L2 ;初學(xué)者往往在這里容易遺漏 L1: mov al,si L1:cld mov di,al rep movsb inc si ;遞增方式 L2:mov ah,4ch inc di int 21h loop L1 L2: mov ah,4ch int 21hcode endsend start實(shí)驗(yàn)五 冒泡法排序?qū)嶒?yàn)一、實(shí)驗(yàn)?zāi)康牧私饷芭莘ㄔ恚瑢W(xué)習(xí)多重循環(huán)的編程方法。二、實(shí)驗(yàn)內(nèi)容編寫程序,用冒泡法實(shí)現(xiàn)將數(shù)據(jù)段內(nèi)5,3,3,2,1按照由小到大的順序重新排列。三、編程原理冒泡即將數(shù)據(jù)兩兩比較,確保大的數(shù)放到右邊。N個數(shù)經(jīng)歷N-1次冒泡后可以找到最大的氣泡。其中“兩兩比較”可以用內(nèi)循環(huán)的結(jié)構(gòu)實(shí)現(xiàn)。經(jīng)歷第

溫馨提示

  • 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

提交評論