0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

寄存器的電路結(jié)構(gòu)與慣常用法

jf_78858299 ? 來源:硬件底褲 ? 作者:酸奶蓋子 ? 2023-02-14 15:18 ? 次閱讀

寄存器對于學習集成電路知識十分重要,不管是單片機亦或是現(xiàn)代計算機的CPU離開寄存器都無法快速的進行操作。

本文將探究什么是寄存器,寄存器的電路結(jié)構(gòu),寄存器與內(nèi)存的異同以及寄存器的慣常用法。*

1、寄存器

寄存器是處理器中用來存儲數(shù)據(jù)指令的電子元部件。例如在PC中數(shù)據(jù)由硬盤讀取到內(nèi)存,當CPU發(fā)起請求后數(shù)據(jù)由內(nèi)存轉(zhuǎn)儲到CPU緩存中。

CPU緩存是SRAM,位于處理器內(nèi)部,與ALU通過數(shù)據(jù)總線連接,物理距離SS是所有存儲設備中最短的。

在前文中我們探究了內(nèi)存的機理,內(nèi)存由DRAM組成,每位DRAM由一個MOS管與電容構(gòu)成,而電容充電充電時間常數(shù)的大小與電路的電阻有關(guān),按照下式計算:

圖片

其中R是電阻;C是電容。

電路電阻和電容決定了DRAM響應速度有最大極限,SRAM由觸發(fā)器組成,沒有如電容、電感類的元器件,那么我們可以通過麥克斯韋電磁學方程對導體中電流速度進行定量描述。

電流在無損耗下,SRAM速度為真空中光速,考慮到電路中的阻抗,速度遠小于C。并可得出以下公式:

圖片

其中圖片為電子在阻抗電路中移動速度;Z是阻抗;圖片分別是SRAM速度、DRAM速度;S為與ALU距離。

圖片

2、寄存器電路結(jié)構(gòu)

寄存器由觸發(fā)器與鎖存器組成,觸發(fā)器負責儲存數(shù)據(jù),鎖存器負責保持數(shù)據(jù)。

我們制造一個由或門構(gòu)成的反饋電路,如圖①。

0 OR 0 = 0;經(jīng)反饋為0;

1 OR 0 = 1;& 1 OR 0 = 1;經(jīng)反饋后為1;

1 OR 1 = 1;經(jīng)反饋后為1;

在此電路中一旦輸出為1不管如何改變A都無法改變輸出。此電路正好可以用作記錄1的電路。

圖片

同樣的,如果我們用與門構(gòu)建反饋電路。

1 AND 1 =1;經(jīng)反饋后輸出1。

0 AND 0 = 0;0 AND 1 = 0;1 AND 0 = 0;經(jīng)反饋后都為0。

在此電路中一旦輸出為0不管如何改變A都無法改變輸出。此電路正好可以用作記錄0的電路。

圖片

此時將兩個電路以下圖方式組合起來便稱為:AND-OR鎖存器。

圖片

它有兩個輸入,SET 將輸出置1,RESET輸出置0。

SET = 1;RESET = 1;OUTPUT = 0;

SET = 1;RESET = 0;OUTPUT = 1;

SET = 0;RESET = 1;OUTPUT = 0;

SET = 0;RESET = 0;OUTPUT = 之前數(shù)據(jù),也就說電路將數(shù)據(jù)鎖存起來了。

之所以叫“鎖存”,是因為它“鎖定”一個數(shù)據(jù)并保存狀態(tài)。將數(shù)據(jù)放入叫:寫入;數(shù)據(jù)輸出叫:讀取。

如果SET與RESET兩根線不容易記憶,那么可以使用一些邏輯門構(gòu)成數(shù)據(jù)輸入與寫入使能。

圖片

將相關(guān)電路封裝起來,并使用線矩陣進行連接就可以支持多位數(shù)據(jù)位輸入輸出。

圖片

處理器中寄存器有很多,為了方便使用,我們一般將寄存器編號、命名。名字對應寄存器功能,寄存器編號對應寄存器地址。

3、寄存器慣常用法

我們本次匯編學習是基于80386進行的。

80386共提供7種類型的32位寄存器,如下:

通用寄存器(EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI)

段寄存器(CS、SS、DS、ES、FS、GS)

