汇编--寄存器介绍
寄存器定義
寄存器是中央處理器內(nèi)的組成部份。寄存器是有限存貯容量的高速存貯部件,它們可用來(lái)暫存指令、數(shù)據(jù)和位址。
在中央處理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序計(jì)數(shù)器(PC)。
IR(Instruction Refister): IR存放當(dāng)前正在執(zhí)行的指令。當(dāng)執(zhí)行一條指令時(shí),先把它從內(nèi)存取到數(shù)據(jù)寄存器(DR,Data Register)中,然后再傳送至IR。指令劃分為操作碼和地址碼字段,由二進(jìn)制數(shù)字組成。為了執(zhí)行任何給定的指令,必須對(duì)操作碼進(jìn)行測(cè)試,以便識(shí)別所要求的操作。指令譯碼器就是做這項(xiàng)工作的。指令寄存器中操作碼字段的輸出就是指令譯碼器的輸入。操作碼一經(jīng)譯碼后,即可向操作控制器發(fā)出具體操作的特定信號(hào)。
PC(Program Counter): PC包含當(dāng)前正在執(zhí)行的指令的地址。當(dāng)每個(gè)指令被獲取,程序計(jì)數(shù)器的存儲(chǔ)地址加一。在每個(gè)指令被獲取之后,程序計(jì)數(shù)器指向順序中的下一個(gè)指令。當(dāng)計(jì)算機(jī)重啟或復(fù)位時(shí),程序計(jì)數(shù)器通常恢復(fù)到零。
在中央處理器的算術(shù)及邏輯部件中,包含的寄存器有累加器(ACC)。
ACC(Accumulator): ACC是累加器A縮寫(xiě)。累加器A是一個(gè)具有特殊用途的二進(jìn)制8位寄存器,專(zhuān)門(mén)用來(lái)存放操作數(shù)或運(yùn)算結(jié)果。在CPU執(zhí)行某種運(yùn)算前,兩個(gè)操作數(shù)中的一個(gè)通常應(yīng)放在累加器A中,運(yùn)算完成后累加器A中便可得到運(yùn)算結(jié)果。
8086寄存器概況
8086 有14個(gè)16位寄存器,這14個(gè)寄存器按其用途可分為(1)通用寄存器、(2)指令指針、(3)標(biāo)志寄存器和(4)段寄存器等4類(lèi)。
(1) 通用寄存器有8個(gè), 又可以分成2組,一組是數(shù)據(jù)寄存器(4個(gè)),另一組是指針寄存器及變址寄存器(4個(gè)).
數(shù)據(jù)寄存器分為:
AH&AL=AX(accumulator): 累加寄存器,常用于運(yùn)算;在乘除等指令中指定用來(lái)存放操作數(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個(gè)16位的寄存器可以分為高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。這2組8位寄存器可以分別尋址,并單獨(dú)使用。
另一組是指針寄存器和變址寄存器,包括:
SP(Stack Pointer):堆棧指針,與SS配合使用,可指向目前的堆棧位置;
BP(Base Pointer):基址指針寄存器,可用作SS的一個(gè)相對(duì)基址位置;
SI(Source Index):源變址寄存器可用來(lái)存放相對(duì)于DS段之源變址指針;
DI(Destination Index):目的變址寄存器,可用來(lái)存放相對(duì)于 ES 段之目的變址指針。
這4個(gè)16位寄存器只能按16位進(jìn)行存取操作,主要用來(lái)形成操作數(shù)的地址,用于堆棧操作和變址運(yùn)算中計(jì)算操作數(shù)的有效地址。
(2) 指令指針I(yè)P(Instruction Pointer)
指令指針I(yè)P是一個(gè)16位專(zhuān)用寄存器,它指向當(dāng)前需要取出的指令,當(dāng)BIU從內(nèi)存中取出一個(gè)指令字節(jié)后,IP就自動(dòng)加1,指向下一個(gè)指令字節(jié)。注意,IP指向的是指令地址的段內(nèi)地址偏移量,又稱(chēng)偏移地址(Offset Address)或有效地址(EA,Effective Address)。
(3) 標(biāo)志寄存器FR(Flag Register)
8086有一個(gè)18位的標(biāo)志寄存器FR,在FR中有意義的有9位,其中6位是狀態(tài)位,3位是控制位。
OF: 溢出標(biāo)志位OF用于反映有符號(hào)數(shù)加減運(yùn)算所得結(jié)果是否溢出。如果運(yùn)算結(jié)果超過(guò)當(dāng)前運(yùn)算位數(shù)所能表示的范圍,則稱(chēng)為溢出,OF的值被置為1,否則,OF的值被清為0。
DF: 方向標(biāo)志DF位用來(lái)決定在串操作指令執(zhí)行時(shí)有關(guān)指針寄存器發(fā)生調(diào)整的方向。
IF: 中斷允許標(biāo)志IF位用來(lái)決定CPU是否響應(yīng)CPU外部的可屏蔽中斷發(fā)出的中斷請(qǐng)求。但不管該標(biāo)志為何值,CPU都必須響應(yīng)CPU外部的不可屏蔽中斷所發(fā)出的中斷請(qǐng)求,以及CPU內(nèi)部產(chǎn)生的中斷請(qǐng)求。具體規(guī)定如下:
(1)、當(dāng)IF=1時(shí),CPU可以響應(yīng)CPU外部的可屏蔽中斷發(fā)出的中斷請(qǐng)求;
(2)、當(dāng)IF=0時(shí),CPU不響應(yīng)CPU外部的可屏蔽中斷發(fā)出的中斷請(qǐng)求。
TF:跟蹤標(biāo)志TF。該標(biāo)志可用于程序調(diào)試。TF標(biāo)志沒(méi)有專(zhuān)門(mén)的指令來(lái)設(shè)置或清楚。
(1)、如果TF=1,則CPU處于單步執(zhí)行指令的工作方式,此時(shí)每執(zhí)行完一條指令,就顯示CPU內(nèi)各個(gè)寄存器的當(dāng)前值及CPU將要執(zhí)行的下一條指令。
(2)、如果TF=0,則處于連續(xù)工作模式。
SF: 符號(hào)標(biāo)志SF用來(lái)反映運(yùn)算結(jié)果的符號(hào)位,它與運(yùn)算結(jié)果的最高位相同。在微機(jī)系統(tǒng)中,有符號(hào)數(shù)采用補(bǔ)碼表示法,所以,SF也就反映運(yùn)算結(jié)果的正負(fù)號(hào)。運(yùn)算結(jié)果為正數(shù)時(shí),SF的值為0,否則其值為1。
ZF: 零標(biāo)志ZF用來(lái)反映運(yùn)算結(jié)果是否為0。如果運(yùn)算結(jié)果為0,則其值為1,否則其值為0。在判斷運(yùn)算結(jié)果是否為0時(shí),可使用此標(biāo)志位。
AF: 下列情況下,輔助進(jìn)位標(biāo)志AF的值被置為1,否則其值為0:
(1)、在字操作時(shí),發(fā)生低字節(jié)向高字節(jié)進(jìn)位或借位時(shí);
(2)、在字節(jié)操作時(shí),發(fā)生低4位向高4位進(jìn)位或借位時(shí)。
PF: 奇偶標(biāo)志PF用于反映運(yùn)算結(jié)果中“1”的個(gè)數(shù)的奇偶性。如果“1”的個(gè)數(shù)為偶數(shù),則PF的值為1,否則其值為0。
CF: 進(jìn)位標(biāo)志CF主要用來(lái)反映運(yùn)算是否產(chǎn)生進(jìn)位或借位。如果運(yùn)算結(jié)果的最高位產(chǎn)生了一個(gè)進(jìn)位或借位,那么,其值為1,否則其值為0。)
(4) 段寄存器(Segment Register)
為了運(yùn)用所有的內(nèi)存空間,8086設(shè)定了四個(gè)段寄存器,專(zhuān)門(mén)用來(lái)保存段地址:
CS(Code Segment): 代碼段寄存器;
DS(Data Segment): 數(shù)據(jù)段寄存器;
SS(Stack Segment): 堆棧段寄存器;
ES(Extra Segment): 附加段寄存器。
當(dāng)一個(gè)程序要執(zhí)行時(shí),就要決定程序代碼、數(shù)據(jù)和堆棧各要用到內(nèi)存的哪些位置,通過(guò)設(shè)定段寄存器 CS,DS,SS 來(lái)指向這些起始位置。通常是將DS固定,而根據(jù)需要修改CS。所以,程序可以在可尋址空間小于64K的情況下被寫(xiě)成任意大小。 所以,程序和其數(shù)據(jù)組合起來(lái)的大小,限制在DS 所指的64K內(nèi),這就是COM文件不得大于64K的原因。8086以?xún)?nèi)存做為戰(zhàn)場(chǎng),用寄存器做為軍事基地,以加速工作。
轉(zhuǎn)載于:https://www.cnblogs.com/jerehao/p/5551474.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
- 上一篇: 【Ubuntu】安装Java和Eclip
- 下一篇: 开发错误记录9:Application无