直接將 8086/8087/8088 記憶碼合并到內存。 該命令從匯編語言語句創建可執行的機器碼。所有數值都是十六進制格式,必須按一到四個字符輸入這些數值。在引用的操作代碼(操作碼)前指定前綴記憶碼。 a [address] 參數 address 指定鍵入匯編語言指令的位置。對 address 使用十六進制值,并鍵入不以“h”字符結尾的每個值。如果不指定地址,a 將在它上次停止處開始匯編。 有關將數據輸入到指定字節中的信息,請參看Debug E(鍵入)。 有關反匯編字節的信息,請參看Debug U(反匯編) 說明 使用記憶碼 段的替代記憶碼為 cs:、ds:、es: 和 ss:。遠程返回的記憶碼是 retf。字符串處理的記憶碼必須明確聲明字符串大小。例如,使用 movsw 可以移動 16 位的字串,使用 movsb 可以移動 8 位字節串。 匯編跳轉和調用 匯編程序根據字節替換自動將短、近和遠的跳轉及調用匯編到目標地址。通過使用 near 或 far 前綴可以替代這樣的跳轉或調用,如下例所示: -a0100:0500 0100:0500 jmp 502 ; a 2-byte short jump 0100:0502 jmp near 505 ; a 3-byte near jump 0100:0505 jmp far 50a ; a 5-byte far jump 可以將 near 前綴縮寫為 ne。 區分字和字節內存位置 當某個操作數可以引用某個字內存位置或者字節內存位置時,必須用前綴 word ptr 或者前綴 byte ptr 指定數據類型??山邮艿目s寫分別是 wo 和 by。以下范例顯示兩種格式: dec wo [si] neg byte ptr [128] 指定操作數 Debug 使用包括在中括號 ([ ]) 的操作數引用內存地址的習慣用法。這是因為另一方面 Debug 不能區分立即操作數和內存地址的操作數。以下范例顯示兩種格式: mov ax,21 ; load AX with 21h mov ax,[21] ; load AX with the ; contents of ; memory location 21h 使用偽指令 使用 a 命令提供兩個常用的偽指令:db 操作碼,將字節值直接匯編到內存,dw 操作碼,將字值直接匯編到內存。以下是兩個偽指令的范例: db 1,2,3,4,“THIS IS AN EXAMPLE“ db 'THIS IS A QUOTATION MARK:“' db “THIS IS A QUOTATION MARK:'“ dw 1000,2000,3000,“BACH“ 范例 a 命令支持所有形式的間接注冊命令,如下例所示: add bx,34[bp+2].[si-1] pop [bp+di] push [si] ) 還支持所有操作碼同義詞,如下例所示: loopz 100 loope 100 ja 200 jnbe 200 對于 8087 操作碼,必須指定 wait 或 fwait 前綴,如下例所示: fwait fadd st,st(3) ; this line assembles ; an fwait prefix
將數據輸入到內存中指定的地址。 可以按十六進制或 ASCII 格式鍵入數據。以前存儲在指定位置的任何數據全部丟失。 e address [list] 參數 address 指定輸入數據的第一個內存位置。 list 指定要輸入到內存的連續字節中的數據。 有關集成記憶碼的信息,請參看Debug A(匯編)。 有關顯示內存部分內容的信息,請參看Debug D (轉儲)。 說明 使用 address 參數 如果在沒有指定可選的 list 參數的值情況下指定 address 的值,Debug 將顯示地址和內容,在下一行重復地址,并等待您的輸入。此時,您可以執行下列操作之一: 替換字節值。為此,請在當前值后鍵入新值。如果您鍵入的值不是有效的十六進制值,或該值包含兩個以上的數字,則 Debug 不會回顯無效或額外的字符。 進入下一個字節。為此,請按 SPACEBAR(空格鍵)。要更改該字節中的值,請在當前值后鍵入新值。如果按 SPACEBAR(空格鍵)時,移動超過了 8 位界限,Debug 程序將顯示新的一行并在行首顯示新地址。 返回到前一個字節。為此,請按 HYPHEN 鍵 (-)??梢苑磸桶?nbsp;HYPHEN 鍵 (-) 向后移動超過多個字節。在按 HYPHEN 時,Debug 開始新行并顯示當前地址和字節值。 停止執行 e 命令。為此,請按 ENTER 鍵。在任何字節位置都可以按 ENTER。 使用 list 參數 如果指定 list 參數的值,隨后的 e 命令將使用列表中的值替換現有的字節值。如果發生錯誤,將不更改任何字節值。 List 值可以是十六進制字節或字符串。使用空格、逗號或制表符來分隔值。必須將字符串包括在單或雙引號中。 范例 假定鍵入以下命令: ecs:100 Debug 按下面的格式顯示第一個字節的內容: 04BA:0100 EB. 要將該值更改為 41,請在插入點鍵入 41,如下所示: 04BA:0100 EB.41_ 可以用一個 e 命令鍵入連續的字節值。在鍵入新值后按 SPACEBAR(空格鍵),而不是按 ENTER 鍵。Debug 顯示下一個值。在此范例中,如果按三次 SPACEBAR(空格鍵),Debug 將顯示下面的值: 04BA:0100 EB.41 10. 00. BC._ 要將十六進制值 BC 更改為 42,請在插入點鍵入 42,如下所示: 04BA:0100 EB.41 10. 00. BC.42_ 假定決定值 10 應該是 6F。要糾正該值,請按 HYPHEN 鍵兩次以返回到地址 0101(值 10)。Debug 顯示以下內容: 04BA:0100 EB.41 10. 00. BC.42- 04BA:0102 00.- 04BA:0101 10._ 在插入點鍵入 6f 更改值,如下所示: 04BA:0101 10.6f_ 按 ENTER 停止 e 命令并返回到 Debug 提示符下。 以下是字符串項的范例: eds:100 “This is the text example“ 該字符串將從 DS:100 開始填充 24 個字節
Debug:F(填充)
使用指定的值填充指定內存區域中的地址。 可以指定十六進制或 ASCII 格式表示的數據。任何以前存儲在指定位置的數據將會丟失。 f range list 參數 range 指定要填充內存區域的起始和結束地址,或起始地址和長度。關于有效的 range 值的信息,請參看“Debug 說明”。 list 指定要輸入的數據。List 可以由十六進制數或引號包括起來的字符串組成。 說明 使用 range 參數 如果 range 包含的字節數比 list 中的數值大,Debug 將在 list 中反復指派值,直到 range 中的所有字節全部填充。 如果在 range 中的任何內存損壞或不存在,Debug 將顯示錯誤消息并停止 f 命令。 使用 list 參數 如果 list 包含的數值多于 range 中的字節數,Debug 將忽略 list 中額外的值。 范例 假定鍵入以下命令: f04ba:100l100 42 45 52 54 41 作為響應,Debug 使用指定的值填充從 04BA:100 到 04BA:1FF 的內存位置。Debug 重復這五個值直到 100h 個字節全部填滿為止。
顯示或改變一個或多個 CPU 寄存器的內容。 r [register-name] 參數 無 如果在沒有參數的情況下使用,則 r 命令顯示所有寄存器的內容以及寄存器存儲區域中的標志。 register-name 指定要顯示其內容的寄存器名。 有關顯示內存部分內容的信息,請參看Debug D(轉儲)。 有關反匯編字節的信息,請參看Debug U(反匯編)。 說明 使用 r 命令 如果指定了寄存器名稱,Windows 2000 將顯示以十六進制標記表示的寄存器的 16 位值,并將冒號顯示為提示符。如果要更改包含在寄存器中的值,除非鍵入新值并按 ENTER 鍵;否則,請按 ENTER 鍵返回 Debug 提示符。 有效寄存器名 以下是 register-name 的有效值:ax、bx、cx、dx、sp、bp、si、di、ds、es、ss、cs、ip、pc 及 f。ip 和 pc 都引用指令指針。 如果指定寄存器名稱,而不是從前面的列表中指定,Windows 2000 將顯示以下消息: br error 使用 f 字符而不是寄存器名 如果鍵入 f 字符代替寄存器名,Debug 將每個標記的當前設置顯示為兩字母代碼,然后顯示 Debug 提示符。要更改標志的設置,請從下表中鍵入適當的兩字母代碼: 標志名 設置 清除 溢出 ov nv 方向 dn(減) up(增) 中斷 ei(啟用) di(禁用) 正負 ng(負) pl(正) 零 zr nz 輔助進位 ac na 奇偶校驗 pe(偶校驗) po(奇校驗) 進位 cy nc 可以按任何順序鍵入新的標志值。不需要在這些值之間留出空格。要停止 r 命令,請按 ENTER 鍵。任何沒有指定新值的標志保持不變。 用 r 命令顯示的郵件 如果為標記指定了多個值,Debug 將顯示以下消息: df error 如果指定沒有在前面的表中列出的標志代碼,Debug 將顯示以下消息: bf error 在這兩種情況下,Debug 將忽略所有在無效項目之后指定的設置。 Debug 的默認設置 在啟動 Debug 時,會將段寄存器設置到空閑內存的低端,指令指針設置為 0100h,清除所有標志,并且將其余寄存器設置為零,除了被設置為 FFEEh 的 sp 之外。
Debug:R
范例 要查看所有寄存器的內容、所有標記的狀態和當前位置的指令解碼表,請鍵入以下命令: r 如果當前位置是 CS:11A,顯示外觀將類似于以下內容: AX=0E00 BX=00FF CX=0007 DX=01FF SP=039D BP=0000 SI=005C DI=0000 DS=04BA ES=04BA SS=04BA CS=O4BA IP=011A NV UP DI NG NZ AC PE NC 04BA:011A CD21 INT 21 要只查看標志的狀態,請鍵入以下命令: rf Debug 按以下格式顯示信息: NV UP DI NG NZ AC PE NC - _ 現在,您可以按任意順序鍵入一個或多個有效的標志值,其中可以有或沒有空格,如下所示: nv up di ng nz ac pe nc - pleicy Debug 結束 r 命令并顯示 Debug 提示符。要查看更改,請鍵入 r 或 rf 命令。Debug 將顯示以下內容: NV UP EI PL NZ AC PE CY - _ 按 ENTER 返回到 Debug 提示符。
Debug:S(搜索)
在某個地址范圍搜索一個或多個字節值的模式。 s range list 參數 range 指定要搜索范圍的開始和結束地址。 list 指定一個或多個字節值的模式,或要搜索的字符串。用空格或逗號分隔每個字節值和下一個字節值。將字符串值包括在引號中。 說明 如果 list 參數包含多個字節值,Debug 將只顯示出現字節值的第一個地址。如果 list 只包含一個字節值,Debug 將顯示指定范圍內出現該值的所有地址。 范例 假定需要查找包含值 41 并且范圍從 CS:100 到 CS:110 的所有地址。為此,請鍵入以下命令: scs:100 110 41 Debug 按以下格式顯示結果: 04BA:0104 04BA:010D - 以下命令在 CS:100 到 CS:1A0 的范圍內搜索字符串“Ph”。 scs:100 1a0 “Ph“
顯示有關擴展內存狀態的信息。 要使用擴展內存,必須安裝符合 4.0 版的 Lotus/Intel/Microsoft 擴展內存規范 (LIM EMS) 的擴展內存設備驅動程序。 xs 參數 該命令不帶參數。 有關使用擴展內存的其他 Debug 命令的信息,請參看Debug XA(分配擴展內存)、Debug XD(釋放擴展內存)或Debug XM(映射擴展內存頁)。 說明 Debug 顯示的信息有如下格式: Handle xx has xx pages allocated Physical page xx = Frame segment xx xx of a total xx EMS pages have been allocated xx of a total xx EMS handles have been allocated 范例 要顯示擴展內存信息,請鍵入以下命令: xs Debug 顯示與以下類似的信息: Handle 0000 has 0000 pages allocated Handle 0001 has 0002 pages allocated Physical page 00 = Frame segment C000 Physical page 01 = Frame segment C400 Physical page 02 = Frame segment C800 Physical page 03 = Frame segment CC00 2 of a total 80 EMS pages have been allocated 2 of a total FF EMS handles have been allocated