指令指針寄存器和標志寄存器(EIP、EFLAGS)

系統(tǒng)表寄存器(GDTR、IDTR、LDTR、TR)

控制寄存器(CR0、CR1、CR2、CR3、CR4)

調(diào)試寄存器(DR0、DR1、DR2、DR3、DR4、DR5、DR6、DR7)

** 測試寄存器(TR6、TR7)**

圖片

一、通用寄存器

一組八個通用寄存器是對8086/80286通用寄存器的32位擴展,其用法與在8086/80286中相似,支持8位、16位、32位操作,進行32位操作是,寄存器名稱前面冠以“E”。

這八個寄存器的名稱如下:EAX(累加器)、EBX(基址)、ECX(計數(shù))、EDX(數(shù)據(jù))、ESP(棧指針)、EBP(基址指針)、ESI(源變址)、EDI(目的變址)。

二、段寄存器

80386比8086/80286增加了兩個段寄存器FS、GS。

除CS支持代碼段,SS支持堆棧段外,程序員可以利用其它的所有段寄存器支持數(shù)據(jù)段。

每個段寄存器對應這一個64位高速緩存器(有些資料中說有96位,但值使用其中的64位),這在8086中是沒有的(在80286中為48位),它的具體作用將另文介紹。

三、指令指針寄存器和標志寄存器

指令寄存器EIP是對8086/80286指令指針寄存器的32位擴展,它包含著待執(zhí)行指令的32位偏移量,該值總是相對CS所代表的段基址而言的。

標志寄存器也是對8086/80286標志寄存器的32位擴展,其定義如下(這張圖截自Intel關(guān)于IA32架構(gòu)的最新文檔):

圖片

其中OF、DF、IF、TF、SF、ZF、AF、PF和CF在8086中就已經(jīng)存在,請參考相關(guān)資料。

IOPL (I/O Privilege Level)是從80286開始出現(xiàn)的,占2個bit表示I/O特權(quán)級,如果當前特權(quán)級小于或等于IOPL,則可以執(zhí)行I/O操作,否則將出現(xiàn)一個保護性異常。IOPL只能由特權(quán)級為0的程序或任務來修改。

NT (Nested Task)也是從80286開始出現(xiàn)的,表示嵌套任務,用于控制中斷返回指令IRET,當NT=0時,用堆棧中保存的值恢復EFLAGS、CS和EIP,從而實現(xiàn)返回;若NT=1,則通過任務切換實現(xiàn)中斷返回。

下面的標志位是80386以后的CPU才有的標志。

VM (Virtual-8086 mode)表示虛擬8086模式,如果VM被置位且80386已出于保護模式下,則CPU切換到虛擬8086模式,此時,對段的任何操作又回到了實模式,如同在8086下運行一樣。

RF(Resume flag)表示恢復標志(也叫重啟標志),與調(diào)試寄存器一起用于斷點和單步操作,當RF=1 時,下一條指令的任何調(diào)試故障將被忽略,不產(chǎn)生異常中斷。當RF=0時,調(diào)試故障被接受,并產(chǎn)生異常中斷。用于調(diào)試失敗后,強迫程序恢復執(zhí)行,在成功執(zhí)行每條指令后,RF自動復位。

AC (Alignment check)表示對齊檢查。這個標志是80486以后的CPU才有的。當AC=1且CR0中的AM=1時,允許存儲器進行地址對齊檢查,若發(fā)現(xiàn)地址未對齊,將產(chǎn)生異常中斷。所謂地址對齊,是指當訪問一個字(2字節(jié)長)時,其地址必須是偶數(shù)(2的倍數(shù)),當訪問雙字(4字節(jié)長)時,其地址必須是4的倍數(shù)。

但是只有運行在特權(quán)級3的程序才執(zhí)行地址對齊檢查,特權(quán)級0、1、2忽略該標志。

VIF (Virtual interrupt flag)表示虛擬中斷標志。以下的三個標志是Pentium以后的CPU才有的。當VIF=1時,可以使用虛擬中斷,當VIF=0時不能使用虛擬中斷。該標志要和下面的VIP和CR4中的VME配合使用。

VIP (Virtual interrupt pending flag)表示虛擬中斷掛起標志。當VIP=1時,VIF有效,VIP=0時VIF無效。

