资源描述
Soft-ICE 使用介紹(一)
(一)序言
1.1 產品簡介
Soft-ICE 是個為 PC-DOS 和 MS-DOS 程式除錯者題供有硬體除錯能力的除錯工具軟體。Soft-ICE 使用 80386 的保護模式在虛擬的機器上執行 DOS 。這使得 Soft-ICE對 DOS 有完全的控制能力。Soft-ICE 使用像 paging 、I/O privilege level 及 break point registers 等 80386 保護模式下的功能來增加原本 DOS debug 的硬體層次中斷能力。
Soft-ICE 設計時有三個目標:
1.讓 80386 的虛擬機器具有原本只以軟體除錯不可能完成或很花時間的除錯功能。(像:真實時間的硬體中斷、記憶體保護、由當掉的程式中跳出。
2.和現有的除錯程式一起使用。我們想要提供一個能和現有的除錯程式一起使用的工具。你不必再去學習一種新的除錯程式就能得到其強大的硬體除錯功能。
3.要完全一個對使用者具親和力的程式。視窗可以馬上被叫出使用而不會成為阻礙。Soft-ICE 的所有指令被設計成可以放在小視窗中。如此一來,螢幕上在 Soft-ICE 後面的訊息仍然可見。動態的線上輔助為偶爾使用 Soft-ICE 的人提供援助。
Soft-ICE 的功能:
* 真實時間下對記憶體讀寫、埠的存取、記憶體範圍及中斷呼叫設中斷點。
* back trace history ranges
* 符號及原始程式層次的除錯。
* 可和現有除錯程式共用的環境。
* 完全支援 EMM 4.0 。
* backfilling to raise base memory past 640K for monochrome system
* 隨時可以叫出的視窗。
* 即使中斷失效了仍然可以由鍵盤啟動。
* 程式碼被 80386 保護模式隔絕。這是為了防止 Soft-ICE 被其它程式修改或破壞。即使 DOS 掛了,Soft-ICE 仍然可以工作。
* 如果系統有超過 640K 的記憶體,Soft-ICE 可以設定成完全不佔主記憶體。
* 具親和力的動態輔助。
* 可當作獨立的除錯程式來用。如果你想做對於像設備驅動程式、中斷處理及啟動順序等傳統除錯器無法完成的除錯,這項功能是很有用的。另外,如果你遇到 re-entrancy 的問題時,這項功能也是很有用的。
* 具有自我啟動的能力,因此可以在非 DOS 系統或對可自我啟動的程式進行除錯。
* 載入非常的容易。不用調 DIP ,不用設 I/O 埠,也不用怕記憶體位址的衝突。
〔註〕Soft-ICE 只能處理真實模式下定址的程式。它不能處理使用 80286 或80386 保護模式的程式。
1.2 如何使用本手冊
Soft-ICE 的使用手冊分為下列四節:
第一節 --- 學習使用Soft-ICE
第二節 --- 指令
第三節 --- 提供的功能
第四節 --- 更進一步的主題
當讀完第一節 "學習使用 Soft-ICE" 和一個小範例後,Soft-ICE 可以用來解決大部份的除錯問題。Soft-ICE 具親和力的線上輔助可以用來查尋指令的解說和語法
l "學習使用 Soft-ICE " 這一節包括教你如何安裝 Soft-ICE,使用者介面的解說和一個指導課程。這課程是用來教你認識並很快使用 Soft-ICE 。
l "指令" 一節解說 Soft-ICE 的所有指令。指令的解說是由不同的功能分類組織而成的,並有個按字母順序排列的索引以供查閱。
l "提供的功能" 包括載入時更進一步的選擇,符號及原始程式層次的除錯,和EMM 4.0 的能力。
l "更進一步的主題" 一節包括如何在 DOS 載入設備驅動程式及非 DOS 作業系統下使用 Soft-ICE 。
在整個手冊中,特別是在課程和指令那一節,所給的範例會要求你對 Soft-ICE輸入資料。當它指示要你按一個鍵時,你應該按下那個鍵。當它指示你輸入片語時,你應打出那片語,然後按下 Enter 。
1.3 系統需求:
Soft-ICE 可以在 IBM Series II Model 70 和 80 ,Compaq 80386 及 80386 S,AT 相容之電腦上執行。
使用 Soft-ICE 最好有延伸記憶體,但在主記憶體中也能正常執行。
Soft-ICE 不使用 DOS 及 ROM BIOS 來處理影像輸出及鍵盤輸入,因此螢幕必需和 MDA 、Hercules 、CGA 、EGA 或 VGA 其中之一相容。Soft-ICE 也支援兩個營幕的設定,這在做 Video-Intensive 程式時很有用。
(二) 開始使用 Soft-ICE
2.1 磁片
Soft-ICE 是在 5 1/4" 或 3 1/2" 的磁片上。
當你執行 Soft-ICE 時,螢幕上會顯示這份拷貝的所有人的姓名以防止軟體的盜拷。為了您的方便,Soft-ICE 的磁片上並沒有設置防拷。為了我們的方便,我們感激您對我們版權聲明的尊重。只有當母片損壞時才能使用拷貝的副本。
Soft-ICE 的目錄下將包含下列檔案:
S-ICE.EXE S-ICE.DAT LDR.EXE MSYM.EXE
EMMSETUP.EXE UPTIME.EXE README.SI SAMPLE.EXE
SAMPLE.ASM SAMPLE.SYM
檔案介紹:
S-ICE.EXE 是 Soft-ICE 的主程式。
S-ICE.DAT 是設定 Soft-ICE 的檔案。
LDR.EXE 是 Soft-ICE 的程式,也是符號檔的載入器。
MSYM.EXE 是 Soft-ICE 符號檔的製造程式。
EMMSETUP.EXE 用來設定系統如何使用擴充記憶體。
UPTIME.EXE 將時間設為真實模式下的時鐘。
README.SI 包括有關 Soft-ICE 但未出現在手冊中之資料。
SAMPLE.EXE 是個在課程中使用到的展示程式。
SAMPLE.ASM 是展示程式的組合語言程式碼。
SAMPLE.SYM 是展示程式的符號檔。
2.2 載入 Soft-ICE
使用 Soft-ICE 之前先把磁片上所有檔案拷進硬碟中,這些檔案必需放在 DOS可以存取的目錄中。
Soft-ICE 可以當做驅動程式由 CONFIG.SYS 中載入或直接在命令列下執行。
Soft-ICE 有許多功能必需由 CONFIG.SYS 中載入才能使用。
〔註〕如果你沒有延伸記憶體,就不能由 CONFIG.SYS 中載入 Soft-ICE 。此時你必
需在 DOS 提示符號下執行它。
2.2.1 沒有延伸記憶體的載入法
沒有延伸記憶體時,Soft-ICE 會儘可能的載入較高的記憶體位址。Soft-ICE 使用的記憶體將會消失,使 DOS 程式無法找到它。既然在載入 Soft-ICE 後 DOS下的可見之記憶體變少了,建議您最好在其它常駐或控制程式之前先載入 Soft-ICE 。沒有延伸記憶體時,你只需要在 DOS 下輸入:S-ICE 即可。
2.2.2 以延伸記憶體來載入 Soft-ICE
要以延伸記憶體來載入 Soft-ICE 可以用下列二種方法之一:
1.由 CONFIG.SYS 中載入:如果你想使用下列功能時,你必需以此方法載 Soft-ICE 。
* 和其它使用 ROM BIOS 的程式共用記憶體。(像:VDISK.SYS 、RAMDRIVE.SYS 、HIMEM.SYS 、CACHE 程式等。)
* 使用 Soft-ICE EMM 4.0 的功能。
* 使用 Soft-ICE 做符號或原始程式碼層次的除錯。
* 使用 back trace ranges 。
* 和其它 Nu-Mega 產品一起使用。像:MagicCV 。
由 CONFIG.SYS 中載入時,Soft-ICE 會為自己和它的相關部份在延伸記憶體中配置一塊記憶體,如此才不會發生記憶體衝突。Soft-ICE 必需在其它會配置延伸記憶體的程式載入前載入。一般而言,Soft-ICE 最好是CONFIG.SYS 中第一個載入的驅動程式。對剛使用 Soft-ICE 的人來說,用以下敘述把 Soft-ICE 當成是 CONFIG.SYS 中第一個載入的程式事明智的: DEVICE = drive:\path\S-ICE.EXE /SYM 50
drive 和 path 代表 Soft-ICE 所在的磁碟和路徑。這敘述會在系統開始時載入 Soft-ICE 且在課程中也適用。然而這樣並沒有啟動 Soft-ICE一些有用的功能,像 EMM 4.0 。你可以在你更有經驗後重新設定 Soft-ICE 以啟用這些功能。如果你已經有使用 Soft-ICE 的經驗或想立刻使用這些功能,請參考後面Soft-ICE 初始狀態的選擇。
〔注意〕在你的系統上初次載入任何新的驅動程式時準備一張可以開機的磁片才是明智的。這是用來防止現在的設定和你的系統不相容的不幸事故。
2.直接在 DOS 的提示符號下輸入 S-ICE 來執行 Soft-ICE 。載入前 Soft-ICE 會顯示載入的訊息和提示符號。如果不想出現這提示符號,在S-ICE.DAT 中加入 EXTENDED 。查閱後面以獲得更多有關 S-ICE.DAT 的資訊。以這個方法載入 Soft-ICE 時,Soft-ICE 會自動載入延伸記憶體的最高處,不管是否有東西已經在那兒。如果你確定沒有其它程式使用延伸記憶體,這種載入法是可接受的。以此方法載入時,Soft-ICE 完全不佔主記憶體。
〔註〕由命令列載入 Soft-ICE 時,你無法使用 Soft-ICE 的全部功能。如果你想把 Soft-ICE 當獨立的除錯器使用,建議您從 CONFIG.SYS 中載入 Soft-ICE 。
如果你必把 Soft-ICE 當驅動程式載入,但不想 Soft-ICE 永遠存在,你應在載入時加上 /UN 參數。
2.2.3 把 Soft-ICE 設定成定製載入
你可以從 CONFIG.SYS 中以參數或用 Soft-ICE 的初狀態檔 S-ICE.DAT 來定製 Soft-ICE 。CONFIG.SYS 中的參數設定讓你可以設定 Soft-ICE 如何使用延伸記憶體。S-ICE.DAT 讓你設定功能鍵和定義自動啟始字串。自動啟始字串是用來載入一串每次載入 Soft-ICE 要做的命令。參閱後面以取得更多資訊。
2.3 解除 Soft-ICE 的常駐
偶爾你可能會需要解除 Soft-ICE 的常駐。典型的例子是為了要執行 80286 或80386 保護模式程式而需要解除 Soft-ICE 。要解除 Soft-ICE ,打入:S-ICE /U。
這個命令會把機器切回真實位址模式。如果 Soft-ICE 是由 CONFIG.SYS 中載入的,則解除後記憶體仍不能被其它程式使用。如果 Soft-ICE 從命令列載入的,則解除後會釋放記憶體。
〔注意〕如果你的系統有任何 backfilled memory 或擴充記憶體正被使用,解除 Soft-ICE 會使系統當掉。
2.4 重新載入 Soft-ICE
即使 Soft-ICE 一開始是從 CONFIG.SYS 中載入的,也可以在任何時候重新載入。如果 Soft-ICE 是由 CONFIG.SYS 中載入的,那原先載入時的設定依然有效。要重新載入 Soft-ICE ,輸入:S-ICE 。
(三)30分鐘內學會 DEBUG
3.1 序言
Soft-ICE 的所有動作都發生在一個可以隨時叫出的視窗中。Soft-ICE 的所有 指令都可以顯示在一個小視窗中,但這個視窗可以擴大到整個螢幕。當你把 Soft-ICE 當做其它除錯程式的助手使用時,你可能會使用小視窗。當你把 Soft-ICE 當獨立除錯器用時,你可能會使用大視窗。
如果你使用原來磁片上的設定檔( S-ICE.DAT ),那視窗一開始是佔滿整個螢幕的。
3.2 叫出視窗
載入 Soft-ICE 後,你可以隨時叫出視窗。一開始你只要按 Ctrl - D 即可叫出 Soft-ICE 。使用 ALTKEY 的指令可以更改此熱鍵。
3.3 由視窗中返回
使用 X 這個指令或你叫出 Soft-ICE 的熱鍵均可以回到原先的畫面。你在Soft-ICE 中設定的所有中斷點此時開始啟動。
3.4 改變視窗大小
你可以改變 Soft-ICE 視窗的寬度和高度。在獨立模式中顯示程式碼時,改變視窗大小的功能特別有用。視窗的高度為 8 到 25 行。
按Alt - ↑ 使視窗變高
Alt - ↓ 使視窗變短
使用 WIN 的指令以改變視窗的寬度。直接輸入 WIN 而不加參數會在下面兩種模式中切換:
WIDE 模式 --- 佔滿整個螢幕
NARROW 模式 --- 46 個字元寬
有些指令像 D 、E 、R 、U ,使用 WIDE 模式以顯示更多訊息時較為方便。
3.5 移動視窗
Soft-ICE 的視窗是可以移動且可以定位在螢幕上的任何地方。這功能在 NARROW模式下特別有用。在你需要時移動視窗以便觀看螢幕上被視窗擋到的地方。你可以用下列按鍵控制螢幕的移動:
Ctrl - ↑ 向上移一行
Ctrl - ↓ 向下移一行
Ctrl - → 向右移一列
Ctrl - ← 向左移一列
3.6 行編輯按鍵
Soft-ICE 容易使用的行編輯器讓你可以叫回並編輯上一個指令。它的功能類似
那些有名的 CED 行編輯器。以下按鍵可以幫助你在命令窗中編輯指令:
→ --- 游標右移
← --- 游標左移
Ins --- 切換插入模式
Del --- 消除現在字元
Home --- 把游標移到一行的開頭
End --- 把游標移到一行的結尾
↑ --- 顯示上一個指令
↓ --- 顯示下一個指令
Shift - ↑ --- 顯示向上捲一行
Shift - ↓ --- 顯示向下捲一行
Page Up --- 顯示向上捲一頁
Page Down --- 顯示向下捲一頁
BackSpace --- 消除前一個字元
Esc --- 取消目前命令
當游標在資料窗或程式碼窗時,另有特殊的按鍵,這在後面將會討論到。
3.7 動作狀態行
在螢幕底部的狀態行提供指令語法的輔助。
3.8 指令語法
Soft-ICE 是個由指令操控的除錯工具。要令 Soft-ICE 有動作,你要下指令給它。指令可以因不同參數而有改變。所有的指令都是 1 到 6 個字元的字串且不分大小寫。所有的參數都是字串或運算式。
運算式是典型的數字,也可以是數字和運算子的結合。所有的數字均以 16 進位表示。一個位元組 (byte) 參數有 2 位,字組 (word) 參數有 4 位。雙字組(double word) 是兩個由 : 分隔的字組參數。以下是一些參數的例子:
12 --- 位元組參數
10FF --- 字組參數
E000:0100 --- 雙字組參數
暫存器在運算式中可以拿來當位元組或字組參數用。例如: U CS:IP -10 的指令會從現在指令指標所指位址向前 10 byte 開始反組譯。以下的暫存器名稱可以用在運算式中:
AL 、AH 、AX 、BL 、BH 、BX 、CL 、CH 、CX 、DL 、DH 、DX 、DI 、
SI 、BP 、SP 、IP 、CS 、DS 、ES 、SS 、FL
3.8.1 指定記憶體位址
許多 Soft-ICE 的指令要求以記憶體位址當參數。一個記憶體位址是由兩個 16 位元的字組中間以分號 (:) 分隔而組成的。第一個字組表示節段位址 (segment address) 而第二個字組表示差距位址 (offset segment) 。
公用符號可以在所有 Soft-ICE 指令中用來取代位址。公用符號必需先由 Soft-ICE 的程式載入器 (LDR.EXE) 載入。參閱後面以取得使用公用符號的完整說明。
Soft-ICE 運算式的運算器接受一些特殊字元和位址的使用。這些字元是:
$ --- 現在 CS:IP 所指的位址
@位址 --- 間接雙字組
.number --- 原始程式碼行號
當你要輸入目前指令指標的位址時,可以用 $ 代替 CS:IP 。
使用 @ 可以讓你參考到位址所指處的雙字組。你可以使用多層的 @ 。
如果用 . 來代表位址,它是用來代表原程式碼中的行號,而非實際的位址。這只有在原始程式碼有載入的情形下才能使用。這種情況下,位址是以 10 進位表示。
例如:
U.1234 --- 從原始程式碼第 1234 行開始反組譯
U $-10 --- 從目前指令指標所指處向前 10 byte 開始反組譯
G @SS:SP --- 假如你目前正在第一個中斷程序,下這個指令會在堆疊的返回位址設個暫時中斷點並跳過此中斷程序。
3.9 功能鍵
功能鍵可以代替一串 Soft-ICE 中之指令。功能鍵可以由命令行設定或從S-ICE.DAT 中定義。
Soft-ICE 磁片上原來的 S-ICE.DAT 已經對 12 個功能鍵有設定。你可以在任何時候改變任何一個設定。個鍵定義如下表所示。這樣設計是為了方便微軟的CodeView 的使用者。
F1 --- 顯示一般輔助畫面 ( H; )
F2 --- 在暫存器窗中切換 ( ^WR; )
F3 --- 改變目前原始碼的模式 ( ^SRC; )
F4 --- 回復視窗 ( ^RS; )
F5 --- 回到原程式 ( ^X; )
F6 --- 在命令窗中和程式碼窗中切換 ( ^EC; )
F7 --- 執行到游標所在那行 ( ^HERE; )
F8 --- 單步執行 ( ^T; )
F9 --- 在游標所在那行設中斷點 ( ^BPX; )
F10 --- 單步執行 ( ^P; )
F11 --- 執行到返回位址 ( ^G @SS:SP; )
F12 --- 顯示 Soft-ICE 的版別 ( ^VER; )
指令前的 ^ 會讓這個指令不顯示出來。指令後的 ; 則代表按下 Enter 。輸入FKEY 的指令可以顯示目前功能鍵所代表的意義。要使用功能鍵直接按下功能鍵即可,不需再鍵入指令。要自定功能鍵,參閱 5.8 FKEY 指令的解說或有關在 S-ICE.DAT 設定功能鍵的部份。
3.10 輔助
利用輔助的指令可以得到有關指令的簡單解說、語法和使用例子。要得到輔助資訊,鍵入:
? 或 H --- 顯示所有指令和運算子的簡短解說
? 指令 或 H 指令 --- 顯示關於指令語法和例子更詳細的資訊
? 運算式 或 H 運算式 --- 把運算式的結果以 16 、10 進位及 ASCII 碼
顯示出來
3.11指令
這一節包括每個指令的語法、解釋及範例。所有的數字均以 16 進位表示。使用到 + - * / 或暫存器的數字均可視為運算式。所有的指令都不區分大小寫。指令語法敘述中的斜體字需以真實的值代替而不是打入斜體字。
以下是本節中所使用的代號:
[ ] --- 語法中非必用的部份
< > --- 可選用的部份
X|Y --- 使用 X 或 Y ( X Y 擇一使用 )
count --- count 指定中斷點條件要成立幾次才會真正引發中斷。如果沒
有設定,內定值是 1 。每次引發中斷而叫出 Soft-ICE 的視窗
後,記數器自動回復為原先指定值。
verb --- 指定在什麼狀況下中斷點會做用。R 代表讀取;W 代表寫入;
RW 代表讀取及寫入;X 代表執行。
address -- 位址。由兩個 16 位元之字組以冒號分隔而組成。第一個字組
代表區段位址,第二個字組代表差距位址。位址可以由符號或
暫存器構成,也可以包括 $ 、. 、@ 等特殊符號。
break-number 中斷點號碼是在你修改中斷點(即編輯、刪除、重新啟動
暫停作用)時使用的。它是用來代表各中斷點的代碼。
中斷點號碼是由 0 到 F 。
list --- 一串由逗號或空白分隔的中斷點號碼。
mask --- 由 1 、0 、X 所構成的位元遮罩。X 代表不處理的位元。
例如: BPIO 21W EQ M 1XXX XXXX
如果 21 埠被寫入且造成其高位元被設定則會引發中斷。
(四)如何使用中斷點指令
4.1 序言
Soft-ICE 具有以往只有硬體除錯器才具有的中斷點能力。因為 80386 晶片的威力和彈性,使我們不需要額外的硬體設備就能有更強大的中斷點能力。
中斷點的觸發可以由記憶體某位址的讀取、記憶體範圍的讀取、程式的執行及埠的存取來達成。Soft-ICE 賦與每個中斷點一個一位的 16 進位號碼( 0 - F )。這個中斷點號碼是當你對中斷點做刪除、中止、啟動、編輯等動作時使用。
Soft-ICE 的所有中斷點都是 "sticky" 。這個意思是這些中斷點在啟動後不會自動消失。你必需以 BC 或 BD 指令來消除或關閉它。Soft-ICE 一次可以處理 16個中斷點。同種形態的中斷點最多可以有 10 個。但記憶體位址的中斷點 ( BPM )因 80386 處理器之暫存器的緣故,最多只能設 4 個。
中斷點可以設個計數參數。計數參數是中斷點真正觸發作用前被忽略的次數。
4.2 設置中斷點
指令:
BPM BPMB BPMW BPMD --- 在記憶體位址被存取或執行時引發中斷
BPR --- 對記憶體範圍設置中斷點
BPIO --- 對 I/O 埠存取時觸發中斷
BPINT --- 呼叫插斷時觸發中斷
BPX --- 設置 / 清除 執行中斷點
CSIP --- CS:IP 範圍的檢定判斷
BPAND --- 等待複合中斷點的發生
BPM BPMB BPMW BPMD --- 在記憶體位址被存取或執行時引發中斷
語法: BPM [size] address [verb] [qualifier value] [C=count]
size --- B 、W 、D
B -- byte 位元組 W -- word 字組 D -- Double word 雙字組
size 是指中斷點所涵蓋的範圍。舉例來說,如果使用的是雙字組
,而其第三個位元組被改變了,就會引發中斷。如果有指定判斷資
格 (qualifier) ,size 也是很重要的。
verb --- R 、W 、RW 或 X
qualifier --- EQ 、NE 、GT 、LT 、M
EQ -- 相等 NE -- 不等 GT -- 大於
LT -- 小於 M -- 遮罩
qualifier 只有在讀寫中斷點才有用到。
value --- 由中斷點大小決定是位元組、字組或雙字組的值
解說:
BPM 指令會在記憶體讀、寫或執行時引發中斷。
verb 內定值為 RW ; size 內定值為 byte 。
除了 X 外的 verb 值會使程式執行引發中斷的那段程式碼。CS:IP 所指的是引發中斷的後一行程式碼。如果 verb 值是 X ,CS:IP 所指的是中斷點設置的位置。
如果設定的是 R ,當記憶體位址被讀取或做沒有改變的寫入時,將引發中斷。
如果設定的是 R 、W 、RW 時,指定的位址被執行時並不會引發中斷。
〔註〕如果使用 BPMW ,指定的位址必需由字組邊界開始。如果使用 BPMD ,指定的位址必需指向一個雙字組邊界。
〔例〕 BPM 1234:SI W EQ 10 C=3
這道指令設定一個位元組的記憶體存取中斷點。當 10H 第三次寫入 1234:SI時將啟動中斷點。
〔例〕 BPM CS:1235 X
這道指令設定一個執行中斷點。當 CS:1235 的程式碼被執行時將引發中斷。此時 CS:IP 所指的就是中斷點設定位址。
〔例〕 BPMW DS:F00 W EQ M 0XXX XXXX XXXX XXX1
這道指令設定一個字組的記憶體寫入中斷點。當 DS:F00 被寫入一個高位元為 0 ,低位元為 1 (其它位元不考慮)的資料時,將引發中斷。
〔例〕 BPM DS:1000 W GT 5
這道指令設定一個位元組的記憶體寫入中斷點。當 DS:1000 被寫入一個大於 5 的值時,將引發中斷。
BPR --- 對記憶體範圍設置中斷點
語法: BPR start-adderss end-address [verb] [C=count]
start-address 、end-address --- 界定範圍的開始及結束位址
verb --- R 、W 、RW 、T 或 TW
解說:
BPM 指令讓你對一段記憶體範圍設中斷點。
除了 T 和 TW 外的 verb 值均會執行引發中斷的程式碼。CS:IP 將指向引發中斷的下一段程式碼。
你不能設定執行的範圍中斷點。如果想做到執行的範圍中斷點必需使用 R 。程式碼的引出被視為是對範圍中斷點的讀取。
如果未指定 verb ,內定值是 W 。
在某些狀況下,設置範圍中斷點會降低系統的性能。Soft-ICE 將會分析所有對包括範圍中斷點的 4K 記憶體的讀寫動作。性能的降低通常無法察覺,但也可能有嚴重降低的例外。
verb 值使用 T 或 TW 將在指定範圍內可以做回溯追蹤 (back trace) 。它們並不會真正引發中斷而只是記錄下程式碼的資料。這個資料可以用 SHOW 或TRACE 指令顯示出來。參閱後面以取得更多有關回溯追蹤的資訊。
〔例〕 BPR B000:0 B000:1000 W
這道指令定義一個記憶體範圍的中斷點。任何對單色影像記憶體的寫入均 會引發中斷。
BPIO --- 對 I/O 埠存取時觸發中斷
語法: BPIO port [verb] [qualifier value] [C=count]
port --- 一個位元組或字組形態的值
verb --- R 、W 或 RW 。 R -- read ( IN ) W -- write ( OUT )
qualifier -- EQ 、NE 、GT 、LT 、M
EQ -- 相等 NE -- 不等 GT -- 大於
LT -- 小於 M -- 遮罩
value -- 一個位元組或字組形態的值
解說:
BPIO 指令會在 I/O 埠讀寫時引發中斷。
如果有指定 value 值,它將被拿來和引發中斷的 IN 、OUT 程式碼所讀/寫 的真正資料值做比較。value 可以是一個位元組或字組。如果是對一個位元組的埠做 I/O ,則是使用較低的 8 位元來做比較。
CS:IP 將會指向引發中斷之程式碼的後一段程式碼。
如未指定 verb ,內定值是 RW 。
〔例〕 BPIO 21 W NE FF
這道指令定義一個 I/O 埠存取中斷點。如果一號中斷控制器的遮罩暫存器被寫入除了 FFh 之外的值,將會引發中斷。
〔例〕 BPIO 3FE R EQ M 11XX XXXX
這道指令定義一個位元組的 I/O 埠讀取中斷點。如果 3FEh I/O 埠被讀取,且這個值的二高位元是 1 時,將會引發中斷。其它位元可以是任意值。
BPINT --- 呼叫插斷時觸發中斷
語法: BPINT INT-NUMBER [ < AL | AH | AX > = value] [C=count]
int-number --- 由 0 到 FFh 的插斷號碼
value --- 一個位元組或字組的值
解說:
BPINT 指令可以在呼叫硬體插斷或軟體插斷時引發中斷。藉由指定 AX 暫存 器之值可以輕易分離指定的 DOS 或 BIOS 呼叫。
如果沒有指定 value 值,在呼叫指定的插斷向量時將引發中斷。這個插斷可以是硬體插斷、軟體插斷或內部插斷。
選定的 value 值當插斷發生時將和指定的暫存器比較 (AH 、AL 或 AX) 。
如果其值和指定的暫存器值相同時,將引發中斷。
中斷點引發時,如果是硬體插斷,CS:IP 將指向此插斷程序的第一段程式碼。使用 INT? 指令可以得知此插斷呼叫發生時執行到哪裡。如果是軟體插斷,則CS:IP 將指向呼叫此插斷的程式碼。
〔例〕 BPINT 21 AH=4C
這道指令定義一個 21h 插斷的中斷點。當 DOS 4Ch 函式(結束程式)被
呼叫時將引發中斷。
BPX --- 設置 / 清除 執行中斷點
語法: BPX [address] [C=count]
解說:
BPX 指令讓你在原始程式中 設置/清除 執行中斷點。如果游標在程式碼窗中,則不需要輸入位址,執行中斷點將設置在目前游標所在位址。如果目前游標所在位址已經設置一個執行中斷點,則將清除此中斷點。
如果程式碼窗是不可見的或游標未在其中,則必!指定位址。如果只
展开阅读全文