




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、匯編語(yǔ)言程序設(shè)計(jì)-朱耀庭,南開(kāi)大學(xué)朱耀庭,第二章80 x86實(shí)模式匯編的運(yùn)行環(huán)境,2.5Windows下虛擬DOS運(yùn)行環(huán)境的搭建,2.4用MASM(或ASM)運(yùn)行匯編語(yǔ)言程序,2.3EMU8086的使用,2.2Debug調(diào)試匯編程序,2.1DOS下Edit的使用,南開(kāi)大學(xué)朱耀庭,2.1DOS下Edit的使用,匯編源程序文件的編輯及相關(guān)知識(shí),用Edit編輯匯編源程序,2.1.1,2.1.2,南開(kāi)大學(xué)朱耀庭,2.1.1匯編源程序文件的編輯及相關(guān)知識(shí),匯編語(yǔ)言源程序是一個(gè)文本文件,其默認(rèn)擴(kuò)展名為.asm,在將其匯編(也稱為翻譯)成機(jī)器語(yǔ)言之前,必須首先生成該文件。與任何計(jì)算機(jī)語(yǔ)言一樣,生成一個(gè)匯編語(yǔ)
2、言源程序分兩步完成。首先需要將求解的問(wèn)題,根據(jù)匯編語(yǔ)言規(guī)范,用相應(yīng)的匯編語(yǔ)句來(lái)實(shí)現(xiàn),這個(gè)過(guò)程稱作匯編語(yǔ)言程序設(shè)計(jì)。然后用工具軟件將設(shè)計(jì)好的程序輸入到計(jì)算機(jī)形成匯編語(yǔ)言源程序文件。程序設(shè)計(jì)的過(guò)程又分成幾步:提取要處理問(wèn)題的數(shù)學(xué)模型,尋找合適的算法,在已知算法的基礎(chǔ)上遵循匯編語(yǔ)言規(guī)范,構(gòu)思程序流程,必要時(shí)畫(huà)出流程圖(也稱作框圖),最后按照流程圖用匯編語(yǔ)句逐一實(shí)現(xiàn)流程圖中的每一步,形成源程序。,南開(kāi)大學(xué)朱耀庭,2.1.1匯編源程序文件的編輯及相關(guān)知識(shí),由源程序形成源程序文件的過(guò)程,就是利用文本編輯工具將源程序編輯成源程序文件的過(guò)程。既然匯編語(yǔ)言源程序文件是無(wú)格式文本文件,因此可以用任何文本編輯工具編
3、輯,包括Windows下的“記事本”、“寫(xiě)字板”,乃至“Word”都可以承擔(dān)。如果使用“Word”一定要保存為無(wú)格式的純文本文件,而不是.doc或其他文件格式。匯編語(yǔ)言源程序文件.asm生成后,需要經(jīng)過(guò)匯編生成.obj中間文件,然后連接.obj才能夠最終生成.exe可執(zhí)行文件。然而目前市面上卻沒(méi)有一種集成以上所有功能的匯編語(yǔ)言開(kāi)發(fā)工具。本章的目的就是介紹用編輯工具如何編輯匯編語(yǔ)言源程序文件,以及用一些調(diào)試工具軟件調(diào)試匯編程序等內(nèi)容。,南開(kāi)大學(xué)朱耀庭,2.1.2用Edit編輯匯編源程序,南開(kāi)大學(xué)朱耀庭,1.進(jìn)入Edit的DOS環(huán)境窗口,Windows下,選擇【開(kāi)始】|【運(yùn)行】命令,彈出【運(yùn)行】對(duì)
4、話框,如圖2-1所示,在【打開(kāi)】下拉列表框中輸入edit,單擊【確定】按鈕,進(jìn)入DOS環(huán)境下的Edit窗口,如圖2-2所示。,圖2-2Edit窗口,圖2-1Windows運(yùn)行對(duì)話框,南開(kāi)大學(xué)朱耀庭,2.用Edit編輯匯編語(yǔ)言程序,Edit編輯是一個(gè)DOS環(huán)境的編輯軟件,因此主要用鍵盤(pán)操作。Edit窗口全屏幕顯示的切換方式是按Alt+Enter組合鍵,一旦切換到全屏幕方式,其顯示如同在DOS環(huán)境下的狀態(tài),必要時(shí)可以再次按Alt+Enter組合鍵返回到窗口方式。,Edit窗口的上方是命令菜單選項(xiàng):File、Edit、Search、View、Options和Help。通過(guò)組合鍵Alt+菜單項(xiàng)的首字母
5、,可以打開(kāi)相應(yīng)的菜單選項(xiàng)。例如,按Alt+F組合鍵彈出File菜單,如圖2-3所示。,圖2-3命令菜單窗口,南開(kāi)大學(xué)朱耀庭,2.用Edit編輯匯編語(yǔ)言程序,例2-1用Edit編輯匯編程序Ex2-1.asm。該程序執(zhí)行結(jié)果是在顯示器上輸出一個(gè)字符3,源程序如下:CODESEGMENTASSUMECS:CODEMOVAH,2MOVDL,AINT21HMOVAH,4CHINT21HCODEENDSEND,南開(kāi)大學(xué)朱耀庭,2.用Edit編輯匯編語(yǔ)言程序,本例源程序文件編輯過(guò)程如下。(1)進(jìn)入Edit,按Alt+F組合鍵后在彈出的File菜單中選擇的New命令,編輯新文件。在Edit編輯窗口輸入Ex2-
6、1.asm的內(nèi)容,如圖2-4所示。,圖2-4編輯一個(gè)匯編源程序,南開(kāi)大學(xué)朱耀庭,2.用Edit編輯匯編語(yǔ)言程序,(2)再次按Alt+F組合鍵,在彈出的File菜單中按Alt+S組合鍵或選擇Saveas命令,在彈出的Saveas對(duì)話框中輸入要保存的文件路徑和文件名,這里是D:masmEx2-1.asm,然后單擊OK按鈕保存所編輯的匯編源程序,如圖2-5所示。,圖2-5保存源程序,南開(kāi)大學(xué)朱耀庭,2.2Debug調(diào)試匯編程序,用Debug運(yùn)行匯編語(yǔ)言程序,典型Debug命令剖析,2.2.1,2.2.2,2.2.3,Debug命令綜述,南開(kāi)大學(xué)朱耀庭,2.2.1用Debug運(yùn)行匯編語(yǔ)言程序,Debu
7、g調(diào)試程序是以DOS外部命令程序的形式提供的,它的文件名是D。在進(jìn)入Debug的提示符“-”之后,用戶可以通過(guò)Debug的命令輸入?yún)R編源程序,并用相應(yīng)命令將其匯編成機(jī)器語(yǔ)言程序,然后調(diào)試并運(yùn)行該程序。使用Debug運(yùn)行匯編程序較之使用ASM和MASM運(yùn)行有以下優(yōu)點(diǎn)。(1)可在最底層環(huán)境下運(yùn)行,免去使用ASM和MASM所必須熟悉的文本編輯程序、ASM和MASM匯編程序,以及LINK程序的麻煩,因而調(diào)試周期短。(2)程序員可在不熟悉ASM和MASM所涉及的偽指令的情況下運(yùn)行匯編語(yǔ)言程序,為以后將學(xué)習(xí)重點(diǎn)轉(zhuǎn)移到程序設(shè)計(jì)打下堅(jiān)實(shí)的使用指令編程的基礎(chǔ)。,南開(kāi)大學(xué)朱耀庭,2.2.1用Debug運(yùn)行匯編語(yǔ)言
8、程序,熟悉Debug命令的使用,可以為以后的軟件開(kāi)發(fā)掌握一種最容易找到的調(diào)試工具。這是因?yàn)镈ebug除了可運(yùn)行匯編語(yǔ)言程序外,還可以直接用來(lái)檢查和修改內(nèi)存單元、裝入、存儲(chǔ)及啟動(dòng)可執(zhí)行程序,檢查及修改寄存器。也就是說(shuō)Debug命令可以深入到計(jì)算機(jī)的基本級(jí),可使用戶通過(guò)這些命令了解計(jì)算機(jī)底層的工作狀態(tài)。這就為學(xué)習(xí)、了解和掌握計(jì)算機(jī)內(nèi)部的工作原理提供了一條新的學(xué)習(xí)途徑。然而在Debug下調(diào)試和運(yùn)行匯編語(yǔ)言程序也受到了一些限制,即不宜匯編較長(zhǎng)的程序,不便于分塊程序設(shè)計(jì),也不便于形成以DOS外部命令形式構(gòu)成的EXE文件,不能使用浮動(dòng)地址,也不能使用絕大多數(shù)ASM和MASM提供的偽指令。,南開(kāi)大學(xué)朱耀庭,
9、2.2.1用Debug運(yùn)行匯編語(yǔ)言程序,例2-2顯示內(nèi)存中的內(nèi)容,理解內(nèi)存分段的本質(zhì)含義。(1)進(jìn)入Debug。在Windows下,選擇【開(kāi)始】|【運(yùn)行】命令,彈出【運(yùn)行】對(duì)話框,如圖2-6所示,在【打開(kāi)】下拉列表框中輸入debug,單擊【確定】按鈕,進(jìn)入DOS環(huán)境下的Debug窗口,如圖2-7所示。,圖2-6輸入Debug命令,圖2-7Debug窗口,南開(kāi)大學(xué)朱耀庭,2.2.1用Debug運(yùn)行匯編語(yǔ)言程序,(2)用Debug的E命令修改內(nèi)存單元的內(nèi)容。如圖2-8所示,在Debug的命令提示符“-”后,輸入E1000:100ILoveAsm后并按Enter鍵。Debug的E命令用于修改指定內(nèi)存
10、單元的內(nèi)容,在后續(xù)部分會(huì)詳細(xì)介紹。,圖2-8Debug的E和D命令,南開(kāi)大學(xué)朱耀庭,2.2.1用Debug運(yùn)行匯編語(yǔ)言程序,(3)用Debug的D命令和D的不同地址參數(shù)顯示同樣單元的內(nèi)容。繼步驟(2)操作之后,在Debug的命令提示符“-”后,輸入D1000:100109后并按Enter鍵,觀察屏幕右側(cè)字符顯示區(qū)域的內(nèi)容,找到ILoveAsm字符串,想想為什么?在新就緒的命令提示符“-”后,輸入D1010:09后并按Enter鍵,觀察右側(cè)字符顯示區(qū)域的內(nèi)容。在新就緒的命令提示符“-”后,再輸入D900:71007109后并按Enter鍵,觀察右側(cè)字符顯示區(qū)域的內(nèi)容。在新就緒的命令提示符“-”后
11、,再輸入D11:FFF0FFF9后并按Enter鍵,觀察右側(cè)字符顯示區(qū)域的內(nèi)容。,南開(kāi)大學(xué)朱耀庭,2.2.2典型Debug命令剖析,南開(kāi)大學(xué)朱耀庭,1.顯示內(nèi)存命令D,助記單詞:Display。功能:顯示內(nèi)存內(nèi)容。格式:D命令有以下三種格式。1)格式一:D進(jìn)入Debug后,在命令提示符“-”下,輸入D命令后回車(chē)。將在屏幕上顯示當(dāng)前段,位移為100H起始的128個(gè)字節(jié)的內(nèi)容。如圖2-9所示,每行顯示16個(gè)字節(jié)的內(nèi)容。屏幕左側(cè)為起始地址“段地址:位移”;中間以十六進(jìn)制形式顯示16個(gè)字節(jié)的內(nèi)容,前8個(gè)與后8個(gè)之間用短橫線分隔,以便于閱讀;,南開(kāi)大學(xué)朱耀庭,1.顯示內(nèi)存命令D,右側(cè)以ASCII碼字符形
12、式顯示這16個(gè)單元的內(nèi)容,如果該單元內(nèi)容為不可顯示字符,則以小數(shù)點(diǎn)的形式顯示。,圖2-9D命令應(yīng)用,南開(kāi)大學(xué)朱耀庭,1.顯示內(nèi)存命令D,格式:D命令有以下三種格式。2)格式二:D關(guān)于“地址”及“地址范圍”的概念見(jiàn)本章2.2.3小節(jié)Debug命令綜述中的相關(guān)描述。格式一的D命令僅能受限制地從當(dāng)前代碼段位移為100H處開(kāi)始顯示,或是繼前一次后顯示緊接著的128個(gè)單元內(nèi)容。當(dāng)需要更快捷地直接顯示內(nèi)存中某指定地址處開(kāi)始的內(nèi)容時(shí),可以使用帶地址的D命令。,南開(kāi)大學(xué)朱耀庭,1.顯示內(nèi)存命令D,格式:D命令有以下三種格式。2)格式二:例如,Debug環(huán)境中,在命令提示符“-”后輸入D1000:82后按Ent
13、er鍵,顯示如圖2-10所示的內(nèi)容。不同的計(jì)算機(jī),此處顯示的內(nèi)容可能不盡相同。,圖2-10D命令顯示指定地址內(nèi)容,南開(kāi)大學(xué)朱耀庭,1.顯示內(nèi)存命令D,這里D命令雖然仍然顯示128個(gè)字節(jié),但第一行排列方式不同,這是因?yàn)镈命令顯示總是從一個(gè)能夠被16整除的地址開(kāi)始排列。注意:“地址”不但支持形如1000:82這樣指定了段地址及位移的絕對(duì)地址,還可以僅僅輸入D及位移,這種情況總是默認(rèn)為當(dāng)前段地址,如圖2-11所示。任何時(shí)候輸入的單字母“D”命令總是接著上一次的內(nèi)容繼續(xù)顯示。這一點(diǎn)可通過(guò)多次練習(xí)體會(huì)和掌握。,圖2-11D命令的不同應(yīng)用,南開(kāi)大學(xué)朱耀庭,1.顯示內(nèi)存命令D,格式:D命令有以下三種格式。2
14、)格式三:D當(dāng)需要觀察的內(nèi)存內(nèi)容限定在一個(gè)特定范圍內(nèi)時(shí),用帶“范圍”參數(shù)的D命令會(huì)更加方便。例如,當(dāng)僅僅需要顯示當(dāng)前段,位移從100H開(kāi)始到10AH為止的內(nèi)存內(nèi)容時(shí),可以通過(guò)命令“D10010A”得到所需要的內(nèi)容,如圖2-12所示。,圖2-12D命令顯示指定地址內(nèi)容,南開(kāi)大學(xué)朱耀庭,1.顯示內(nèi)存命令D,格式:D命令有以下三種格式。2)格式三:這里,還可以通過(guò)指定:“開(kāi)始段基址:位移結(jié)束位移”決定要顯示的相應(yīng)范圍,如圖2-13所示。也可以通過(guò)指定:“開(kāi)始段基址:位移L長(zhǎng)度”的方式?jīng)Q定要顯示的相應(yīng)范圍等。,圖2-13D命令顯示指定范圍內(nèi)容,南開(kāi)大學(xué)朱耀庭,2.修改內(nèi)存命令E,助記單詞:Edit。功
15、能:編輯修改內(nèi)容。格式:E?!暗刂贰备拍钔懊娴腄命令。Debug的E命令首先以十六進(jìn)制形式顯示指定地址的原值并以小數(shù)點(diǎn)結(jié)尾,然后等待輸入新值,按空格鍵跳到下一個(gè)要修改的字節(jié),并繼續(xù)按這種方法修改。如果等待輸入新值時(shí)直接按空格,當(dāng)前字節(jié)的內(nèi)容將被保留并跳到下一個(gè)字節(jié)等待修改,直到按Enter鍵為止。,南開(kāi)大學(xué)朱耀庭,2.修改內(nèi)存命令E,例如,如圖2-14所示,在命令提示符“-”后輸入E203,并觀測(cè)操作結(jié)果。,圖2-14E命令的應(yīng)用,E命令修改后,可以用D命令顯示所修改的內(nèi)容,并進(jìn)行對(duì)比和驗(yàn)證。,南開(kāi)大學(xué)朱耀庭,2.修改內(nèi)存命令E,例2-3用E命令直接輸入顯示單個(gè)字符的代碼程序并且執(zhí)行進(jìn)入De
16、bug后,按以下過(guò)程操作并觀察結(jié)果:,-e200b233b402cd21cd20-g=2003Programterminatednormally-e20113B4:020133.41-g=200,AProgramterminatednormally-u20020713B4:0200B241MOVDL,4113B4:0202B402MOVAH,0213B4:0204CD21INT2113B4:0206CD20INT20-q,南開(kāi)大學(xué)朱耀庭,2.2.3Debug命令綜述,Debug的提示符是“-”,在這一提示符下輸入Debug的命令,Debug將對(duì)命令解釋并且執(zhí)行。Debug命令的關(guān)鍵字是單個(gè)字母
17、,并且不區(qū)分大小寫(xiě),關(guān)鍵字用來(lái)指出該命令做什么。依命令的不同,關(guān)鍵字后可以給出操作參數(shù),操作參數(shù)指出了該命令按照何種方式去進(jìn)行。關(guān)鍵字與參數(shù)、參數(shù)與參數(shù)之間用空格隔開(kāi),命令若結(jié)束按Enter鍵(回車(chē)鍵)。必要時(shí)按Ctrl+Break組合鍵可中止命令的執(zhí)行,Ctrl+NumLock組合鍵可暫停屏幕卷動(dòng),按任一鍵繼續(xù)。Debug下所用數(shù)據(jù)均為十六進(jìn)制數(shù),且不必寫(xiě)H,如果寫(xiě)H會(huì)導(dǎo)致錯(cuò)誤發(fā)生。,南開(kāi)大學(xué)朱耀庭,2.2.3Debug命令綜述,Windows與DOS、DOS與Debug、Debug與其命令之間的關(guān)系如圖2-15所示。,圖2-15Windows、DOS、Debug及其命令之間的相互關(guān)系,動(dòng)畫(huà)
18、演示,南開(kāi)大學(xué)朱耀庭,2.2.3Debug命令綜述,例2-4在Debug下調(diào)試運(yùn)行一個(gè)匯編程序。本例用A命令將源程序?qū)懭雰?nèi)存,使用G命令執(zhí)行,再用U命令反匯編,接著用D命令顯示后,用Q命令退出Debug,返回DOS提示符。(1)進(jìn)入Debug,用A命令直接寫(xiě)入并匯編一個(gè)程序。,C:debug-A1000B0F:0100MOVDL,330B0F:0102MOVAH,20B0F:0104INT210B0F:0106INT200B0F:0108,南開(kāi)大學(xué)朱耀庭,2.2.3Debug命令綜述,例2-4在Debug下調(diào)試運(yùn)行一個(gè)匯編程序。(2)執(zhí)行該程序。,-G3Programterminatednor
19、mally-,(3)用U命令反匯編。-U1001080B0F:0100B233MOVDL,330B0F:0102B402MOVAH,020B0F:0104CD21INT210B0F:0106CD20INT200B0F:0108207401ANDSI+01,DH,南開(kāi)大學(xué)朱耀庭,2.2.3Debug命令綜述,例2-4在Debug下調(diào)試運(yùn)行一個(gè)匯編程序。(4)用D命令顯示內(nèi)存。,-D1001080B0F:0100B233B402CD21CD2020-20.3.!.,(5)用Q命令返回DOS。-QC:,例2-5調(diào)試運(yùn)行一段機(jī)器指令程序。本例顯示200H處開(kāi)始的一片單元內(nèi)容,然后用E命令,將一段機(jī)器代
20、碼指令寫(xiě)入200H208H,然后執(zhí)行,再用U命令反匯編。,南開(kāi)大學(xué)朱耀庭,2.2.3Debug命令綜述,例2-5調(diào)試運(yùn)行一段機(jī)器指令程序。(1)進(jìn)入Debug并且顯示位移為200H處的起始地址內(nèi)容。C:debug-D2000B0F:02000000000000000000-0000000000000000.0B0F:02100000000000000000-0000000000000000.0B0F:02204E8700004E924E9D-4EA84EB34EBE4EC9N.N.N.N.N.N.N.0B0F:02304ED44EDF00004EEA-4EF54E004F0B4F16N.N.N
21、.N.N.O.O.0B0F:02404F214F2C4F377A03-4F001301FF00A705O!O,O7z.O.0B0F:02508000CE04100021D7-40AF21D740AF21D7.!.!.!0B0F:0260400422B7400422D7-402F21D7402F21E2./!./0B0F:027043CC21B7406B21C7-40AF21C740AF21C7C.!.K!.!.!,南開(kāi)大學(xué)朱耀庭,2.2.3Debug命令綜述,例2-5調(diào)試運(yùn)行一段機(jī)器指令程序。(2)用E命令把代碼指令寫(xiě)入內(nèi)存。E200B233B402CD21CD201B(3)用G命令從200H
22、處開(kāi)始執(zhí)行。-G=2003Programterminatednormally(4)用U命令反匯編。-U2002080B0F:0200B233MOVDL,330B0F:0202B402MOVAH,020B0F:0204CD21INT210B0F:0206CD20INT200B0F:02081B00SBBAX,BX+SI,南開(kāi)大學(xué)朱耀庭,2.2.3Debug命令綜述,例2-5調(diào)試運(yùn)行一段機(jī)器指令程序。(5)用Q命令返回DOS。-QC:,例2-6R命令及T命令應(yīng)用實(shí)例。本例用A命令匯編一段匯編程序,用R命令顯示狀態(tài),并用T命令單條執(zhí)行。(1)進(jìn)入Debug并用A命令寫(xiě)入?yún)R編源程序。,C:debug-
23、A1000B0F:0100MOVAH,30B0F:0102MOVAL,20B0F:0104ADDAL,AH0B0F:0106INT200B0F:0108,南開(kāi)大學(xué)朱耀庭,2.2.3Debug命令綜述,例2-6R命令及T命令應(yīng)用實(shí)例。本例用A命令匯編一段匯編程序,用R命令顯示狀態(tài),并用T命令單條執(zhí)行。(2)用R命令顯示寄存器狀態(tài)。-RAX=0000BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000DS=0B0FES=0B0FSS=0B0FCS=0B0FIP=0100NVUPEIPLNZNAPONC0B0F:0100B403MOVAH,03(3)用T
24、命令單條執(zhí)行兩條指令。-TAX=0300BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000DS=0B0FES=0B0FSS=0B0FCS=0B0FIP=0102NVUPEIPLNZNAPONC0B0F:0102B002MOVAL,02,南開(kāi)大學(xué)朱耀庭,2.2.3Debug命令綜述,例2-6R命令及T命令應(yīng)用實(shí)例。本例用A命令匯編一段匯編程序,用R命令顯示狀態(tài),并用T命令單條執(zhí)行。(3)用T命令單條執(zhí)行兩條指令。-TAX=0302BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000DS=0B0FES=0
25、B0FSS=0B0FCS=0B0FIP=0104NVUPEIPLNZNAPONC0B0F:010400E0ADDAL,AH(4)用T命令單條執(zhí)行第3條指令,結(jié)果在AL中,(AL)=5。-TAX=0305BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000DS=0B0FES=0B0FSS=0B0FCS=0B0FIP=0106NVUPEIPLNZNAPONC0B0F:0106CD20INT20,南開(kāi)大學(xué)朱耀庭,2.2.3Debug命令綜述,例2-6R命令及T命令應(yīng)用實(shí)例。本例用A命令匯編一段匯編程序,用R命令顯示狀態(tài),并用T命令單條執(zhí)行。(4)用T命令
26、單條執(zhí)行第3條指令,結(jié)果在AL中,(AL)=5。-TAX=0305BX=0000CX=0000DX=0000SP=FFE8BP=0000SI=0000DI=0000DS=0B0FES=0B0FSS=0B0FCS=00A7IP=1072NVUPDIPLNZNAPONC00A7:107290NOP(5)用G命令接著執(zhí)行。-GProgramterminatednormally(6)退出。-QC:,南開(kāi)大學(xué)朱耀庭,2.2.3Debug命令綜述,例2-7M命令、C命令的應(yīng)用(1)進(jìn)入Debug,顯示100H110H的內(nèi)容。C:dbug-D1001100B0F:01000F00B98AFFF3AE47-6
27、1031F8BC34812B1.Ga.H.0B0F:011004(2)用F命令將31H裝入100H至110H-F10011031(3)用D顯示100H至117H-D1001170B0F:01003131313131313131-313131313131313111111111111111110B0F:0110318BC6F70AD0D301.,南開(kāi)大學(xué)朱耀庭,2.2.3Debug命令綜述,例2-7M命令、C命令的應(yīng)用(4)用E命令修改105H至108H的內(nèi)容-E10561,61,62,63(5)用D命令顯示100H至110H的內(nèi)容-D1001100B0F:0100313131313161616
28、2-633131313131313111111aabc1111110B0F:011031(6)用M命令將100H至110H的內(nèi)容復(fù)制到200H至210H-M100110200(7)用D命令顯示200H至210H的內(nèi)容-D2002100B0F:02003131313131616162-633131313131313111111aabc11111110B0F:021031,南開(kāi)大學(xué)朱耀庭,2.2.3Debug命令綜述,例2-7M命令、C命令的應(yīng)用(8)用E命令修改201H,202H,203H,20DH,20EH,20FH內(nèi)容-E201323134-E20D414243(9)用D命令顯示200H至2
29、10H內(nèi)容及100H至110H內(nèi)容-D2002100B0F:02003132313431616162-633131313141424312141aabc1111ABC0B0F:0210311-D1001100B0F:01003131313131616162-633131313131313111111aabb11111110B0F:011031,南開(kāi)大學(xué)朱耀庭,2.2.3Debug命令綜述,例2-7M命令、C命令的應(yīng)用(10)用C命令比較100H至110H與200H至210H的內(nèi)容,并顯示二者不一致的部分后退出-C1001102000B0F:010131320B0F:02010B0F:01033
30、1340B0F:02030B0F:010D31410B0F:020D0B0F:010E31420B0F:020E0B0F:010F31420B0F:020F-QC:,南開(kāi)大學(xué)朱耀庭,2.2.3Debug命令綜述,例2-8E命令和S命令應(yīng)用例(1)在位移300處寫(xiě)入ABCDEF,并且顯示這些單元內(nèi)容-E300ABCDEFG-D3003060B0F:030041424344454647ABCDEFG(2)在位移300處寫(xiě)入”1234”,并且顯示這些單元內(nèi)容-E310”1234”-D3103150B0F:03102731323334271234(3)在位移320H處寫(xiě)入123ABC,并且顯示這些單元
31、內(nèi)容。-E320313233414243-D3203250B0F:0320313233414243123ABC,南開(kāi)大學(xué)朱耀庭,2.2.3Debug命令綜述,例2-8E命令和S命令應(yīng)用例(4)在300H306H處搜索字符D,在310315處搜索字符D,在310315處搜索字符3等。-S300306D0B0F:0303-S310315D-S31031530B0F:0313-S3103150B0F:03100B0F:0315(5)顯示310H325H的內(nèi)容后退出。-D3103250B0F:03102731323334272213-41AF211341AF21131234.A.!.A.!.0B0F:
32、0320313233414243123ABC-Q,南開(kāi)大學(xué)朱耀庭,2.2.3Debug命令綜述,例2-9Debug下執(zhí)行計(jì)算機(jī)重啟指令程序,并對(duì)遇到的現(xiàn)象進(jìn)行思考。Debug使用雖然方便,但在Windows保護(hù)模式環(huán)境下,對(duì)于不少涉及系統(tǒng)操作的指令卻無(wú)法執(zhí)行,而在DOS操作系統(tǒng)下則不會(huì)出現(xiàn)這些問(wèn)題。下面,通過(guò)一個(gè)實(shí)驗(yàn)來(lái)體會(huì)這一限制。在Debug提示符后輸入如下內(nèi)容:-A13B3:0100jmpFFFF:013B3:0105-G本實(shí)驗(yàn)旨在調(diào)用位于內(nèi)存只讀存儲(chǔ)器地址FFFF:0000的指令,這一指令將跳轉(zhuǎn)到重新啟動(dòng)計(jì)算機(jī)的引導(dǎo)程序。但是在Windows環(huán)境下,這條指令是禁止執(zhí)行的。這與多任務(wù)操作系
33、統(tǒng)的執(zhí)行保護(hù)有關(guān),試想在某些程序正在執(zhí)行的情況下,其中一個(gè)程序去惡意或是無(wú)意執(zhí)行一條開(kāi)機(jī)指令,結(jié)果相當(dāng)于重新啟動(dòng)機(jī)器,其后果是不堪設(shè)想的。,南開(kāi)大學(xué)朱耀庭,2.2.3Debug命令綜述,在WindowsXP等常用操作系統(tǒng)下,盡管感覺(jué)上應(yīng)用程序好像是在真正地操作硬件,但實(shí)際上是操作系統(tǒng)通過(guò)虛擬設(shè)備驅(qū)動(dòng)程序在底層負(fù)責(zé)完成應(yīng)用程序與硬件的實(shí)際對(duì)話。這樣處理是為了使系統(tǒng)更加健壯,不過(guò)卻給學(xué)習(xí)匯編語(yǔ)言帶來(lái)了一定的麻煩和不便。因此本例的上述Debug命令在執(zhí)行時(shí),系統(tǒng)通常會(huì)彈出一個(gè)警告,聲明程序執(zhí)行了違法操作將被關(guān)閉,在某些系統(tǒng)下,當(dāng)前控制臺(tái)窗口會(huì)停止響應(yīng),出現(xiàn)程序死鎖現(xiàn)象。這是因?yàn)閃indows操作系統(tǒng)
34、自從NT以后,對(duì)系統(tǒng)管理采用了全新的方法,程序?qū)⒉荒苤苯尤ピL問(wèn)那些對(duì)于系統(tǒng)來(lái)說(shuō)容易導(dǎo)致崩潰的指令。要想使上述Debug命令能夠執(zhí)行,必須搭建一個(gè)在Windows下不受這一限制的虛擬DOS環(huán)境VPC。在VPC虛擬的操作系統(tǒng)環(huán)境下,可以不受以上Windows的限制,而隨心所欲地操縱模擬出來(lái)的硬件和系統(tǒng)。盡管這種情況下硬件和系統(tǒng)是模擬出來(lái)的,可是操縱的指令及程序是真實(shí)的,這樣既能夠進(jìn)一步深入學(xué)習(xí)匯編的相關(guān)內(nèi)容,又可以不受Windows的以上限制。,南開(kāi)大學(xué)朱耀庭,2.3Emu8086的使用,Emu8086簡(jiǎn)介,Emu8086的安裝及使用,2.3.1,2.3.2,2.3.4,Emu8086應(yīng)用實(shí)例,2
35、.3.3,Emu8086顯示模擬,南開(kāi)大學(xué)朱耀庭,2.3.1Emu8086簡(jiǎn)介,Emu8086是集8086/8088匯編和仿真為一體的虛擬PC工具軟件,它幾乎可以解決學(xué)習(xí)匯編語(yǔ)言的所有問(wèn)題。Emu8086含匯編語(yǔ)言源程序編輯器、匯編程序、具有調(diào)試功能的軟件仿真虛擬PC,以及教學(xué)軟件。這對(duì)初學(xué)匯編語(yǔ)言的人來(lái)說(shuō)是一個(gè)很有用的學(xué)習(xí)工具。它可以在虛擬PC上一步一步地編輯調(diào)試匯編語(yǔ)言程序,支持單步執(zhí)行,而且機(jī)器指令的執(zhí)行情況完全可視化。其所仿真的算術(shù)和邏輯運(yùn)算單元ALU可以顯示中央處理器CPU內(nèi)部的工作情況;可以在程序執(zhí)行的同時(shí)觀察寄存器、標(biāo)志位和內(nèi)存。模擬器在虛擬出的PC中執(zhí)行程序,避免了存取操作實(shí)際
36、硬件(如硬盤(pán)、內(nèi)存儲(chǔ)器等)在Windows環(huán)境下所帶來(lái)的麻煩。在虛擬機(jī)上執(zhí)行匯編程序,如同在真實(shí)硬件環(huán)境下執(zhí)行,使得所有硬件底層級(jí)的指令可以得到“直接”而直觀的執(zhí)行。由于匯編代碼是在虛擬機(jī)上執(zhí)行,因此調(diào)試非常方便。這一軟件兼容所有80 x86系列的處理器,可以在Windows環(huán)境下運(yùn)行。,南開(kāi)大學(xué)朱耀庭,2.3.2Emu8086的安裝及使用,在獲得Emu8086v4.05版應(yīng)用軟件的安裝文件后,雙擊setup.exe啟動(dòng)一個(gè)安裝向?qū)?,根?jù)簡(jiǎn)單的提示即可完成安裝。整個(gè)過(guò)程比較容易,這里不再介紹。,南開(kāi)大學(xué)朱耀庭,2.3.3Emu8086顯示模擬,如圖2-16所示,Emu8086可以在Window
37、s平臺(tái)下運(yùn)行,各種調(diào)試窗口為調(diào)試匯編語(yǔ)言程序提供了極大的方便。它也可以模擬DOS的圖形顯示環(huán)境,為學(xué)習(xí)、理解并設(shè)計(jì)圖形化程序提供了參考。,圖2-16Emu8086下的圖形模式模擬顯示屏,南開(kāi)大學(xué)朱耀庭,2.3.4Emu8086應(yīng)用實(shí)例,例2-10LED顯示端口仿真。這一練習(xí)通過(guò)向端口199寫(xiě)入16位數(shù)據(jù),讓一個(gè)模擬的LED發(fā)光裝置進(jìn)行計(jì)數(shù)操作。結(jié)果是在仿真環(huán)境下運(yùn)行,但其對(duì)端口的操作與實(shí)際應(yīng)用中的端口操作方法及實(shí)際效果是一樣的。源程序EX2-10.asm如下:#START=LED_DISPLAY.EXE#MAKE_BIN#NAMELEDMOVAX,1234OUT199,AXMOVAX,-567
38、8OUT199,AXMOVAX,0X1:OUT199,AXINCAXJMPX1HLT,圖2-17Emu8086下的LED端口仿真,南開(kāi)大學(xué)朱耀庭,2.3.4Emu8086應(yīng)用實(shí)例,例2-11打印機(jī)端口仿真。這一練習(xí)通過(guò)向端口號(hào)130寫(xiě)入字符數(shù)據(jù),讓一個(gè)模擬的打印機(jī)進(jìn)行打印仿真。這里通過(guò)匯編程序進(jìn)行的端口操作與實(shí)際應(yīng)用中的端口操作方法及實(shí)際效果是一樣的。源程序Ex2-11.asm如下:,#start=printer.exe#org100hjmpstartmsgdbHello,Printer!,0Ah,0Dhdb*db13,9;打印頭換行dbILoverNankai!msg_enddb0msg2d
39、bpressanykeytoejectthepage.$,start:movdl,12;新頁(yè)movah,5int21hmovsi,offsetmsgmovcx,offsetmsg_end-offsetmsgprint:movdl,simovah,5;MS-DOS打印功能int21hincsi;打印下一個(gè)字符loopprint,南開(kāi)大學(xué)朱耀庭,2.3.4Emu8086應(yīng)用實(shí)例,例2-11打印機(jī)端口仿真。,movdx,offsetmsg2movah,9int21hmovax,0;等待按任意鍵int16hmovdl,12;將當(dāng)前打印好的紙送出movah,5int21hret,圖2-18Emu8086
40、下的打印機(jī)端口仿真,南開(kāi)大學(xué)朱耀庭,2.4用MASM(或ASM)運(yùn)行匯編語(yǔ)言程序,MASM匯編語(yǔ)言程序的調(diào)試步驟,MASM典型實(shí)例,2.4.1,2.4.2,南開(kāi)大學(xué)朱耀庭,2.4.1MASM匯編語(yǔ)言程序的調(diào)試步驟,經(jīng)MASM或ASM匯編后運(yùn)行的匯編語(yǔ)言源程序不同于在Debug下運(yùn)行的匯編語(yǔ)言程序。首先在程序的書(shū)寫(xiě)方式上要遵循一定的規(guī)范,匯編語(yǔ)言源程序的書(shū)寫(xiě)格式詳見(jiàn)5.1節(jié)。這樣的源程序要有邏輯段的說(shuō)明,而且必須至少有一個(gè)邏輯代碼段。其次一個(gè)書(shū)寫(xiě)正確的源程序必須經(jīng)過(guò)源程序編輯、匯編、連接后生成一個(gè)EXE文件才能夠執(zhí)行。EXE文件是作為DOS的外部命令在DOS下運(yùn)行的。小匯編ASM下的匯編語(yǔ)言程序
41、可在64KB的內(nèi)存條件下運(yùn)行,且只能有限地使用偽指令。而宏匯編MASM下則必須在96KB以上的內(nèi)存條件下運(yùn)行,且可使用各種偽指令。在ASM和MASM運(yùn)行過(guò)程中,除匯編時(shí)用ASM代替MASM進(jìn)行匯編外,其他步驟完全相同。由匯編語(yǔ)言源程序到生成可執(zhí)行文件的過(guò)程如圖2-19所示。在MASM下調(diào)試運(yùn)行匯編語(yǔ)言程序的詳細(xì)步驟如圖2-20所示。,南開(kāi)大學(xué)朱耀庭,2.4.1MASM匯編語(yǔ)言程序的調(diào)試步驟,圖2-19由源程序生成可執(zhí)行文件的過(guò)程,演示動(dòng)畫(huà),南開(kāi)大學(xué)朱耀庭,2.4.1MASM匯編語(yǔ)言程序的調(diào)試步驟,圖2-20匯編語(yǔ)言程序的調(diào)試步驟,演示動(dòng)畫(huà)1,演示動(dòng)畫(huà)2,南開(kāi)大學(xué)朱耀庭,2.4.2MASM典型實(shí)
42、例,例2-12用MASM調(diào)試一個(gè)匯編程序。假設(shè)在D盤(pán)建立了一個(gè)名為MASM的子目錄(Windows稱作文件夾),同時(shí)已經(jīng)將匯編程序MASM、連接程序LINK等都復(fù)制到該目錄下,同時(shí)將要編輯的匯編語(yǔ)言源程序及其附屬文件都存放在該子目錄下。源程序名為sam.asm,程序清單如下:CODESEGMENTASSUMECS:CODESTART:MOVDL,33HMOVAH,2INT21HMOVAH,4CHINT21HCODEENDSENDSTART,南開(kāi)大學(xué)朱耀庭,2.4.2MASM典型實(shí)例,1)方法一在Windows內(nèi)置DOS環(huán)境下運(yùn)行MASM調(diào)試匯編程序的步驟如下。(1)進(jìn)入Edit編輯。Windo
43、ws下,選擇【開(kāi)始】|【運(yùn)行】命令,彈出【運(yùn)行】對(duì)話框,如圖2-1所示,在【打開(kāi)】下拉列表框中輸入command,單擊【確定】按鈕,進(jìn)入Windows環(huán)境下的DOS窗口,如圖2-21所示。DOS窗口全屏幕顯示的切換方式是按組合鍵Alt+Enter,一旦切換到全屏幕方式,其屏幕方式如同在DOS環(huán)境下的狀態(tài),必要時(shí)可以再次按Alt+Enter組合鍵返回到Windows窗口方式。這里假設(shè)MASM目錄在D盤(pán)MASM目錄下。為方便后續(xù)的調(diào)試,在DOS下輸入D:后按Enter鍵,設(shè)置D盤(pán)為當(dāng)前盤(pán)。再輸入CDMASM按Enter鍵,將MASM置為當(dāng)前目錄。然后在DOS提示符下輸入Edit按Enter鍵,啟動(dòng)
44、Edit窗口。,南開(kāi)大學(xué)朱耀庭,2.4.2MASM典型實(shí)例,1)方法一在Windows內(nèi)置DOS環(huán)境下運(yùn)行MASM調(diào)試匯編程序的步驟如下。(2)在Edit下編輯源程序sam.asm。在Edit交互界面中,選擇File|New命令,在編輯窗口逐行輸入源程序。程序編輯完后,選擇File|SaveAs命令,在彈出的對(duì)話框中輸入源程序名sam.asm后單擊OK按鈕確定并且存盤(pán)。存盤(pán)后選擇File|Exit命令返回DOS環(huán)境。,南開(kāi)大學(xué)朱耀庭,2.4.2MASM典型實(shí)例,1)方法一在Windows內(nèi)置DOS環(huán)境下運(yùn)行MASM調(diào)試匯編程序的步驟如下。(3)匯編。D:MASMmasmMicrosoft(R)
45、MacroAssemblerVersion5.00Copyright(C)MicrosoftCorp19811985,1987.Allrightsreserved.Sourcefilename.asm:samObjectfilenamesam.obj:SourcelistingNUL.lst:samCrossreferenceNUL.crf:sam50698+402934Bytessymbolspacefree0WarningErrors0SevereErrors,南開(kāi)大學(xué)朱耀庭,2.4.2MASM典型實(shí)例,1)方法一在Windows內(nèi)置DOS環(huán)境下運(yùn)行MASM調(diào)試匯編程序的步驟如下。(4)連
46、接。D:MASMlinkMicrosoft(R)OverlayLinkerVersion3.60Copyright(C)MicrosoftCorp19831987.Allrightsreserved.ObjectModules.obj:samRunFilesam.exe:ListFileNUL.map:samLibraries.lib:LINK:warningL4021:nostacksegment(5)執(zhí)行。直接執(zhí)行,在DOS下運(yùn)行步驟4連接生成的可執(zhí)行文件sam.exe。D:MASMsam.exe3,南開(kāi)大學(xué)朱耀庭,2.4.2MASM典型實(shí)例,1)方法一在Windows內(nèi)置DOS環(huán)境下運(yùn)行
47、MASM調(diào)試匯編程序的步驟如下。在Debug下執(zhí)行,必須寫(xiě)全名:D:MASMdebug-nsam.exe-1-g3Programterminatednormally-q(6)產(chǎn)生索引表文件并輸出。D:MASMcrefMicrosoft(R)CrossReferenceUntilityVersion5.00Copyright(C)MicrosoftCorp19811985,1987.Allrightsreserved.,南開(kāi)大學(xué)朱耀庭,2.4.2MASM典型實(shí)例,1)方法一在Windows內(nèi)置DOS環(huán)境下運(yùn)行MASM調(diào)試匯編程序的步驟如下。(6)產(chǎn)生索引表文件并輸出。Crossreference
48、.crf:samListingsam.ref:2SymbolsD:MASMtypesam.refMicrosoftCross-ReferenceVersion5.00WedJul2303:35:402008SymbolCross-Reference(#definition,+modification)Cref-1CODE.1#28START.3#92Symbols,南開(kāi)大學(xué)朱耀庭,2.4.2MASM典型實(shí)例,1)方法一在Windows內(nèi)置DOS環(huán)境下運(yùn)行MASM調(diào)試匯編程序的步驟如下。(7)打印.lst清單文件和.map文件。清單文件sam.lst如下:Microsoft(R)MacroAssemblerVersion5.007/23/8Page1-110000CODESEGMENT2ASSUMECS:CODE30000B233START:MOVDL,33H40002B402MOVAH,250004CD21INT21H60006B44CMOVAH,4CH70008CD21INT21H8000ACODEENDS9ENDSTART,南開(kāi)大學(xué)朱耀庭,2.4.2MASM典型實(shí)例,1)方法一在Windows內(nèi)置DOS環(huán)境下運(yùn)行MASM調(diào)試匯編程序的步驟如下。(7)打印.lst清單文件和.map文件。Microsoft(R)Mac
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二二屆中考數(shù)學(xué)試卷
- 肋骨骨折護(hù)理措施
- 2024年10月浙商銀行總行公司銀行部社會(huì)招聘筆試歷年參考題庫(kù)附帶答案詳解
- 配件庫(kù)管培訓(xùn)課件
- 鵪鶉養(yǎng)殖培訓(xùn)課件
- 2025至2030城市建設(shè)規(guī)劃行業(yè)市場(chǎng)占有率及投資前景評(píng)估規(guī)劃報(bào)告
- 2024年紫云縣貓營(yíng)鎮(zhèn)招聘林管員筆試真題
- 2024年杭州臨安區(qū)專職社區(qū)工作者招聘筆試真題
- 第五漫展數(shù)學(xué)試卷
- 高難度聯(lián)考數(shù)學(xué)試卷
- 《教師專業(yè)發(fā)展》課件
- 小學(xué)閱讀理解提分公開(kāi)課課件
- esd防靜電手冊(cè)20.20標(biāo)準(zhǔn)
- 2023年贛南師范大學(xué)科技學(xué)院輔導(dǎo)員招聘考試筆試題庫(kù)及答案解析
- 養(yǎng)老護(hù)理員職業(yè)道德27張課件
- 少兒美術(shù)課件-《長(zhǎng)頸鹿不會(huì)跳舞》
- 人教版五年級(jí)數(shù)學(xué)下冊(cè)單元及期中期末測(cè)試卷含答案(共16套)
- GB∕T 17989.1-2020 控制圖 第1部分:通用指南
- 醫(yī)院感染管理制度
- EN485.32003鋁及鋁合金薄板、帶材和厚板第三部分(譯文)
- 商混企業(yè)整合方案
評(píng)論
0/150
提交評(píng)論