這款神器幫你鉆到CPU和內(nèi)存的肚子里!


大家晚上好。今天是匯編學(xué)習(xí)的第三彈!前面兩節(jié)簡(jiǎn)單地闡述了CPU和內(nèi)存如何通信以及物理地址的確定方法。今天開(kāi)始實(shí)戰(zhàn)演練下如何操縱寄存器和內(nèi)存,因?yàn)閸u主是基于8086來(lái)學(xué)習(xí)的匯編,先不談Linux,這里我們借助一款神器來(lái)通透的觀察寄存器和內(nèi)存——DosBox。

DosBox


體驗(yàn)一個(gè)裸機(jī)的環(huán)境,在一個(gè)沒(méi)有操作系統(tǒng)的環(huán)境中直接對(duì)硬件編程是很酷的一件事情。學(xué)習(xí)匯編需要使用debug來(lái)幫助我們更好地了解計(jì)算機(jī)系統(tǒng)。王爽老師的《匯編語(yǔ)言》上級(jí)環(huán)境使用的是dos系統(tǒng),我們現(xiàn)在一般不會(huì)裝dos系統(tǒng),為了模擬dos環(huán)境的debug,可以使用DosBox這一軟件再配合相應(yīng)的編譯器masm、鏈接器link和調(diào)試器debug來(lái)展開(kāi)匯編的學(xué)習(xí)。關(guān)于軟件的下載和相應(yīng)工具島主已經(jīng)打包上傳,后臺(tái)回復(fù)匯編,即可獲取。

閑言少敘,書(shū)歸正傳。

今天主要介紹debug的常用命令。

dosbox安裝后的界面如圖所示。

在電腦上任意一個(gè)位置新建個(gè)目錄作為工作區(qū)。島主在e盤(pán)建立了dos文件夾。每次進(jìn)入軟件都需要對(duì)工作區(qū)的路徑進(jìn)行掛載:

?mount?c??e:\dos

為了免我們一打開(kāi)就要輸入這個(gè)掛載的命令,我們找到DOSBox安裝根目錄下的DOSBox 0.74-3 Options.bat這個(gè)配置文件,可以看到它是一個(gè)windows批處理文件,雙擊它在文件的末尾我們可以找到[autoexec]開(kāi)頭的信息,添加上我們需要讓程序一開(kāi)始就執(zhí)行的命令,最后保存就行了,下一次打開(kāi)DOSBox程序后,程序就自動(dòng)運(yùn)行我們?cè)谂渲梦募袑?xiě)好的命令了。

?[autoexec]
?#?Lines?in?this?section?will?be?run?at?startup.
?#?You?can?put?your?MOUNT?lines?here.
?
?mount?C?E:\dos
?C:

8086CPU共有14個(gè)寄存器:

  • 通用寄存器:ax,bx,cx,dx

  • 變址寄存器:ci,di

  • 指針寄存器:sp,bp

  • 指令指針寄存器:ip

  • 段寄存器:cs,ds,ss,es

  • 標(biāo)志寄存器:psw

注意,寄存器不區(qū)分大小寫(xiě)

在掌握上了上述14個(gè)寄存器的含義后我們用debug工具簡(jiǎn)單做下演示。

debug最常用的六個(gè)指令,寫(xiě)成兩個(gè)單詞比較好記憶:red uat(紅色的uat測(cè)試)。

首先輸入:debug,進(jìn)入調(diào)試模式。

r:查看或改變CPU寄存器的內(nèi)容

直接輸入r可以查看所有寄存器的值以及下一條執(zhí)行的指令

輸入r + 寄存器即可改變寄存器的值。如下圖所示。

d:命令查看內(nèi)存中的內(nèi)容

直接輸入d可以查看debug預(yù)設(shè)的內(nèi)存值。輸入CS:IP加上偏移量可以查看任意你想觀察的內(nèi)存值。

e命令:改寫(xiě)內(nèi)存中的內(nèi)容

e和d相結(jié)合即可查看改寫(xiě)后的內(nèi)容。

u:將內(nèi)存中的機(jī)器指令翻譯成匯編指令

匯編指令:

?mov?ax,?0123
?mov?bx,3
?mov?ax,bx
?add?ax,bx

對(duì)應(yīng)機(jī)器碼:

?B8?23?01
?BB?03?00
?89?D8
?01?D8

我們通過(guò)e命令將上述機(jī)器碼寫(xiě)入內(nèi)存,然后執(zhí)行u即可看到機(jī)器指令被翻譯成了匯編指令,且一一對(duì)應(yīng)。

a:以匯編指令的格式在內(nèi)存中寫(xiě)入一條機(jī)器指令

相比u命令,我們更常用a命令,畢竟我們是編寫(xiě)匯編,不是寫(xiě)機(jī)器碼。我們將上述的匯編指令寫(xiě)入3000:0,然后執(zhí)行u查看,沒(méi)有問(wèn)題,依然一一對(duì)應(yīng)。

t:執(zhí)行一條機(jī)器指令

該命令就相當(dāng)于vs中的單步運(yùn)行語(yǔ)句。我們用r命令將cs和ip修改為上述操作的3000:0地址段,單步執(zhí)行t觀察寄存器的變化。

總結(jié)

  • 本文介紹了dos環(huán)境下debug調(diào)試匯編程序的方法,常用的命令為reduat;

  • 后臺(tái)回復(fù)?匯編?即可獲取軟件安裝包及相應(yīng)工具。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容