8086 有14個16位寄存器,這14個寄存器按其用途可分為(1)通用寄存器、(2)指令指針、(3)標(biāo)志寄存器和(4)段寄存器等4類。
(1)通用寄存器有8個, 又可以分成2組,一組是數(shù)據(jù)寄存器(4個),另一組是指針寄存器及變址寄存器(4個).數(shù)據(jù)寄存器分為:AH&AL=AX(accumulator):累加寄存器,常用于運(yùn)算;在乘除等指令中指定用來存放操作數(shù),另外,所有的I/O指令都使用這一寄存器與外界設(shè)備傳送數(shù)據(jù).BH&BL=BX(base):基址寄存器,常用于地址索引;CH&CL=CX(count):計(jì)數(shù)寄存器,常用于計(jì)數(shù);常用于保存計(jì)算值,如在移位指令,循環(huán)(loop)和串處理指令中用作隱含的計(jì)數(shù)器.DH&DL=DX(data):數(shù)據(jù)寄存器,常用于數(shù)據(jù)傳遞。他們的特點(diǎn)是,這4個16位的寄存器可以分為高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。
這2組8位寄存器可以分別尋址,并單獨(dú)使用。另一組是指針寄存器和變址寄存器,包括:SP(Stack Pointer):堆棧指針,與SS配合使用,可指向目前的堆棧位置;BP(Base Pointer):基址指針寄存器,可用作SS的一個相對基址位置;SI(Source Index):源變址寄存器可用來存放相對于DS段之源變址指針;DI(Destination Index):目的變址寄存器,可用來存放相對于 ES 段之目的變址指針。
這4個16位寄存器只能按16位進(jìn)行存取操作,主要用來形成操作數(shù)的地址,用于堆棧操作和變址運(yùn)算中計(jì)算操作數(shù)的有效地址。(2) 指令指針I(yè)P(Instruction Pointer)指令指針I(yè)P是一個16位專用寄存器,它指向當(dāng)前需要取出的指令字節(jié),當(dāng)BIU從內(nèi)存中取出一個指令字節(jié)后,IP就自動加1,指向下一個指令字節(jié)。
注意,IP指向的是指令地址的段內(nèi)地址偏移量,又稱偏移地址(Offset Address)或有效地址(EA,Effective Address)。(3)標(biāo)志寄存器FR(Flag Register)8086有一個18位的標(biāo)志寄存器FR,在FR中有意義的有9位,其中6位是狀態(tài)位,3位是控制位。
OF: 溢出標(biāo)志位OF用于反映有符號數(shù)加減運(yùn)算所得結(jié)果是否溢出。如果運(yùn)算結(jié)果超過當(dāng)前運(yùn)算位數(shù)所能表示的范圍,則稱為溢出,OF的值被置為1,否則,OF的值被清為0。
DF:方向標(biāo)志DF位用來決定在串操作指令執(zhí)行時有關(guān)指針寄存器發(fā)生調(diào)整的方向。 IF:中斷允許標(biāo)志IF位用來決定CPU是否響應(yīng)CPU外部的可屏蔽中斷發(fā)出的中斷請求。
但不管該標(biāo)志為何值,CPU都必須響應(yīng)CPU外部的不可屏蔽中斷所發(fā)出的中斷請求,以及CPU內(nèi)部產(chǎn)生的中斷請求。具體規(guī)定如下: (1)、當(dāng)IF=1時,CPU可以響應(yīng)CPU外部的可屏蔽中斷發(fā)出的中斷請求; (2)、當(dāng)IF=0時,CPU不響應(yīng)CPU外部的可屏蔽中斷發(fā)出的中斷請求。
TF:跟蹤標(biāo)志TF。該標(biāo)志可用于程序調(diào)試。
TF標(biāo)志沒有專門的指令來設(shè)置或清楚。(1)如果TF=1,則CPU處于單步執(zhí)行指令的工作方式,此時每執(zhí)行完一條指令,就顯示CPU內(nèi)各個寄存器的當(dāng)前值及CPU將要執(zhí)行的下一條指令。
(2)如果TF=0,則處于連續(xù)工作模式。SF:符號標(biāo)志SF用來反映運(yùn)算結(jié)果的符號位,它與運(yùn)算結(jié)果的最高位相同。
在微機(jī)系統(tǒng)中,有符號數(shù)采用補(bǔ)碼表示法,所以,SF也就反映運(yùn)算結(jié)果的正負(fù)號。運(yùn)算結(jié)果為正數(shù)時,SF的值為0,否則其值為1。
ZF: 零標(biāo)志ZF用來反映運(yùn)算結(jié)果是否為0。如果運(yùn)算結(jié)果為0,則其值為1,否則其值為0。
在判斷運(yùn)算結(jié)果是否為0時,可使用此標(biāo)志位。 AF:下列情況下,輔助進(jìn)位標(biāo)志AF的值被置為1,否則其值為0: (1)、在字操作時,發(fā)生低字節(jié)向高字節(jié)進(jìn)位或借位時; (2)、在字節(jié)操作時,發(fā)生低4位向高4位進(jìn)位或借位時。
PF:奇偶標(biāo)志PF用于反映運(yùn)算結(jié)果中“1”的個數(shù)的奇偶性。如果“1”的個數(shù)為偶數(shù),則PF的值為1,否則其值為0。
CF:進(jìn)位標(biāo)志CF主要用來反映運(yùn)算是否產(chǎn)生進(jìn)位或借位。如果運(yùn)算結(jié)果的最高位產(chǎn)生了一個進(jìn)位或借位,那么,其值為1,否則其值為0。
) 4)段寄存器(Segment Register)為了運(yùn)用所有的內(nèi)存空間,8086設(shè)定了四個段寄存器,專門用來保存段地址:CS(Code Segm。
數(shù)據(jù)寄存器主要用來保存操作數(shù)和運(yùn)算結(jié)果等信息,從而節(jié)省讀取操作數(shù)所需占用總線和訪問存儲器的時間。
32位CPU有4個32位的通用寄存器EAX、EBX、ECX和EDX。對低16位數(shù)據(jù)的存取,不會影響高16位的數(shù)據(jù)。
這些低16位寄存器分別命名為:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。 4個16位寄存器又可分割成8個獨(dú)立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每個寄存器都有自己的名稱,可獨(dú)立存取。
程序員可利用數(shù)據(jù)寄存器的這種“可分可合”的特性,靈活地處理字/字節(jié)的信息。 寄存器EAX通常稱為累加器(Accumulator),用累加器進(jìn)行的操作可能需要更少時間。
可用于乘、除、輸入/輸出等操作,使用頻率很高; 寄存器EBX稱為基地址寄存器(Base Register)。它可作為存儲器指針來使用; 寄存器ECX稱為計(jì)數(shù)寄存器(Count Register)。
在循環(huán)和字符串操作時,要用它來控制循環(huán)次數(shù);在位操作中,當(dāng)移多位時,要用CL來指明移位的位數(shù); 寄存器EDX稱為數(shù)據(jù)寄存器(Data Register)。 在進(jìn)行乘、除運(yùn)算時,它可作為默認(rèn)的操作數(shù)參與運(yùn)算,也可用于存放I/O的端口地址。
在16位CPU中,AX、BX、CX和DX不能作為基址和變址寄存器來存放存儲單元的地址,在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不僅可傳送數(shù)據(jù)、暫存數(shù)據(jù)保存算術(shù)邏輯運(yùn)算結(jié)果,而且也可作為指針寄存器,所以,這些32位寄存器更具有通用性。
16位處理器的典型產(chǎn)品是Inter的8086微處理器,以及同時推出的數(shù)學(xué)協(xié)處理器——8087。這兩款芯片使用互相兼容的指令集,但在8087指令集中增加了一些專門用于對數(shù)、指數(shù)和三角函數(shù)等數(shù)學(xué)計(jì)算的指令。由于這些指令應(yīng)用于8086和8087,因此被人們統(tǒng)稱為x86指令集。
1979年Inter公司推出了8086的簡化版--8088.它仍是16位微處理器,內(nèi)含29000個晶體管,時鐘頻率為4.77MHz,地址總線為20位,可以尋址1MB的內(nèi)存。8088的內(nèi)部數(shù)據(jù)總線是16位,外部數(shù)據(jù)總線是8位。1981年,8088芯片被首次用于IBM PC當(dāng)中,開創(chuàng)了個人計(jì)算機(jī)的新時代。
寄存器是中央處理器內(nèi)的組成部份。
寄存器是有限存貯容量的高速存貯部件,它們可用來暫存指令、數(shù)據(jù)和位址。在中央處理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序計(jì)數(shù)器(PC)。
在中央處理器的算術(shù)及邏輯部件中,包含的寄存器有累加器(ACC)。 寄存器是內(nèi)存階層中的最頂端,也是系統(tǒng)獲得操作資料的最快速途徑。
寄存器通常都是以他們可以保存的位元數(shù)量來估量,舉例來說,一個 “8 位元寄存器”或 “32 位元寄存器”。寄存器現(xiàn)在都以寄存器檔案的方式來實(shí)作,但是他們也可能使用單獨(dú)的正反器、高速的核心內(nèi)存、薄膜內(nèi)存以及在數(shù)種機(jī)器上的其他方式來實(shí)作出來。
寄存器通常都用來意指由一個指令之輸出或輸入可以直接索引到的暫存器群組。更適當(dāng)?shù)氖欠Q他們?yōu)?“架構(gòu)寄存器”。
例如,x86 指令及定義八個 32 位元寄存器的集合,但一個實(shí)作 x86 指令集的 CPU 可以包含比八個更多的寄存器。 寄存器是CPU內(nèi)部的元件,寄存器擁有非常高的讀寫速度,所以在寄存器之間的數(shù)據(jù)傳送非常快。
[編輯本段]寄存器用途 1.可將寄存器內(nèi)的數(shù)據(jù)執(zhí)行算術(shù)及邏輯運(yùn)算; 2.存于寄存器內(nèi)的地址可用來指向內(nèi)存的某個位置,即尋址; 3.可以用來讀寫數(shù)據(jù)到電腦的周邊設(shè)備。
1. 直接輸入、更改、跟蹤、運(yùn)行匯編程序 2. 觀察操作系統(tǒng)的內(nèi)容;? 3. 查看ROM BIOS的內(nèi)容;? 4. 觀察更改RAM內(nèi)部的設(shè)置值;? 5. 以扇區(qū)或文件的方式讀寫軟盤數(shù)據(jù)。
? 在DEBUG中地址用段地址與段內(nèi)地址來表示,而段地址可以明確地指出來,也可以用一個段指示器(段寄存器)來代表,用段寄存器表示時,其段地址就是此寄存器的內(nèi)含值:? 如:用段地址和段內(nèi)地址表示FOFF:0100? 用段寄存器和段內(nèi)地址表示CSF:0100←CS指向F000? 下面列出了常用命令用法。 -A 地址 從指定地址開始編寫小匯編程序,按兩個回車鍵結(jié)束編輯 -U 地址 從指定地址開始反匯編32字節(jié)的機(jī)器指令,缺省地址則從上一U命令繼續(xù) -D 始址 終址 以16進(jìn)制/Asc字符對照方式顯示指定內(nèi)存范圍的數(shù)據(jù),每行顯示10H個字節(jié) -E 地址 值表 用給出的值表(空格分隔)替換指定地址開始的內(nèi)存單元,例:-E 100 'v' 1F 'hello' -N 文件名 為后續(xù)的L/W命令約定所操作的文件名 -L 地址 將N命令所指定文件的內(nèi)容讀入到指定內(nèi)存位置。
另,邏輯卷扇區(qū)直接讀:-L 地址 邏卷號 起始邏扇號 扇數(shù) -W 地址 將BX-CX個字節(jié)的內(nèi)存數(shù)據(jù)寫入N命令指定的文件中。另,邏輯卷扇區(qū)直接寫:-W 地址 邏卷號 起始邏扇號 扇數(shù) -R 寄存器名 顯示并允許修改指定寄存器的值 -G=始址 終址 執(zhí)行指定內(nèi)存中的機(jī)器指令程序 -T=地址 單步執(zhí)行機(jī)器指令,缺省地址則從上一T命令繼續(xù)。
另,繼續(xù)跟蹤m條指令:-T m 讀取c:卷的引導(dǎo)扇區(qū),并保存到Boot.1文件中,并簡單分析引導(dǎo)程序的前面幾條指令: -L 1000 2 0 1 -N boot.1 -R bx ;輸入0000 -R cx ;輸入0200 -W 1000 -U 1000 讀取第一個硬盤上的主引導(dǎo)扇區(qū),并保存到MB.1文件中,在屏幕上顯示硬盤分區(qū)表數(shù)據(jù): -A 100 yyyy:0100 mov dx,0080 yyyy:01xx mov cx,0001 yyyy:01xx mov ax,yyyy yyyy:01xx mov es,ax yyyy:01xx mov bx,1000 yyyy:01xx mov ax,0201 yyyy:01xx int 13 yyyy:01zz nop -G=yyyy:0100 01zz -N mb.1 -R bx ;輸入0000 -R cx ;輸入0200 -W 1000 -D 11be 11ff debugging命令 debugging命令概述 獲得路由器中交換的報文和幀的細(xì)節(jié)信息 用于調(diào)試信息 debugging命令使用注意事項(xiàng) 不使用debug命令監(jiān)控正常的網(wǎng)絡(luò)運(yùn)行 在網(wǎng)絡(luò)使用的低峰期使用 不要輕易使用類似debugging all之類的命令 使用debugging命令后,應(yīng)立即以“undo debugging”命令終止debugging命令的執(zhí)行。 Debugger "Debugger"這個詞按它的英文字面意思來講是這樣一種“裝置”(-er),這種裝置可以“消除”(De-)“系統(tǒng)中的缺陷”(bug)。
然而事實(shí)上,迄今為止我們經(jīng)常使用到的"Debugger"只是用來幫助我們進(jìn)行Debug的工具,"Debugger"本身不能自動完成"Debug"。我們可以回想一下我們是如何進(jìn)行Debug的,在進(jìn)行Debug的過程中,我們通過Debugger來完成以下工作: (1)監(jiān)視“Debug對象”的狀態(tài); (2)控制“Debug對象”的運(yùn)行; 這些工作可以為“發(fā)現(xiàn)Debug對象中存在的問題”以及“對解決問題方案的檢驗(yàn)”提供有用的信息。
監(jiān)控工作有時只需要由軟件就可以完成,有時不僅需要軟件支持,還需要硬件的支持。 Debugger除了被用來Debug,還被用來幫助我們理解“Debug的對象”內(nèi)部結(jié)構(gòu),因?yàn)槲覀冇玫降腄ebugger能夠完成對“Debug對象”的監(jiān)控工作,在監(jiān)控的過程中可以獲取“Debug對象”動態(tài)特征的信息,這對我們理解其結(jié)構(gòu)是非常有用的。
關(guān)于更詳細(xì)的介紹和研究可以參考國人原創(chuàng)的《軟件調(diào)試》 ,這。
聲明:本網(wǎng)站尊重并保護(hù)知識產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請?jiān)谝粋€月內(nèi)通知我們,我們會及時刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習(xí)鳥. 頁面生成時間:4.100秒