匯編語(yǔ)言程序設(shè)計(jì)的實(shí)驗(yàn)環(huán)境及上機(jī)步驟_第1頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)的實(shí)驗(yàn)環(huán)境及上機(jī)步驟_第2頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)的實(shí)驗(yàn)環(huán)境及上機(jī)步驟_第3頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)的實(shí)驗(yàn)環(huán)境及上機(jī)步驟_第4頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)的實(shí)驗(yàn)環(huán)境及上機(jī)步驟_第5頁(yè)
已閱讀5頁(yè),還剩40頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)的實(shí)驗(yàn)環(huán)境及上機(jī)步驟一、 實(shí)驗(yàn)環(huán)境匯編語(yǔ)言程序設(shè)計(jì)的實(shí)驗(yàn)環(huán)境如下:1. 硬件環(huán)境微型計(jì)算機(jī)(Intel x86系列 CPU 一臺(tái)2. 軟件環(huán)境Windows98/2000/XP操作系統(tǒng)任意一種文本編輯器(EDIT 、 NOTEPAD (記事本 、 UltraEDIT 等匯編程序(MASM.EXE 或 TASM.EXE 連接程序(LINK.EXE 或 TLINK.EXE 調(diào)試程序(DEBUG.EXE 或 TD.EXE 文本編輯器建議使用 EDIT 或 NOTEPAD , 匯編程序建議使用 MASM.EXE , 連接程序建議使用 LINK.EXE , 調(diào)試程序建議 使用 TD.EX

2、E 。二、 上機(jī)實(shí)驗(yàn)步驟建議源程序存放的目錄名為 ASM (或 MASM , 并放在 C 盤(pán)或 D 盤(pán)的根目錄下。 如果沒(méi)有創(chuàng)建過(guò)此目錄, 請(qǐng)用如下方 法創(chuàng)建:通過(guò) Windows 的資源管理器找到 C 盤(pán)的根目錄,在 C 盤(pán)的根目錄窗口中點(diǎn)擊右鍵,在彈出的菜單中選擇“新建” “文件夾” ,并把新建的文件夾命名為 ASM 。請(qǐng)把 MASM.EXE 、 LINK.EXE 、 DENUG.EXE 和 TD.EXE 都拷貝到此目錄中。2.建立 ASM 源程序建立 ASM 源程序可以使用 EDIT 或 NOTEPAD (記事本文本編輯器。下面的例子說(shuō)明了用 EDIT 文本編輯器來(lái)建立 ASM 源程序的

3、步驟(假定要建立的源程序名為 HELLO.ASM ,用 NOTEPAD (記事本建立 ASM 源程序的步驟與此類似。 在 Windows 中 點(diǎn) 擊 桌 面 左 下 角 的 “ 開(kāi) 始 ” 按 鈕 選 擇 “ 運(yùn) 行 ” 在 彈 出 的 窗 口 中 輸 入 “ EDIT.COM C:ASMHELLO.ASM” ,屏幕上出現(xiàn) EDIT 的編輯窗口,如圖 1所示。 圖 1 文本編輯器 EDIT 的編輯窗口窗口標(biāo)題行顯示了 EDIT 程序的完整路徑名。 緊接著標(biāo)題行下面的是菜單行, 窗口最下面一行是提示行。 菜單可以 用 Alt 鍵激活,然后用方向鍵選擇菜單項(xiàng),也可以直接用 Alt-F 打開(kāi) Fil

4、e 文件菜單,用 Alt-E 打開(kāi) Edit 編輯菜單, 等等。如果鍵入 EDIT 命令時(shí)已帶上了源程序文件名(C:ASMHELLO.ASM ,在編輯窗口上部就會(huì)顯示該文件名。如果在 鍵入 EDIT 命令時(shí)未給出源程序文件名,則編輯窗口上會(huì)顯示“ UNTITLED1” ,表示文件還沒(méi)有名字,在這種情況下保存 源程序文件時(shí), EDIT 會(huì)提示輸入要保存的源程序的文件名。編輯窗口用于輸入源程序。 EDIT 是一個(gè)全屏幕編輯程序,故可以使用方向鍵把光標(biāo)定位到編輯窗口中的任何一個(gè) 位置上。 EDIT 中的編輯鍵和功能鍵符合 Windows 的標(biāo)準(zhǔn),這里不再贅述。源程序輸入完畢后, 用 Alt-F 打開(kāi)

5、 File 菜單, 用其中的 Save 功能將文件存盤(pán)。 如果在鍵入 EDIT 命令時(shí)未給出源 程序文件名,則這時(shí)會(huì)彈出一個(gè)“ Save as”窗口,在這個(gè)窗口中輸入你想要保存的源程序的路徑和文件名 (本例中為 C:ASMHELLO.ASM。 注意,匯編語(yǔ)言源程序文件的擴(kuò)展名最好起名為 .ASM ,這樣能給后面的匯編和連接操作帶來(lái)很大的方便。 3.用 MASM.EXE 匯編源程序產(chǎn)生 OBJ 目標(biāo)文件源文件 HELLO.ASM 建立后,要使用匯編程序?qū)υ闯绦蛭募R編,匯編后產(chǎn)生二進(jìn)制的目標(biāo)文件(.OBJ 文件 。具 體操作如下: 方法一:在 Windows 中操作用資源管理器打開(kāi)源程序目錄 C

6、:ASM,把 HELLO.ASM 拖到 MASM.EXE 程序圖標(biāo)上。 方法二:在 DOS 命令提示符窗口中操作選擇“開(kāi)始”“程序”“附件”“命令提示符” ,打開(kāi) DOS 命令提示符窗口,然后用 CD 命令轉(zhuǎn)到源程 序目錄下,接著輸入 MASM 命令:I:>C:<回車 >C:>CD ASM<回車 >C:ASM>MASM HELLO.ASM<回車 >操作時(shí)的屏幕顯示如圖 2所示。 圖 2 在 DOS 命令提示符窗口中進(jìn)行匯編不管用以上二個(gè)方法中的哪個(gè)方法,進(jìn)入 MASM 程序后,都會(huì)提示讓你輸入目標(biāo)文件名(Object filename ,并

7、在 方括號(hào)中顯示默認(rèn)的目標(biāo)文件名,建議輸入目標(biāo)文件的完整路徑名,如:C:ASMHELLO.OBJ回車 。后面的兩個(gè)提示 為可選項(xiàng),直接按回車。注意,若打開(kāi) MASM 程序時(shí)未給出源程序名,則 MASM 程序會(huì)首先提示讓你輸入源程序文件名 (Source filename ,此時(shí)輸入源程序文件名 HELLO.ASM 并回車,然后進(jìn)行的操作與上面完全相同。 圖 3 有錯(cuò)誤的匯編過(guò)程例子如果沒(méi)有錯(cuò)誤, MASM 就會(huì)在當(dāng)前目錄下建立一個(gè) HELLO.OBJ 文件(名字與源文件名相同,只是擴(kuò)展名不同 。如 果源文件有錯(cuò)誤, MASM 會(huì)指出錯(cuò)誤的行號(hào)和錯(cuò)誤的原因。 圖 3是在匯編過(guò)程中檢查出兩個(gè)錯(cuò)誤的

8、例子。 在這個(gè)例子中, 可以看到源程序的錯(cuò)誤類型有兩類: 警告錯(cuò)誤 (Warning Errors。警告錯(cuò)誤不影響程序的運(yùn)行,但可能會(huì)得出錯(cuò)誤的結(jié)果。此例中無(wú)警告錯(cuò)誤。 嚴(yán)重錯(cuò)誤 (Severe Errors。對(duì)于嚴(yán)重錯(cuò)誤, MASM 將無(wú)法生成 OBJ 文件。此例中有兩個(gè)嚴(yán)重錯(cuò)誤。在錯(cuò)誤信息中, 園括號(hào)里的數(shù)字為有錯(cuò)誤的行號(hào) (在此例中, 兩個(gè)錯(cuò)誤分別出現(xiàn)在第 6行和第 9行 , 后面給出了 錯(cuò)誤類型及具體錯(cuò)誤原因。如果出現(xiàn)了嚴(yán)重錯(cuò)誤,你必須重新進(jìn)入 EDIT 編輯器,根據(jù)錯(cuò)誤的行號(hào)和錯(cuò)誤原因來(lái)改正源 程序中的錯(cuò)誤,直到匯編沒(méi)有錯(cuò)為止。 注意,匯編程序只能指出程序的語(yǔ)法錯(cuò)誤,而無(wú)法指出程序邏

9、輯的錯(cuò)誤。4.用 LINK.EXE 產(chǎn)生 EXE 可執(zhí)行文件在上一步驟中,匯編程序產(chǎn)生的是二進(jìn)制目標(biāo)文件(OBJ 文件 ,并不是可執(zhí)行文件,要想使我們編制的程序能夠 運(yùn)行,還必須用連接程序(LINK.EXE 把 OBJ 文件轉(zhuǎn)換為可執(zhí)行的 EXE 文件。具體操作如下: 方法一:在 Windows 中操作用資源管理器打開(kāi)源程序目錄 C:ASM,把 HELLO.OBJ 拖到 LINK.EXE 程序圖標(biāo)上。 方法二:在 DOS 命令提示符窗口中操作選擇“開(kāi)始”“程序”“附件”“命令提示符” ,打開(kāi) DOS 命令提示符窗口,然后用 CD 命令轉(zhuǎn)到源程序 目錄下,接著輸入 LINK 命令:I:>C

10、:<回車 >C:>CD ASM<回車 >C:ASM>LINK HELLO.OBJ<回車 >操作時(shí)的屏幕顯示如圖 4所示。 圖 4 把 OBJ 文件連接成可執(zhí)行文件不管用以上二個(gè)方法中的哪個(gè)方法,進(jìn)入 LINK 程序后,都會(huì)提示讓你輸入可執(zhí)行文件名(Run file ,并在方括 號(hào)中顯示默認(rèn)的可執(zhí)行文件名,建議輸入可執(zhí)行文件的完整路徑名,如:C:ASMHELLO.EXE回車 。后面的兩個(gè)提示 為可選項(xiàng),直接按回車。注意,若打開(kāi) LINK 程序時(shí)未給出 OBJ 文件名,則 LINK 程序會(huì)首先提示讓你輸入 OBJ 文件名 (Object Module

11、s ,此時(shí)輸入 OBJ 文件名 HELLO.OBJ 并回車,然后進(jìn)行的操作與上面完全相同。如果沒(méi)有錯(cuò)誤, LINK 就會(huì)建立一個(gè) HELLO.EXE 文件。如果 OBJ 文件有錯(cuò)誤, LINK 會(huì)指出錯(cuò)誤的原因。對(duì)于無(wú)堆棧 警告(Warning :NO STACK segment信息,可以不予理睬,它不影響程序的執(zhí)行。如鏈接時(shí)有其它錯(cuò)誤。須檢查修改 源程序,重新匯編、連接,直到正確。建立了 HELLO.EXE 文件后,就可以直接在 DOS 下運(yùn)行此程序,如下所示:C:>HELLO回車C:>程序運(yùn)行結(jié)束后,返回 DOS 。如果運(yùn)行結(jié)果正確,那么程序運(yùn)行結(jié)束時(shí)結(jié)果會(huì)直接顯示在屏幕上。如

12、果程序不顯 示結(jié)果,我們?nèi)绾沃莱绦蚴欠裾_呢 ? 例如,這里的 HELLO.EXE 程序并未顯示出結(jié)果,所以我們不知道程序執(zhí)行的結(jié) 果是否正確。這時(shí),我們就要使用 TD.EXE 調(diào)試工具來(lái)查看運(yùn)行結(jié)果。此外,大部分程序必須經(jīng)過(guò)調(diào)試階段才能糾正程 序執(zhí)行中的錯(cuò)誤,調(diào)試程序時(shí)也要使用 TD.EXE 。實(shí)驗(yàn)一 數(shù)據(jù)傳送一、 實(shí)驗(yàn)?zāi)康?.熟悉 8086指令系統(tǒng)的數(shù)據(jù)傳送指令及 8086的尋址方式。2.利用 Turbo Debugger調(diào)試工具來(lái)調(diào)試匯編語(yǔ)言程序。二、 實(shí)驗(yàn)預(yù)習(xí)要求1.復(fù)習(xí) 8086指令系統(tǒng)中的數(shù)據(jù)傳送類指令和 8086的尋址方式。2.預(yù)習(xí) Turbo Debugger的使用方法(見(jiàn)附

13、錄二 :a 如何啟動(dòng) Turbo Debugger;b 如何在各窗口之間切換;c 如何查看或修改寄存器、狀態(tài)標(biāo)志和存儲(chǔ)單元的內(nèi)容;d 如何輸入程序段;e 如何單步運(yùn)行程序段和用設(shè)置斷點(diǎn)的方法運(yùn)行程序段。3.按照題目要求預(yù)先編寫(xiě)好實(shí)驗(yàn)中的程序段。三、 實(shí)驗(yàn)任務(wù)1. 通過(guò)下述程序段的輸入和執(zhí)行來(lái)熟悉 Turbo Debugger的使用, 并通過(guò)顯示器屏幕觀察程序的執(zhí)行 情況。練習(xí)程序段如下:MOV BL , 08HMOV CL , BLMOV AX , 03FFHMOV BX , AXMOV DS :0020H, BX2.用以下程序段將一組數(shù)據(jù)壓入(PUSH 堆棧區(qū),然后通過(guò)不同的出棧順序出棧,觀

14、察出棧后數(shù) 據(jù)的變化情況。壓棧程序段如下:MOV AX , 0102HMOV BX , 0304HMOV CX , 0506HMOV DX , 0708HPUSH AXPUSH BXPUSH CXPUSH DX出棧程序段請(qǐng)自行編寫(xiě)(用不同的出棧順序 。3. 指出下列指令的錯(cuò)誤并加以改正,上機(jī)驗(yàn)證之。(1 MOV BX, SI(2 MOV AH , BX(3 MOV AX , SIDI(4 MOV BYTE PTRBX, 2000H (5 MOV CS , AX (6 MOV DS , 2000H4. 設(shè)置各寄存器及存儲(chǔ)單元的內(nèi)容如下: (BX=0010H , (SI=0001H(10010H=

15、12H , (10011H=34H , (10012H=56H , (10013H=78H (10120H=0ABH , (10121H=0CDH , (10122H=0EFH 說(shuō)明下列各條指令執(zhí)行完后 AX 寄存器中的內(nèi)容,并上機(jī)驗(yàn)證。(1 MOV AX , 1200H (2 MOV AX , BX (3 MOV AX , 0120H (4 MOV AX , BX (5 MOV AX , 0110HBX (6 MOV AX , BXSI (7 MOV AX , 0110HBXSI5. 將 DS :1000H 字節(jié)存儲(chǔ)單元中的內(nèi)容送到 DS :2020H 單元中存放。試分別用 8086的直接尋

16、址、 寄存器間接尋址、變址尋址、寄存器相對(duì)尋址傳送指令編寫(xiě)程序段,并上機(jī)驗(yàn)證結(jié)果。6. 設(shè) AX 寄存器中的內(nèi)容為 1111H , BX 寄存器中的內(nèi)容為 2222H , DS :0010H 單元中的內(nèi)容為 3333H 。 將 AX 寄存器中的內(nèi)容與 BX 寄存器中的內(nèi)容交換, 然后再將 BX 寄存器中的內(nèi)容與 DS :0010H 單元中的內(nèi)容進(jìn)行交換。試編寫(xiě)程序段,并上機(jī)驗(yàn)證結(jié)果。7. 設(shè) (DS=1000H , (ES=2000H ,有關(guān)存儲(chǔ)器的內(nèi)容如圖 1.5所示。要求將 DS 段的內(nèi)容傳送到 AX 寄存器, ES 段的內(nèi)容傳送到 BX 寄存器,試編寫(xiě)程序段。 圖 1.5 第 7題圖實(shí)驗(yàn)

17、二 算術(shù)邏輯運(yùn)算及移位操作DS :1000HES :2000H一、 實(shí)驗(yàn)?zāi)康?.熟悉算術(shù)邏輯運(yùn)算指令和移位指令的功能。2.了解標(biāo)志寄存器各標(biāo)志位的意義和指令執(zhí)行對(duì)它的影響。 二、 實(shí)驗(yàn)預(yù)習(xí)要求1.復(fù)習(xí) 8086指令系統(tǒng)中的算術(shù)邏輯類指令和移位指令。2.按照題目要求在實(shí)驗(yàn)前編寫(xiě)好實(shí)驗(yàn)中的程序段。三、 實(shí)驗(yàn)任務(wù)1. 實(shí)驗(yàn)程序段及結(jié)果表格如表 1. 2:表 1. 2 2. 用 BX 寄存器作為地址指針,從 BX 所指的內(nèi)存單元 (0010H開(kāi)始連續(xù)存入三個(gè)無(wú)符 號(hào)數(shù) (10H、 04H 、 30H ,接著計(jì)算內(nèi)存單元中的這三個(gè)數(shù)之和,和放在 0013H 單元中,再求 出這三個(gè)數(shù)之積,積放 0014單

18、元中。寫(xiě)出完成此功能的程序段并上機(jī)驗(yàn)證結(jié)果。MOV BX, 0010HMOV BYTE PTRBX, 10HMOV BYTE PTRBX+1, 04HMOV BYTE PTRBX+2, 30HMOV AL, 0HMOV AL, BXADD AL, BX+1ADD AL, BX+2MOV BYTE PTRBX+3, AL3.寫(xiě)出完成下述功能的程序段。上機(jī)驗(yàn)證你寫(xiě)出的程序段,程序運(yùn)行的最后結(jié)果 (AX=? 72(1 傳送 15H 到 AL 寄存器;(2 再將 AL 的內(nèi)容乘以 2;(3 接著傳送 15H 到 BL 寄存器;(4 最后把 AL 的內(nèi)容乘以 BL 的內(nèi)容。MOV AL, 15HMUL

19、2MOV BL, 15HMUL BL4.寫(xiě)出完成下述功能的程序段。上機(jī)驗(yàn)證你寫(xiě)出的程序段,程序運(yùn)行后的商=?(1 傳送數(shù)據(jù) 2058H 到 DS :1000H 單元中,數(shù)據(jù) 12H 到 DS :1002H 單元中;(2 把 DS :1000H 單元中的數(shù)據(jù)傳送到 AX 寄存器;(3 把 AX 寄存器的內(nèi)容算術(shù)右移二位;(4 再把 AX 寄存器的內(nèi)容除以 DS :1002H 字節(jié)單元中的數(shù);(5 最后把商存入字節(jié)單元 DS :1003H 中。5.下面的程序段用來(lái)清除數(shù)據(jù)段中從偏移地址 0010H 開(kāi)始的 12個(gè)字存儲(chǔ)單元的內(nèi)容(即將零送到 這些存儲(chǔ)單元中去 。(1 將第 4條比較指令語(yǔ)句填寫(xiě)完整

20、(劃線處 。MOV SI , 0010HNEXT : MOV WORD PTRSI, 0ADD SI , 2CMP SI ,JNE NEXTHLT(2 假定要按高地址到低地址的順序進(jìn)行清除操作 (高地址從 0020H 開(kāi)始 , 則上述程序段應(yīng)如何修 改?上機(jī)驗(yàn)證以上兩個(gè)程序段并檢查存儲(chǔ)單元的內(nèi)容是否按要求進(jìn)行了改變。6. 輸入并運(yùn)行表 1. 3中的程序段,把結(jié)果填入表右邊的空格中,并分析結(jié)果,說(shuō)明本程序段的功 能是什么。表 1. 3 實(shí)驗(yàn)三 串操作一、 實(shí)驗(yàn)?zāi)康?.熟悉串操作指令的功能。2.了解串操作指令的使用方法。二、 實(shí)驗(yàn)預(yù)習(xí)要求1.復(fù)習(xí) 8086指令系統(tǒng)中的串操作類指令。2.按照題目要求

21、在實(shí)驗(yàn)前編寫(xiě)好實(shí)驗(yàn)中的程序段。三、 實(shí)驗(yàn)任務(wù)1.輸入以下程序段并運(yùn)行之,回答后面的問(wèn)題。CLDMOV DI , 1000HMOV AX , 55AAHMOV CX , 10HREP STOSW上述程序段執(zhí)行后:(1 從 DS :1000H 開(kāi)始的 16個(gè)字單元的內(nèi)容是什么?(2 (DI = ?(CX = ?,并解釋其原因。2.在上題的基礎(chǔ)上,再輸入以下程序段并運(yùn)行之,回答后面的問(wèn)題。 MOV SI , 1000HMOV DI , 2000HMOV CX , 20HREP MOVSB程序段執(zhí)行后:(1 從 DS :2000H 開(kāi)始的 16個(gè)字單元的內(nèi)容是什么?(2 (SI = ?(DI = ?(

22、CX = ?,并分析之。3.在以上兩題的基礎(chǔ)上,再輸入以下三個(gè)程序段并依次運(yùn)行之。 程序段 1:MOV SI , 1000HMOV DI , 2000HMOV CX , 10HREPZ CMPSW程序段 1執(zhí)行后:(1 ZF=? 根據(jù) ZF 的狀態(tài),你認(rèn)為兩個(gè)串是否比較完了?(2(SI = ?(DI = ?(CX = ?,并分析之。程序段 2:MOV 2008H, 4455HMOV SI , 1000HMOV DI , 2000HMOV CX , 10HREPZ CMPSW程序段 2執(zhí)行后:(1 ZF=? 根據(jù) ZF 的狀態(tài),你認(rèn)為兩個(gè)串是否比較完了?(2(SI = ?(DI = ?(CX =

23、 ?,并分析之。程序段 3:MOV AX , 4455HMOV DI , 2000HMOV CX , 10HREPNZ SCASW程序段 3執(zhí)行后:(1 ZF=? 根據(jù) ZF 的狀態(tài),你認(rèn)為在串中是否找到了數(shù)據(jù) 4455H ?(2(SI = ?(DI = ?(CX = ?,并分析之。4.從 DS :1000H 開(kāi)始存放有一個(gè)字符串 ”This is a string” ,要求把這個(gè)字符串從后往前傳送到 DS :2000H 開(kāi)始的內(nèi)存區(qū)域中 (即傳送結(jié)束后, 從 DS :2000H 開(kāi)始的內(nèi)存單元的內(nèi)容為 ”gnirts a si sihT” , 試編寫(xiě)程序段并上機(jī)驗(yàn)證之。實(shí)驗(yàn)四 字符及字符串的

24、輸入和輸出一、 實(shí)驗(yàn)?zāi)康?.熟悉如何進(jìn)行字符及字符串的輸入輸出。2.掌握簡(jiǎn)單的 DOS 系統(tǒng)功能調(diào)用。二、 實(shí)驗(yàn)預(yù)習(xí)要求1.復(fù)習(xí)系統(tǒng)功能調(diào)用的 1、 2、 9、 10號(hào)功能。2.按照題目要求預(yù)先編寫(xiě)好實(shí)驗(yàn)中的程序段。三、 實(shí)驗(yàn)任務(wù)1.輸入以下程序段并用 F8鍵單步運(yùn)行,執(zhí)行 INT 21H指令時(shí),在鍵盤(pán)上按“ 5”鍵。MOV AH , 1INT 21H(1 運(yùn)行結(jié)束后, (AL =?它是哪一個(gè)鍵的 ASCII 碼?(2 重復(fù)運(yùn)行以上程序段,并分別用“ A ” 、 “ B ” 、 “ C ” 、 “ D ”鍵代替“ 5”鍵,觀察運(yùn)行結(jié)果有 何變化?2.在 DS :1000H 開(kāi)始的內(nèi)存區(qū)域設(shè)置如

25、下鍵盤(pán)緩沖區(qū):DS :1000H 5, 0, 0, 0, 0, 0, 0然后輸入以下程序段并用 F8鍵單步運(yùn)行, 執(zhí)行 INT 21H指令時(shí), 在鍵盤(pán)上鍵入 “ 5” 、 “ 4” 、 “ 3” 、 “ 2” 、 “ 1” 、 回車這六個(gè)鍵。LEA DX , 1000HMOV AH , 0AHINT 21H程序段運(yùn)行完后,檢查 DS :1000H 開(kāi)始的內(nèi)存區(qū)域:(1 DS:1001H 單元的內(nèi)容是什么?它表示了什么含義?(2 從 DS :1002H 開(kāi)始的內(nèi)存區(qū)域中的內(nèi)容是什么?其中是否有字符 “ 1” 的 ASCII 碼?為什么? 3.輸入以下程序段并運(yùn)行之。MOV DL , A MOV

26、AH , 2INT 21H(1觀察屏幕上的輸出,是否顯示了“ A ”字符?(2分別用“ #” 、 “ X ” 、 “ Y ” 、 “ $” 、 “ ? ”代替程序段中的“ A ”字符,觀察屏幕上的輸出有何變 化。(3分別用 0DH 、 0AH 代替程序段中的“ A ”字符,觀察屏幕上的輸出有何變化。(4用 07H 代替程序段中的 “ A ” 字符, 觀察屏幕上有無(wú)輸出?計(jì)算機(jī)內(nèi)的揚(yáng)聲器是否發(fā)出 “嗶” 的聲音?4.要在屏幕上顯示一個(gè)字符串“ Hello, world ” ,寫(xiě)出該字符串變量的定義語(yǔ)句和顯示這個(gè)字符串的 程序段。上機(jī)驗(yàn)證之。5.按 6行×16列的格式順序顯示 ASCII

27、 碼為 20H 到 7FH 之間的所有字符, 即每 16個(gè)字符為一行, 共 6行。每行中相鄰的兩個(gè)字符之間用空格字符分隔開(kāi)。試編寫(xiě)程序段并上機(jī)運(yùn)行驗(yàn)證。提示:程序段 包括兩層循環(huán),內(nèi)循環(huán)次數(shù)為 16,每次內(nèi)循環(huán)顯示一個(gè)字符和一個(gè)空格字符;外循環(huán)次數(shù)為 6,每個(gè)外 循環(huán)顯示一行字符并顯示一個(gè)回車符(0DH 和一個(gè)換行符(0AH 。實(shí)驗(yàn)五 直線程序設(shè)計(jì)一、 實(shí)驗(yàn)?zāi)康?、學(xué)習(xí) 8086匯編語(yǔ)言程序的基本結(jié)構(gòu)和程序設(shè)計(jì)的基本方法。2、熟悉在 PC 機(jī)上建立、匯編、鏈接、調(diào)試和運(yùn)行 8086匯編語(yǔ)言程序的全過(guò)程。二、 實(shí)驗(yàn)預(yù)習(xí)要求1、 認(rèn)真閱讀預(yù)備知識(shí)中匯編語(yǔ)言的上機(jī)步驟的說(shuō)明, 熟悉匯編程序的建立、

28、匯編、 連接、 執(zhí)行、 調(diào)試的全過(guò)程。2、 復(fù)習(xí) BCD 碼運(yùn)算的調(diào)整指令。3、根據(jù)本實(shí)驗(yàn)的編程提示和程序框架預(yù)先編寫(xiě)匯編語(yǔ)言源程序。4、有興趣的同學(xué)請(qǐng)自行編寫(xiě)出后面的實(shí)驗(yàn)習(xí)題。三、 直線程序簡(jiǎn)介直線程序是控制流僅有一個(gè)走向的程序,它主要用于解決一些無(wú)需進(jìn)行判斷分支,也無(wú)需循環(huán)簡(jiǎn)單 的簡(jiǎn)單問(wèn)題。四、 實(shí)驗(yàn)內(nèi)容設(shè) a 、 b 、 c 、 d 四個(gè)數(shù)分別以壓縮的 BCD 碼形式存放在內(nèi)存 NUM 開(kāi)始的四個(gè)單元, 計(jì)算 (a+b-(c+d, 然后把結(jié)果顯示在屏幕上。改變 a , b , c , d 內(nèi)容,然后重新匯編、連接并運(yùn)行程序,檢查其結(jié)果與手工計(jì)算是否相符。下面是 幾組實(shí)驗(yàn)用的數(shù)據(jù):1、 a

29、 =09, b =16, c =04, d =172、 a =38, b =41, c =29, d =343、 a =70, b =23, c =42, d =414、 a =63, b =73, c =62, d =50五、 調(diào)試提示源程序編制完后,先靜態(tài)檢查,無(wú)誤后,對(duì)源程序進(jìn)行匯編連接,生成可執(zhí)行文件。先將程序在 DOS 下運(yùn)行,如正確,則改變 a , b , c , d 的值反復(fù)驗(yàn)證,如不正確,則將程序調(diào)入 TD 中進(jìn)行調(diào)試。六、 實(shí)驗(yàn)習(xí)題若改變 a, b, c, d的值如下:1、 a =90, b =34, c =33, d =442、 a =12, b =19, c =25, d

30、 =33觀察結(jié)果,改進(jìn)程序使結(jié)果正確。實(shí)驗(yàn)六 分支及循環(huán)程序設(shè)計(jì)一、 實(shí)驗(yàn)?zāi)康?、學(xué)習(xí)提示信息的顯示及鍵盤(pán)輸入字符的方法。2、掌握分支程序和循環(huán)程序的設(shè)計(jì)方法。二、 實(shí)驗(yàn)預(yù)習(xí)要求1、復(fù)習(xí)比較指令、轉(zhuǎn)移指令、循環(huán)指令的用法。2、根據(jù)編程提示,編出匯編語(yǔ)言源程序。3、有興趣的同學(xué)請(qǐng)編寫(xiě)出實(shí)驗(yàn)習(xí)題中的程序。三、 分支程序和循環(huán)程序簡(jiǎn)介1、 分支程序是根據(jù)不同條件執(zhí)行不同處理過(guò)程的程序。 分支程序的結(jié)構(gòu)有兩種:種是二分支, 種是多分支。它們的共同特點(diǎn)是在滿足某一條件時(shí),將執(zhí)行多個(gè)分支中的某分支。2、 循環(huán)程序四、 實(shí)驗(yàn)內(nèi)容在屏幕上顯示提示信息“ Please input 10 numbers:” ,提

31、示用戶輸入 10個(gè)數(shù)(數(shù)的范圍在 099之間 , 然后從鍵盤(pán)上讀入這 10個(gè)數(shù)。 接著對(duì)這 10個(gè)數(shù)從小到大進(jìn)行排序, 并統(tǒng)計(jì) 059、 6079、 80 99的數(shù)各有多少。最后在屏幕上顯示排序后的數(shù)(每個(gè)數(shù)之間用逗號(hào)分隔并顯示統(tǒng)計(jì)的結(jié)果。 顯示格 式如下:Sorted numbers: xx,xx,xx,xx,xx,xx,xx,xx,xx,xx0-59: xx60-79: xx80-99: xx五、 實(shí)驗(yàn)習(xí)題1. 從鍵盤(pán)輸入任意一個(gè)字符串,統(tǒng)計(jì)其中不同字符出現(xiàn)的次數(shù)(不分大小寫(xiě) ,并把結(jié)果顯示在屏 幕上。2. 從鍵盤(pán)分別輸入兩個(gè)字符串,若第二個(gè)字符串包含在第一個(gè)字符串中則顯示 MATCH ,

32、否則顯 示 NO MATCH 。TD.EXE 簡(jiǎn)要使用說(shuō)明TD . EXE (簡(jiǎn)稱 TD 是一個(gè)具有窗口界面的程序調(diào)試器。利用 TD ,用戶能夠調(diào)試已有的可執(zhí)行程序(后綴為 EXE ; 用戶也可以在 TD 中直接輸入程序指令,編寫(xiě)簡(jiǎn)單的程序(在這種情況下,用戶每輸入一條指令, TD 就立即將輸入的指令匯編成機(jī)器指令代碼 。作為入門(mén)指導(dǎo),下面簡(jiǎn)單介紹一下 TD 的使用方法,更詳細(xì)深入的使用說(shuō)明請(qǐng)參考相關(guān)資料。一、如何啟動(dòng) TD二、 TD 中的數(shù)制三、 TD 的用戶界面四、代碼區(qū)的操作五、寄存器區(qū)和標(biāo)志區(qū)的操作六、數(shù)據(jù)區(qū)的操作七、堆棧區(qū)的操作一、如何啟動(dòng) TD1. 在 DOS 窗口中啟動(dòng) TD僅啟

33、動(dòng) TD 而不載入要調(diào)試的程序轉(zhuǎn)到 TD.EXE 所在目錄(假定為 C:ASM ,在 DOS 提示符下鍵入以下命令(用戶只需輸入帶下劃線的部分,表示 回車鍵,下同 :C:ASM>TD 用這種方法啟動(dòng) TD , TD 會(huì)顯示一個(gè)版權(quán)對(duì)話框,這時(shí)按回車鍵即可關(guān)掉該對(duì)話框。啟動(dòng) TD 并同時(shí)載入要調(diào)試的程序轉(zhuǎn)到 TD.EXE 所在目錄,在 DOS 提示符下鍵入以下命令(假定要調(diào)試的程序名為 HELLO.EXE :C:ASM>TD HELLO.EXE 若建立可執(zhí)行文件時(shí)未生成符號(hào)名表, TD 啟動(dòng)后會(huì)顯示“ Program has no symbol table”的提示窗口,這時(shí)按回車鍵

34、即可關(guān)掉該窗口。2. 在 Windows 中啟動(dòng) TD僅啟動(dòng) TD 而不載入要調(diào)試的程序雙擊 TD.EXE 文件名, Windows 就會(huì)打開(kāi)一個(gè) DOS 窗口并啟動(dòng) TD 。啟動(dòng) TD 后會(huì)顯示一個(gè)版權(quán)對(duì)話框,這時(shí)按回 車鍵即可關(guān)掉該對(duì)話框。啟動(dòng) TD 并同時(shí)載入要調(diào)試的程序把要調(diào)試的可執(zhí)行文件拖到 TD.EXE 文件名上, Windows 就會(huì)打開(kāi)一個(gè) DOS 窗口并啟動(dòng) TD , 然后 TD 會(huì)把該可執(zhí)行 文件自動(dòng)載入內(nèi)存供用戶調(diào)試。若建立可執(zhí)行文件時(shí)未生成符號(hào)名表, TD 啟動(dòng)后會(huì)顯示“ Program has no symbol table”的提示窗口,這時(shí)按回車 鍵即可關(guān)掉該窗口。

35、二、 TD 中的數(shù)制TD 支持各種進(jìn)位記數(shù)制,但通常情況下屏幕上顯示的機(jī)器指令碼、內(nèi)存地址及內(nèi)容、寄存器的內(nèi)容等均按十六進(jìn)制 顯示(數(shù)值后省略“ H ” 。在 TD的很多操作中,需要用戶輸入一些數(shù)據(jù)、地址等,在輸入時(shí)應(yīng)遵循計(jì)算機(jī)中數(shù)的記數(shù)制標(biāo)識(shí)規(guī)范。例如: 二進(jìn)制數(shù)后面加“ B ”或“ b ” ,如 10010001b 等; 十六進(jìn)制數(shù)后面加“ H ”或“ h ” ,如 38h 、 0a5h 、 0ffh 等。如果在輸入的數(shù)后面沒(méi)有用記數(shù)制標(biāo)識(shí)字母來(lái)標(biāo)識(shí)其記數(shù)制, TD 默認(rèn)該數(shù)為十六進(jìn)制數(shù)。但應(yīng)注意,如果十六進(jìn)制數(shù) 的第一個(gè)數(shù)字為“ a ”“ f ” ,則前面應(yīng)加 0,以區(qū)別于符號(hào)和名字。T

36、D 允許在常數(shù)前面加上正負(fù)號(hào)。例如,十進(jìn)制數(shù)的 -12可以輸入為 -12d ,十六進(jìn)制數(shù)的 -5a 可以輸入為 -5ah , TD 自動(dòng) 會(huì)把輸入的帶正負(fù)號(hào)的數(shù)轉(zhuǎn)換為十六進(jìn)制補(bǔ)碼數(shù)。只有一個(gè)例外,當(dāng)數(shù)據(jù)區(qū)的顯示格式為字節(jié),若要修改存儲(chǔ)單元的內(nèi)容則不允許用帶有正負(fù)號(hào)的數(shù),而只 能按手工轉(zhuǎn)換成補(bǔ)碼后再輸入。本實(shí)驗(yàn)指導(dǎo)書(shū)中所有的實(shí)驗(yàn)在輸入程序或數(shù)據(jù)時(shí),若沒(méi)有特別說(shuō)明,都可按十六進(jìn)制數(shù)進(jìn)行輸入,若程序中需要輸入 負(fù)數(shù),可按上述規(guī)則進(jìn)行輸入。三、 TD 的用戶界面1. CPU 窗口TD 啟動(dòng)后呈現(xiàn)的是一個(gè)具有窗口形式的用戶界面,見(jiàn)圖 B.1,它稱為 CPU 窗口。 CPU 窗口顯示了 CPU 和內(nèi)存的整

37、 個(gè)狀態(tài)。利用 CPU 窗口可以:在代碼區(qū)內(nèi)使用嵌入?yún)R編,輸入指令或?qū)Τ绦蜻M(jìn)行臨時(shí)性修改。 存取數(shù)據(jù)區(qū)中任何數(shù)據(jù)結(jié)構(gòu)下的字節(jié),并以多種格式顯示或改變它們。檢查和改變寄存器(包括標(biāo)志寄存器的內(nèi)容。 圖 B.1 TD 的 CPU 窗口界面代碼區(qū)數(shù)據(jù)區(qū)寄存器區(qū)堆棧區(qū) 標(biāo)志區(qū)功能鍵提示條全局菜單CPU 窗口分為五個(gè)區(qū)域:代碼區(qū)、寄存器區(qū)、標(biāo)志區(qū)、數(shù)據(jù)區(qū)和堆棧區(qū)。在五個(gè)區(qū)域中,光標(biāo)所在區(qū)域稱為當(dāng)前區(qū)域,用戶可以使用 Tab 鍵或 Shift-Tab 鍵切換當(dāng)前區(qū)域,也可以在相應(yīng)區(qū)中單 擊鼠標(biāo)左鍵選中某區(qū)為當(dāng)前區(qū)。光標(biāo)在各個(gè)區(qū)域中顯示形式稍有不同,在代碼區(qū)、寄存器區(qū)、標(biāo)志區(qū)和堆棧區(qū)呈現(xiàn)為一個(gè)反白條,在存儲(chǔ)

38、器 區(qū)為下劃線形狀。在圖 B.1中, CPU 窗口上邊框的左邊顯示的是處理器的類型 (8086、 80286、 80386、 80486等,對(duì)于 80486以上的 CPU 均顯示為 80486 。上邊框的中間靠右處顯示了當(dāng)前指令所訪問(wèn)的內(nèi)存單元的地址及內(nèi)容。再往右的“ 1”表示此 CPU 窗口是第一個(gè) CPU 窗口, TD 允許同時(shí)打開(kāi)多個(gè) CPU 窗口。CPU 窗口中的代碼區(qū)用于顯示指令地址、指令的機(jī)器代碼以及相應(yīng)的匯編指令;寄存器區(qū)用于顯示 CPU 寄存器當(dāng) 前的內(nèi)容;標(biāo)志區(qū)用于顯示 CPU的 8個(gè)標(biāo)志位當(dāng)前的狀態(tài); 數(shù)據(jù)區(qū)用于顯示用戶指定的一塊內(nèi)存區(qū)的數(shù)據(jù) (十六進(jìn)制 ; 堆棧區(qū)用于顯示

39、堆棧當(dāng)前的內(nèi)容。 在代碼區(qū)和堆棧區(qū)分別顯示有一個(gè)特殊標(biāo)志( ,稱為箭標(biāo)。代碼區(qū)中的箭標(biāo)指示出當(dāng)前程序指令的位置(CS :IP , 堆棧區(qū)中的箭標(biāo)指示出當(dāng)前堆棧指針位置(SS :SP 。2. 全局菜單介紹CPU 窗口的上面為 TD 的全局菜單條,可用“ A L T 鍵 +菜單項(xiàng)首字符”打開(kāi)菜單項(xiàng)對(duì)應(yīng)的下拉子菜單。在子菜單中用 “” 、 “”鍵選擇所需的功能,按回車鍵即可執(zhí)行選擇的功能。為簡(jiǎn)化操作,某些常用的子菜單項(xiàng)后標(biāo)出了對(duì)應(yīng)的快捷鍵。下面簡(jiǎn)單介紹一下常 用的菜單命令,詳細(xì)的說(shuō)明情查閱相關(guān)資料。(1 File 菜單:文件操作Open 載入可執(zhí)行程序文件準(zhǔn)備調(diào)試Change dir改變當(dāng)前目錄Ge

40、t info顯示被調(diào)試程序的信息DOS shell執(zhí)行 DOS 命令解釋器(用 EXIT 命令退回到 TD Quit 退出 TD (Alt-X (2Copy 復(fù)制當(dāng)前光標(biāo)所在內(nèi)存單元的內(nèi)容到粘貼板(Shift-F3Paste 把粘貼板的內(nèi)容粘貼到當(dāng)前光標(biāo)所在內(nèi)存單元(Shift-F4(3Breakpoints 斷點(diǎn)信息Stack 堆棧段內(nèi)容Watches 被監(jiān)視對(duì)象信息Variables 變量信息Module 模塊信息File 文件內(nèi)容CPU 打開(kāi)一個(gè)新的 CPU 窗口Dump 數(shù)據(jù)段內(nèi)容Registers 寄存器內(nèi)容(4Run 從 CS:IP開(kāi)始運(yùn)行程序直到程序結(jié)束 (F9Go to cur

41、sor從 CS:IP開(kāi)始運(yùn)行程序到光標(biāo)處 (F4Trace into單步跟蹤執(zhí)行(對(duì) CALL 指令將跟蹤進(jìn)入子程序 (F7Step over單步跟蹤執(zhí)行 (對(duì) CALL 指令將執(zhí)行完子程序才停下 (F8Execute to執(zhí)行到指定位置 (Alt-F9Until return執(zhí)行當(dāng)前子程序直到退出 (Alt-F8(5Toggle 在當(dāng)前光標(biāo)處設(shè)置 /清除斷點(diǎn) (F2At 在指定地址處設(shè)置斷點(diǎn)(Alt-F2Delete all清除所有斷點(diǎn)(6Inspector 打開(kāi)觀察器以查看指定的變量或表達(dá)式Evaluate/Modify計(jì)算和顯示表達(dá)式的值A(chǔ)dd watch增加一個(gè)新的表達(dá)式到觀察器窗口(

42、7Display options 設(shè)置屏幕顯示的外觀Path for source指定源文件查找目錄Save options保存當(dāng)前選項(xiàng)(8Zoom 放大 /還原當(dāng)前窗口(F5Next 轉(zhuǎn)到下一窗口(F6Next Pane轉(zhuǎn)到當(dāng)前窗口的下一區(qū)域(Tab Size/Move改變窗口大小 /移動(dòng)窗口(Ctrl-F5Close 關(guān)閉當(dāng)前窗口(Alt-F3User screen查看用戶程序的顯示(Alt-F53. 功能鍵提示條菜單中的很多命令都可以使用功能鍵來(lái)簡(jiǎn)化操作。 功能鍵分為三組:F1F10功能鍵, Alt-F1Alt-F10功能鍵以及 Ctrl 功能鍵(Ctrl 功能鍵實(shí)際上就是代碼區(qū)的局部菜

43、單 。 CPU 窗口下面的提示條中顯示了這三組功能鍵對(duì)應(yīng)的功能。通常情況下提示條中顯示的是 F1F10功能鍵的功能。按住 Alt 不放,提示條中將顯示 Alt-F1Alt-F10功能鍵的功能。 按住 Ctrl 不放, 提示條中將顯示各 Ctrl 功能鍵的功能。表 B.1列出了各功能鍵對(duì)應(yīng)的功能。表 B. 1 局部菜單TD 的 CPU 窗口中,每個(gè)區(qū)域都有一個(gè)局部菜單,局部菜單提供了對(duì)本區(qū)域進(jìn)行操作的各個(gè)命令。在當(dāng)前區(qū)域中按 Alt-F10鍵即可激活本區(qū)域的局部菜單。代碼區(qū)、數(shù)據(jù)區(qū)、堆棧區(qū)和寄存器區(qū)的局部菜單見(jiàn)圖 B.2圖 B.5所示。標(biāo)志區(qū)的局部菜單非常簡(jiǎn)單,故沒(méi) 有再給出其圖示。對(duì)局部菜單中

44、各個(gè)命令的解釋將在下面幾節(jié)中分別進(jìn)行說(shuō)明。圖 B.2 代碼區(qū)的局部菜單圖 B.3 數(shù)據(jù)區(qū)的局部菜單圖 B.4 堆棧區(qū)的局部菜單圖 B.5 寄存器區(qū)的局部菜單四、代碼區(qū)的操作代碼區(qū)用來(lái)顯示代碼(程序的地址、代碼的機(jī)器指令和代碼的反匯編指令。本區(qū)中顯示的反匯編指令依賴于所指定 的程序起始地址。 TD 自動(dòng)反匯編代碼區(qū)的機(jī)器代碼并顯示對(duì)應(yīng)的匯編指令。每條反匯編指令的最左端是其地址, 如果段地址與 CS 段寄存器的內(nèi)容相同, 則只顯示字母 “ CS ” 和偏移量 (CS:YYYY , 否則顯示完整的十六進(jìn)制的段地址和偏移地址(XXXX:YYYY 。地址與反匯編指令之間顯示的是指令的機(jī)器碼。如果代碼區(qū)當(dāng)

45、前光標(biāo)所在指令引 用了一個(gè)內(nèi)存單元地址,則該內(nèi)存單元地址和內(nèi)存單元的當(dāng)前內(nèi)容顯示在 CPU 窗口頂部邊框的右部,這樣不僅可以看到指令操作碼,還可看到 指令要訪問(wèn)的內(nèi)存單元的內(nèi)容。1. 輸入并匯編一條指令有時(shí)我們需要在代碼區(qū)臨時(shí)輸入一些指令。 TD 提供了即時(shí)匯編功能,允許用戶在 TD 中直接輸入指令 (但直接輸入的 指令都是臨時(shí)性的,不能保存到磁盤(pán)上 。直接輸入指令的步驟如下:(1 使用方向鍵把光標(biāo)移到期望的地址處。(2 打開(kāi)指令編輯窗口。有兩種方法:一是直接輸入?yún)R編指令,在輸入?yún)R編指令的同時(shí)屏幕上就會(huì)自動(dòng)彈出指令的 臨時(shí)編輯窗口。二是激活代碼 (3 區(qū)局部菜單(見(jiàn)下一小節(jié) ,選擇其中的匯編命

46、令,屏幕上也會(huì)自動(dòng)彈出指令的臨時(shí)編輯窗口。(4 在臨時(shí)編輯窗口中輸入 /編輯指令,每輸入完一條指令,按回車,輸入的指令即可出現(xiàn)在光標(biāo)處,同時(shí)光標(biāo)自動(dòng) 下移一行,以便輸入下一條指(5 令。注意,臨時(shí)編輯窗口中曾經(jīng)輸入過(guò)的指令均可重復(fù)使用,只要在臨時(shí)編輯窗口中用方向鍵把光標(biāo)定位到所 需的指令處,按回車即可。如果臨時(shí)編輯(6 窗口中沒(méi)有完全相同的指令,但只要有相似的指令,就可對(duì)其進(jìn)行編輯后重復(fù)使用。2. 代碼區(qū)局部菜單當(dāng)代碼區(qū)為當(dāng)前區(qū)域時(shí)(若代碼區(qū)不是當(dāng)前區(qū)域,可連續(xù)按 Tab 或 Shift-Tab 鍵使代碼區(qū)成為當(dāng)前區(qū)域 ,按 A lt-F10組合鍵即可激活代碼區(qū)局部菜單,代碼區(qū)局部菜單的外觀見(jiàn)

47、圖 B.2。下面介紹一下各菜單項(xiàng)的功能。Goto (轉(zhuǎn)到指定位置此命令可在代碼區(qū)顯示任意指定地址開(kāi)始的指令序列。用戶可以鍵入當(dāng)前被調(diào)試程序以外的地址以檢查 ROM 、 BIOS 、 DOS 及其它駐留程序。此命令要求用戶提供要顯示的代碼起始地址。使用 Previous 命令可以恢復(fù)到本命令使用前的代碼區(qū)位置。Origin (回到起始位置從 CS:IP指向的程序位置開(kāi)始顯示。在移動(dòng)光標(biāo)使屏幕滾動(dòng)后想返回起始位置時(shí)可使用此命令。使用 Previous 命令可 恢復(fù)到本命令使用前的代碼區(qū)位置。Follow (追蹤指令轉(zhuǎn)移位置從當(dāng)前指令所要轉(zhuǎn)向的目的地址處開(kāi)始顯示。 使用本命令后, 整個(gè)代碼區(qū)從新地址

48、處開(kāi)始顯示。 對(duì)于條件轉(zhuǎn)移指令 (JE 、 JNZ 、 LOOP 、 JCXZ 等 ,無(wú)論條件滿足與否,都能追蹤到其目的地址。也可以對(duì) CA LL 、 JMP 及 INT 指令進(jìn)行追蹤。使用 Previous 命令可恢復(fù)到本 命令使用前的代碼區(qū)位置。Caller (轉(zhuǎn)到調(diào)用者從調(diào)用當(dāng)前子程序的 CA LL 指令處開(kāi)始顯示。本命令用于找出當(dāng)前顯示的子程序在何處被調(diào)用。使用 Previous 命令可 恢復(fù)到本命令使用前的代碼區(qū)位置。Previous (返回到前一次顯示位置如果上一條命令改變了顯示地址,本命令能恢復(fù)上一條命令被使用前的顯示地址。注意光標(biāo)鍵、 PgUp 、 PgDn 不會(huì)改 變顯示地址

49、。若重復(fù)使用本命令,則在當(dāng)前顯示地址和前一次顯示地址之間切換。Search (搜索本命令用于搜索指令或字節(jié)列表。注意,本命令只能搜索那些不改變內(nèi)存內(nèi)容的指令,如:PUSH DXPOP DI+4ADD AX , 100若搜索以下指令可能會(huì)產(chǎn)生意想不到的結(jié)果:JE 123CA LL MYFUNCLOOP 100View Source(查看源代碼本命令打開(kāi)源模塊窗口,顯示與當(dāng)前反匯編指令相應(yīng)的源代碼。如果代碼區(qū)的指令序列沒(méi)有源程序代碼,則本命令不 起作用。 Mixed (混合本命令用于選擇指令與代碼的顯示方式,有三個(gè)選擇:No 只顯示反匯編指令,不顯示源代碼行。Y es 如當(dāng)前模塊為高級(jí)語(yǔ)言源模塊,

50、應(yīng)使用此選擇。源代碼行被顯示在第一條反匯編指令之前。Both 如當(dāng)前模塊為匯編語(yǔ)言源模塊,應(yīng)使用此選擇。在有源代碼行的地方就顯示該源代碼行,否則顯示匯編指令。New CS:IP(設(shè)置 CS:IP為當(dāng)前指令行的地址 本命令把 CS:IP設(shè)置為當(dāng)前指令所在的地址, 以便使程序從當(dāng)前指令處開(kāi)始執(zhí)行。 用這種方法可以執(zhí)行任意一段 指令序列,或者跳過(guò)那些不希望執(zhí)行的程序段。注意,不要使用本命令把 CS:IP設(shè)置為當(dāng)前子程序以外的地址,否則有可能引起整個(gè)程序崩潰。 Assemble (即時(shí)匯編本命令可即時(shí)匯編一條指令,以代替當(dāng)前行的那條指令。注意,若新匯編的指令與當(dāng)前行的指令長(zhǎng)度不同,其后面機(jī) 器代碼的反

51、匯編顯示會(huì)發(fā)生變化。也可以直接在當(dāng)前行處輸入一條匯編指令來(lái)激活此命令。 I/O(輸入 /輸出本命令用于對(duì) I/O端口進(jìn)行讀寫(xiě)。選擇此命令后,會(huì)再?gòu)棾鱿乱患?jí)子菜單,如圖 B.6所示。子菜單中的命令解釋如下:In byte(輸入字節(jié)用于從 I/O端口輸入一個(gè)字節(jié)。用戶需提供端口地址。Out byte(輸出字節(jié)用于往 I/O端口輸出一個(gè)字節(jié)。用戶需提供端口地址。Read word(輸入字用于從 I/O端口輸入一個(gè)字。用戶需提供端口地址。Write word(輸出字用于往 I/O端口輸出一個(gè)字。用戶需提供端口地址。 圖 B.6 輸入 /輸出子菜單五、寄存器區(qū)和標(biāo)志區(qū)的操作列出了各標(biāo)志位在該區(qū)的縮寫(xiě)字母

52、。表 B. 2 1. 寄存器區(qū)局部菜單當(dāng)寄存器區(qū)為當(dāng)前區(qū)域時(shí) (若寄存器區(qū)不是當(dāng)前區(qū)域, 可連續(xù)按 Tab 或 Shift-Tab 鍵使寄存器區(qū)成為當(dāng)前區(qū)域 , 按 Alt-F10組合鍵即可激活寄存器區(qū)局部菜單,寄存器區(qū)局部菜單的外觀見(jiàn)圖 B.5。以下是各菜單項(xiàng)的功能。Increment (加 1本命令用于把當(dāng)前寄存器的內(nèi)容加 1。Decrement (減 1本命令用于把當(dāng)前寄存器的內(nèi)容減 1。Zero (清零本命令用于把當(dāng)前寄存器的內(nèi)容清零。Change (修改本命令用于修改當(dāng)前寄存器的內(nèi)容。選擇此命令后,屏幕上會(huì)彈出一個(gè)輸入框,在輸入框中鍵入新的值,然后回車, 這個(gè)新的值就會(huì)取代原來(lái)該寄存

53、器的內(nèi)容。修改寄存器的內(nèi)容還有一個(gè)更簡(jiǎn)單的變通方法,即把光標(biāo)移到所需的寄存器上,然后直接鍵入新的值。Register 32-bit(32位寄存器按 32位格式顯示 CPU 寄存器的內(nèi)容(缺省為 16位格式 。在 286以下的 CPU 或?qū)嵎绞綍r(shí)只需使用 16位顯示格式即 可。2. 修改標(biāo)志位的內(nèi)容用局部菜單的命令修改標(biāo)志位的內(nèi)容比較繁瑣。實(shí)際上只要把光標(biāo)定位到要修改的標(biāo)志位上按回車鍵或空格鍵即可使 標(biāo)志位的值在 0、 1之間變化。六、數(shù)據(jù)區(qū)的操作數(shù)據(jù)區(qū)顯示了從指定地址開(kāi)始的內(nèi)存單元的內(nèi)容。每行左邊按十六進(jìn)制顯示段地址和偏移地址(XXXX:YYYY 。若段地 址與當(dāng)前 DS 寄存器內(nèi)容相同,則顯

54、示“ DS ”和偏移量(DS:YYYY 。地址的右邊根據(jù)“ Display as”局部菜單命令所設(shè)置的格式顯示一個(gè)或多個(gè)數(shù) 據(jù)項(xiàng)。對(duì)字節(jié)(Byte 格式,每行顯示 8個(gè)字節(jié);對(duì)字格式(Word ,每行顯示 4個(gè)字;對(duì)浮點(diǎn)格式(Comp 、 Float 、 Real 、 Double 、 Extended , 每行顯示 1個(gè)浮點(diǎn)數(shù);對(duì)長(zhǎng)字格式(Long ,每行顯示 2個(gè)長(zhǎng)字。當(dāng)以字節(jié)方式顯示數(shù)據(jù)時(shí),每行的最右邊顯示相應(yīng)的 ASCII 字符, TD 能顯示所有字節(jié)值所對(duì)應(yīng)的 ASCII 字符。 1.顯示 /修改數(shù)據(jù)區(qū)的內(nèi)容在默認(rèn)的情況下, TD 在數(shù)據(jù)區(qū)顯示從當(dāng)前指令所訪問(wèn)的內(nèi)存地址開(kāi)始的存儲(chǔ)區(qū)域

55、內(nèi)容。但用戶也可用局部菜單中的 “ Goto ”命令顯示任意指定地址開(kāi)始的內(nèi)存區(qū)域的內(nèi)容。 TD 還提供了讓用戶修改存儲(chǔ)單元內(nèi)容的功能,用戶可以很方便地把任意一個(gè)內(nèi)存單元的內(nèi)容 修改成所期望的值。但要注意,若修改了系統(tǒng)使用的內(nèi)存區(qū)域,將會(huì)產(chǎn)生不可預(yù)料的結(jié)果,甚至?xí)?dǎo)致系統(tǒng)崩潰。修改內(nèi)存單元內(nèi)容的步驟如下: (1 使用局部菜單中的“ Goto ”命令并結(jié)合使用方向鍵把光標(biāo)移到期望的地址單元處(注意數(shù)據(jù)區(qū)的光標(biāo)是一個(gè)下 劃線 。(2 打開(kāi)數(shù)據(jù)編輯窗口。有兩種方法:(3 方法 1:直接輸入數(shù)據(jù),在輸入數(shù)據(jù)的同時(shí)屏幕上就會(huì)自動(dòng)彈出數(shù)據(jù)編輯窗口。(4 方法 2:激活數(shù)據(jù)區(qū)局部菜單(見(jiàn)下一小節(jié) ,選擇其中的“ Change ”命令,屏幕上也會(huì)彈出數(shù)據(jù)編輯窗 口。(5 在數(shù)據(jù)編輯窗口中輸入所需的數(shù)據(jù),輸入完后,按回車,輸入的數(shù)據(jù)就會(huì)替代光標(biāo)處的原始數(shù)據(jù)。注意,數(shù)據(jù) 編輯窗口中曾經(jīng)輸入過(guò)的數(shù)據(jù)均可(6 重復(fù)使用,只要在數(shù)據(jù)編輯窗口中用方向鍵把光標(biāo)定位到所需的數(shù)據(jù)處,按回車即可。當(dāng)數(shù)據(jù)區(qū)為

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論