初識彙編 Debug命令

2021-07-23 06:01:55 字數 2240 閱讀 6703

1,彙編debug操作符:

•debug命令操作符:

▫r命令:檢視、改變cpu暫存器的內容

▫d命令:以16進製制形式顯示一塊記憶體區域的內容

▫e命令:改寫記憶體中的內容

▫a命令:以彙編指令的格式在記憶體中寫入一條機器指令

▫u命令:將記憶體中的機器指令翻譯為彙編指令

▫t命令:執行一條機器指令

▫g命令:執行到指定位置(斷點),如「g cs:0012」;

▫p命令:執行子程式呼叫、迴圈、中斷、重複字串操作等指令,停止於下條指令。

▫q命令:退出debug

•說明:

▫在debug中輸入或顯示的資料都是十六進製制形式;

▫debug命令是單個字母,命令和引數的大小寫可混合輸入;

▫當命令出現語法錯誤時,將在出錯位置顯示 「^error」;

▫使用t命令執行一條指令前,一定要確保其有效。無效指令可能導致處理器死鎖、debug無法響應、甚至系統重新引導。

2,彙編實驗之hello world:

原始檔如下:

具體如何操作實現,匯程式設計序應該如何編譯嗎,請參考如下部落格:

(2),輸入指令進入debug:

(3),使用-r指令,檢視cpu暫存器的內容:

8086cpu共有14個暫存器,分別是ax、bx、cx、dx、si、di、sp、bp、ip、cs、ss、ds、es、psw

其中包括:

4個資料暫存器(ax,bx,cx,dx)

2個指標暫存器(sp和bp)

6個段暫存器(es、cs、ss、ds、fs和gs)

1個指令指標暫存器(ip)

1個標誌暫存器(eflags)

(4)輸入t5命令,檢視單步除錯中各個暫存器中資料的變化

在這裡為了方便檢視,我們用紅色標出了

其中ax變化:ffff—076a—096a

經過 mov ax,067a 暫存器ax從ffff變為076a,

在這裡我們把076a這個值儲存在ax中

經過 mov ah,09 暫存器ax從076a變為096a

在這裡我們把09這個值儲存在ax中的高8位中

其中ip變化:0000—0003—0005—0009

指令指標ip是乙個16位專用暫存器,

當biu從記憶體中取出乙個指令位元組後,ip就自動加1,指向下乙個指令位元組。

•注意,ip指向的是指令位址的段內位址偏移量,又稱偏移位址(offset address)或有效位址(ea,effective address)

其中位址變化:076b:0003—076b:0005—076b:0009—076b:000b

左邊顯示的4位為段位址,右邊顯示的4位為偏移位址,

實體地址的計算公式為:段位址×10h/16h+偏移位址,

其中右邊的ds是資料段的位址,是那個位址的資料

是lea將那個偏移位址的資料移入暫存器產生的。

4),使用-p指令,檢視源**經過操作之後要輸出的結果:

在學習過程,我發現的比較好的彙編相關部落格與大家分享:

(1)

(2)

(3)

(4)

(5)

組合語言除錯DEBUG命令

1 顯示命令d d 位址 d 範圍 如不指定範圍,一次顯示8行 16個位元組。d 預設段暫存器為ds,當前偏移位址 d ds 100 d cs 200 d 200 100 d 200 200為偏移位址,預設段暫存器ds d ds 100 110 d 100 l 102.修改命令e e 位址 從指定位...

彙編(1)初識彙編

7.記憶體位址空間 8.主機板 9.介面卡 10.各類儲存器晶元 組合語言是直接在硬體之上工作的程式語言,首先要了解硬體系統的結構,才能有效的應用組合語言對其程式設計 計算機能讀懂的只有機器指令,什麼是機器指令?例1 指令 01010000 push ax 例2 s 768 12288 1280 機...

8086彙編 Debug 使用

debug是dos系統中的著名的除錯程式,也可以執行在windows系統實模式下。使用debug程式,可以檢視cpu各種暫存器中的內容 記憶體的情況,並且在機器指令級跟蹤程式的執行。常用指令 1 在dos提示符下輸入命令 debug使用方式 一 通過debug執行程式 debug 程式名稱.exe ...