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 ...