
大家晚上好。今天是匯編學(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)工具。
