在8086匯編中DEBUG是個非常實用的工具,並且可以非常明了的查看每一步指令每一個段的相對狀態,有利於學習。下面列舉一下DEBUG的一些使用方法:
-
-A:可以開始在相應位置編寫代碼,其中后面可以接一個地址,表示寫的位置;從下圖可以看到,A后加參數2000,即從段偏移2000的位置開始存放代碼。
-
-C:
-c [add1]L[length] [add2]
是將add1和add2開始的length個數據顯示出來,進行比較;下圖鍵入:
-C 50L20 100
第二列顯示的是0050-006F的數據內容,第三列顯示的是0010-011F的數據內容,而長度為20。非常直觀的顯示了數據。 -
-D:顯示存儲空間中的內容。
如上所示,0200中本來是空的,通過a命令寫進代碼后再次查看可以發現里面存放了新的操作碼。
另外還可以通過指示明確段和偏移直接查詢特定位置的內容。(如
CS:200
) -
-E:修改特定存儲空間中的內容
-E 100 073F:0100 B8.12
也可以通過連續輸入的方式更改連續的一片內容:
-
-F:用於填充一段存儲單元,但是要注意他的格式把段地址和段偏移要寫清楚
如下圖所示,L10表示填充的長度是10 后面加填充的內容,通過兩個命令可以發現,如果填充的內容我只寫了 \(n\) 個而填充的長度我寫了\(m\)個(\(n<m\) )則會順序循環的自動填充。
-
-G:這個命令使用不當會導致系統崩潰使用方法為:G[=address],代表從當前 \(cs:ip\) 所指的位置執行到address處.
技巧:先用 -U 查看部分指令內容,然后用 -G 快速執行內容
-
-H: 這個選項比較簡單,即輸入兩個參數,對這兩個參數進行加減運算,把想加的結果顯示在第一列,相減的結果放在第二列,其中我們可以看到,當減為負數時候是以補碼的形式表示的。
-
-I: 從某一端口輸入並顯示一個字節,后面的參數接端口號。
-
-L: 發現L命令並不能使用,查閱了資料,dos下運行debug時,涉及到直接寫硬盤扇區的操作都是被禁止的,這是windows的保護功能。如果想要運行全部debug命令,必須在實模式dos下運行。
-
-M:把 \(cs\) 中的一段內容移動到內存單元中,這里默認指的就是 \(DS\) 段。
-
-N:用於對文件命名,-n[name]。
-
-O: 用於給端口發送數據,
; 向2F8端口發送數據4F -O 2F8 4F
-
-Q :使用Q命令來退出debug調試
-
-R:R命令是個非常方便的命令,它可以查看和修改8086中寄存器的值。使用-R可以直接查看所有的寄存器,使用 -R+[指定寄存器] 可以實現對某個寄存器的修改,如上圖所示,已經成功修改了AX中的值。其中使用-R F可以查看標志寄存器的狀態如圖所示,它不是單純的0和1不太好記,可以查實驗書來對照,可以看到當前寄存器屬於:未溢出、方向正、允許中斷、符號為正、不是0、沒有輔助進位、奇、沒有進位的狀態。
-
-F:用於搜索指定位置中的字符,返回的是精確的地址
-
-T:單步調試
-
-U:反匯編指令,可以將存在內存中的機器碼反編譯成匯編語言,其中一個參數是起始地址
-
-W:一直沒調試成功,原因應該和L命令相同,windows為了保護硬盤,並不允許在這種情況下使用此命令。
通過學習可以發現立即數在使用時候默認為 \(16\) 進制,並且不需要加H,末尾加H反而會報錯,並且debug中並不區分大小寫。
emu8086也是一個非常好的調試軟件,操作簡單方便網上就可以下載。。
debug在CMD中打不開是因為windows版本過高,可以下載Dosbox
在其中運行調試