ID (Identification flag)表示鑒別標志。該標志用來只是Pentium CPU是否支持CPUID的指令。

實際上,如果不編寫操作系統(tǒng),大部分標志可能很難得用到一次,有個印象就好了,用到了再去查不遲。

四、系統(tǒng)表寄存器

80386 中有4個系統(tǒng)表寄存器,分別是全局描述符表寄存器(GDTR)、中斷描述符表寄存器(IDTR)、局部描述符表寄存器(LDTR)、任務狀態(tài)寄存器(TR)。系統(tǒng)表寄存器用于在保護方式下,管理4 個系統(tǒng)表,由于只能在保護方式下使用,因此又稱為保護方式寄存器。有關(guān)描述附表的問題,另文介紹。

五、控制寄存器

80386的控制寄存器有4個,其中CR1保留以后使用,從Pentium開始,又增加了一個CR4,CR0的低16位包含了與80286的MSW一致的位定義,保持了和80286的兼容,同時也兼容了從80286開始的兩條指令LMSW/SMSW,其基本定義如下:

圖片

CR0中各位含義如下:

·PE (Protection Enable)保護模式允許,PE=0表示CPU工作在實模式,PE=1表示CPU工作在保護模式

·MP (Monitor Coprocessor)監(jiān)控協(xié)處理器,MP=1表示協(xié)處理器在工作,MP=0表示協(xié)處理器未工作。

·EM (Emulation)協(xié)處理器仿真,當MP=0,EM=1時,表示正在使用軟件仿真協(xié)處理器工作。

·TS (Task Switched)任務轉(zhuǎn)換,每當進行任務轉(zhuǎn)換時,TS=1,任務轉(zhuǎn)換完畢,TS=0。TS=1時不允許協(xié)處理器工作。

以上4個定義從80286開始,下面的2個定義從80386開始存在

·ET (Extension Type)處理器擴展類型,反映了所擴展的協(xié)處理器的類型,ET=0為80287,ET=1為80387。

·PG (Paging)頁式管理機制使能,PG=1時頁式管理機制工作,否則不工作。

從80486開始又增加了如下位定義。

·NE (Numeric Error)數(shù)值異常中斷控制,NE=1時,如果運行協(xié)處理器指令發(fā)生故障,則用異常中斷處理,NE=0時,則用外部中斷處理。

·WP (Write Protect)寫保護,當WP=1時,對只讀頁面進行寫操作會產(chǎn)生頁故障。

·AM(Alignment Mask)對齊標志,AM=1時,允許對齊檢查,AM=0時不允許,關(guān)于對齊,在EFLAGS的AC標志時介紹過,在80486以后的CPU中,CPU進行對齊檢查需要滿足三個條件,AC=1、AM=1并且當前特權(quán)級為3。

·NW (Not Write-through)和CD(Cache Disable),這兩個標志都是用來控制CPU內(nèi)部的CACHE的,當NW=0且CD=0時,CACHE使能,其它的組合說起來比較復雜,如果有讀者真的想搞清楚的話,可以參閱《Intel? 64 and IA-32 Architectures》中的“Software Developer’s Manual Volume 3A”這一冊,在第10章對這兩個標志的各種組合有比較詳細的說明。

CR1保留未用;CR2存放引起頁故障的線性地址,只有在PG=1時,CR2才有效,當頁故障處理程序被激活時,壓入頁故障處理程序堆棧中的錯誤碼提供頁故障的狀態(tài)信息。

CR3的bit12--bit31存放頁目錄的基地址,因為也目錄總是頁對齊的(一頁為4K),所以頁目錄基地址從bit12開始就可以了。只有當CR0中的PG=1時,CR3的頁目錄基地址才有效。

從80486開始,在CR3的低12位定義了兩個控制位,如下:

·PCD (Page-level Cache Disable)頁CACHE禁止,當PCD=0時,頁目錄表進行高速緩存,PCD=1時,不進行高速緩存;該位控制PCD引腳控制外部CACHE工作還是不工作。

·PWT (Page-level Writes Transparent),CACHE的寫入分為透寫(Write-Through)和回寫(Write-Back),80486以上的CPU內(nèi)部的CACHE都是透寫的,但對外部CACHE而言,允許某些頁是回寫的,而另一些頁是透寫的,當PWT=1時,外部CACHE對頁目錄進行透寫,否則進行回寫;此位驅(qū)動PWT引腳以控制外部CACHE是透寫還是回寫。

CR4是從Pentium CPU開始出現(xiàn)的。

·VME (Virtual-8086 Mode Extensions)虛擬8086方式擴展,VME=1允許使用虛擬8086擴展模式,否則只能使用80386/80486的虛擬8086模式。

·PVI (Protected-Mode Virtual Interrupts)保護模式虛擬中斷,PVI=1時,在保護模式下支持虛擬中斷標志VIF(EFLAGS中),PVI=0則不支持虛擬中斷標志。

·TSD (Time Stamp Disable)時間戳禁止,TSD=1時,允許在特權(quán)級為0的程序中執(zhí)行RDTSC指令(讀時間戳計數(shù)指令),TSD=0時,允許任何特權(quán)級執(zhí)行RDTSC指令。

·DE (Debugging Extensions)調(diào)試擴展,

·PSE (Page Size Extensions)頁大小擴展,PSE=1時,頁大小可以擴展到2M或4M,PSE=0時,頁大小只能是4K.

·PAE (Physical Address Extension)物理地址擴展,PAE=1時,頁物理地址可以擴展到36bits以上,PAE=0時只能用32bits的物理地址。

·MCE (Machine-Check Enable)硬件檢查使能,Pentium以后的CPU有一種硬件檢測功能,MCE=1時允許使用該功能。

·PGE (Page Global Enable)全局頁使能,PGE=1時,允許使用全局頁,PGE=0時禁止使用全局頁。

·PCE (Performance-Monitoring Counter Enable)性能監(jiān)視計數(shù)器使能,當PCE=1時,允許在任何保護級下執(zhí)行RDPMC指令,PCE=0時,只有特權(quán)級0的程序可以執(zhí)行RDPMC指令。

·OSFXSR (Operating System Support for FXSAVE and FXRSTOR instructions)

·OSXMMEXCPT (Operating System Support for Unmasked SIMD Floating-Point Exceptions)

·VMXE (VMX-Enable Bit)VMX使能位,VMXE=1時,允許VMX操作。

·SMXE (SMX-Enable Bit)SMX使能位,SMXE=1時,允許SMX操作。

·OSXSAVE (XSAVE and Processor Extended States-Enable Bit)

六、調(diào)試寄存器

一共有8個調(diào)試寄存器DR0--DR7,DR0-DR3可以分別設置4個斷點的線性地址,DR4-DR5保留未用,DR6是斷點狀態(tài)寄存器,DR7是斷點控制寄存器(包括斷點類型、斷點長度,斷點開放/禁止)

七、測試寄存器

一共有8個測試寄存器TR0--TR7,TR0-TR2保留,TR3-TR5用作CACHE測試,TR6為命令測試寄存器,TR7為測試數(shù)據(jù)寄存器。

參考文獻:

1、 INTEL 80386 PROGRAMMER'S REFERENCE MANUAL 1986 (mit.edu)

2、 https://www.cnblogs.com/darknife/p/3159059.html

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5253

    瀏覽量

    119212
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10702

    瀏覽量

    209406
  • 計算機
    +關(guān)注

    關(guān)注

    19

    文章

    7174

    瀏覽量

    87160
收藏 人收藏

    評論

    相關(guān)推薦

    寄存器是什么?怎么操作寄存器點亮LED燈?

    寄存器,是集成電路中非常重要的一種存儲單元,通常由觸發(fā)組成。在集成電路設計中,寄存器可分為電路
    的頭像 發(fā)表于 07-21 16:59 ?3623次閱讀
    <b class='flag-5'>寄存器</b>是什么?怎么操作<b class='flag-5'>寄存器</b>點亮LED燈?

    線性移位寄存器

    線性移位寄存器 用移位寄存器可以構(gòu)成序列信號發(fā)生,其電路結(jié)構(gòu)如下圖所示。組合電路從移位
    發(fā)表于 01-12 14:14 ?1906次閱讀
    線性移位<b class='flag-5'>寄存器</b>

    寄存器,寄存器是什么意思

    寄存器,寄存器是什么意思 寄存器定義  寄存器是中央處理內(nèi)的組成部分。寄存器是有限存貯容量
    發(fā)表于 03-08 14:26 ?2.2w次閱讀

    數(shù)據(jù)寄存器,數(shù)據(jù)寄存器是什么意思

    數(shù)據(jù)寄存器,數(shù)據(jù)寄存器是什么意思 數(shù)據(jù)寄存器數(shù)據(jù)寄存器包括累加AX、基址寄存器BX、計數(shù)
    發(fā)表于 03-08 14:38 ?1.2w次閱讀

    CC2530中常用的控制寄存器

    最全最全的CC2530常用到的控制寄存器資料,方便查找。
    發(fā)表于 05-06 16:43 ?2次下載

    寄存器與移位寄存器

    寄存器與移位寄存器:介紹寄存器原理和移位寄存器的原理及實現(xiàn)。
    發(fā)表于 05-20 11:47 ?0次下載

    51寄存器的所有寄存器名稱,(包括寄存器每一位的作用及用法)資源詳解

    51寄存器的所有寄存器名稱,(包括寄存器每一位的作用及用法)資源詳解
    發(fā)表于 10-16 13:04 ?14次下載
    51<b class='flag-5'>寄存器</b>的所有<b class='flag-5'>寄存器</b>名稱,(包括<b class='flag-5'>寄存器</b>每一位的作用及<b class='flag-5'>用法</b>)資源詳解

    移位寄存器怎么用_如何使用移位寄存器_移位寄存器的用途

    移位寄存器是一個具有移位功能的寄存器,是指寄存器中所存的代碼能夠在移位脈沖的作用下依次左移或右移。本文主要介紹了移位寄存器的用途以及移位寄存器
    發(fā)表于 12-22 15:49 ?2w次閱讀

    寄存器的特性和四大種類

    寄存器是由觸發(fā)組成的,一個觸發(fā)是一個一位寄存器。多個觸發(fā)就可以組成一個多位的寄存器。由于
    的頭像 發(fā)表于 06-19 16:44 ?1.9w次閱讀
    <b class='flag-5'>寄存器</b>的特性和四大種類

    【學習筆記】51單片機常用寄存器

    為98H,地址位為98H~9FH。SCON控制寄存器結(jié)構(gòu)SCON寄存器各位定義(1)方式0( SM0 SM1 :0 0):串行口的工作方式0為移位寄存器I/O方式,可外接移位
    發(fā)表于 11-14 16:21 ?9次下載
    【學習筆記】51單片機<b class='flag-5'>常用</b><b class='flag-5'>寄存器</b>

    IO口配置常用的8個寄存器 1.6

    IO 配置常用的 8 個寄存器: MODER、OTYPER、OSPEEDR、PUPDR、ODR、IDR 、AFRH 和 AFRL。MODER 寄存器(輸入狀態(tài)寄存器):STM32F4
    發(fā)表于 11-29 13:51 ?10次下載
    IO口配置<b class='flag-5'>常用</b>的8個<b class='flag-5'>寄存器</b> 1.6

    探究寄存機的電路結(jié)構(gòu)以及慣常用法

    *本文將探究什么是寄存器,寄存器電路結(jié)構(gòu),寄存器與內(nèi)存的異同以及寄存器
    的頭像 發(fā)表于 01-30 17:08 ?995次閱讀
    探究<b class='flag-5'>寄存</b>機的<b class='flag-5'>電路</b><b class='flag-5'>結(jié)構(gòu)</b>以及<b class='flag-5'>慣常用法</b>

    寄存器的工作原理

    寄存器的工作原理 寄存器是CPU內(nèi)部用來存放數(shù)據(jù)的一些小型存儲區(qū)域,用來暫時存放參與運算的數(shù)據(jù)和運算結(jié)果。其實寄存器就是一種常用的時序邏輯電路
    發(fā)表于 02-20 14:02 ?7993次閱讀

    單片機工作寄存器作用 單片機常用專用寄存器

    除了通用寄存器(如累加、通用寄存器等),單片機中還會有特定功能的寄存器,如定時寄存器、中斷控
    的頭像 發(fā)表于 04-08 14:46 ?6911次閱讀

    STC15系列常用寄存器匯總

    STC15系列常用寄存器匯總
    發(fā)表于 10-21 11:18 ?6次下載