在cpu中至少要有六類暫存器。 這些暫存器用來暫存乙個計算機字。根據需要,可以擴充其數目。下面詳細介紹這些暫存器的功能與結構。
1.資料緩衝暫存器(dr)
資料緩衝暫存器用來暫時存放由記憶體儲器讀出的一條指令或乙個資料字;反之,當向記憶體存入一條指令或乙個資料字時,也暫時將它們存放在資料緩衝暫存器中。
緩衝暫存器的作用是:
(1)作為cpu和記憶體、外部裝置之間資訊傳送的中轉站;
(2)補償cpu和記憶體、外圍裝置之間在操作速度上的差別;
(3)在單累加器結構的運算器中,資料緩衝暫存器還可兼作為運算元暫存器。
2.指令暫存器(ir)
指令暫存器用來儲存當前正在執行的一條指令。當執行一條指令時,先把它從記憶體取到緩衝暫存器中,然後再傳送至指令暫存器。指令劃分為操作碼和位址碼字段,由二進位制數字組成。為了執行任何給定的指令,必須對操作碼進行測試,以便識別所要求的操作。指令解碼器就是做這項工作的。指令暫存器中操作碼欄位的輸出就是指令解碼器的輸入。操作碼一經解碼後,即可向操作控制器發出具體操作的特定訊號。
3.程式計數器(pc)
為了保證程式能夠連續地執行下去,cpu必須具有某些手段來確定下一條指令的位址。而程式計數器正是起到這種作用,所以通常又稱為指令計數器。在程式開始執行前,必須將它的起始位址,即程式的一條指令所在的記憶體單元位址送入pc,因此pc的內容即是從記憶體提取的第一條指令的位址。當執行指令時,cpu將自動修改pc的內容,以便使其保持的總是將要執行的下一條指令的位址。由於大多數指令都是按順序來執行的,所以修改的過程通常只是簡單的對pc加1。
但是,當遇到轉移指令如jmp指令時,那麼後繼指令的位址(即pc的內容)必須從指令的位址段取得。在這種情況下,下一條從記憶體取出的指令將由轉移指令來規定,而不是像通常一樣按順序來取得。因此程式計數器的結構應當是具有寄存資訊和計數兩種功能的結構。
4.位址暫存器(ar)
位址暫存器用來儲存當前cpu所訪問的記憶體單元的位址。由於在記憶體和cpu之間存在著操作速度上的差別,所以必須使用位址暫存器來保持位址資訊,直到記憶體的讀/寫操作完成為止。
當cpu和記憶體進行資訊交換,即cpu向記憶體存/取資料時,或者cpu從記憶體中讀出指令時,都要使用位址暫存器和資料緩衝暫存器。同樣,如果我們把外圍裝置的裝置位址作為像記憶體的位址單元那樣來看待,那麼,當cpu和外圍裝置交換資訊時,我們同樣使用 位址暫存器和資料緩衝暫存器。
位址暫存器的結構和資料緩衝暫存器、指令暫存器一樣,通常使用單純的暫存器結構。資訊的存入一般採用電位-脈衝方式,即電位輸入端對應資料資訊位,脈衝輸入端對應控制訊號,在控制訊號作用下,瞬時地將資訊打入暫存器。
5.累加暫存器(ac)
累加暫存器ac通常簡稱為累加器,它是乙個通用暫存器。其功能是:當運算器的算術邏輯單元alu)執行算術或邏輯運算時,為alu提供乙個工作區。累加暫存器暫時存放alu運算的結果資訊。顯然,運算器中至少要有乙個累加暫存器。
目前cpu中的累加暫存器,多達16個,32個,甚至更多。當使用多個累加器時,就變成通用暫存器堆結構,其中任何乙個可存放源運算元,也可存放結果運算元。在這種情況下,需要在指令格式中對暫存器號加以編址。
6.狀態條件暫存器(psw)
狀態條件暫存器儲存由算術指令和邏輯指令執行或測試的結果建立的各種條件碼內容,如運算結果進製標誌(c),運算結果溢位標誌(v),運算結果為零標誌(z),運算結果為負標誌(n)等等。這些標誌位通常分別由1位觸發器儲存。
除此之外,狀態條件暫存器還儲存中斷和系統工作狀態等資訊,以便使cpu和系統能及時了解機器執行狀態和程式執行狀態。因此,狀態條件暫存器是乙個由各種狀態條件標誌拼湊而成的暫存器。
CPU中的主要暫存器
在cpu中至少要有六類暫存器 指令暫存器 ir 程式計數器 pc 位址暫存器 ar 資料暫存器 dr 累加暫存器 ac 程式狀態字暫存器 psw 這些暫存器用來暫存乙個計算機字,其數目可以根據需要進行擴充。1.資料暫存器 資料暫存器 data register,dr 又稱資料緩衝暫存器,其主要功能是...
CPU主要暫存器功能說明
ax 累加器 bx 基址暫存器 base cx 計數 count 迴圈時自動加1 dx 存放資料 data si source index register 源變址暫存器。di destination index register 目的變址暫存器。sp 堆疊指標 stack pointer 指向棧頂...
CPU暫存器操作方式
cpu暫存器的讀取方式,其實就是讀取某個位址中儲存的資料,只不過這個位址是晶元廠商規定好用於特定功能的。一般ide都會提供暫存器的標頭檔案,可以參考晶元的程式設計手冊,手冊中都有每個模組的暫存器定義,以及位址說明,如果你不想使用標頭檔案定義可以自己手動編寫,例如你想訪問乙個32位的暫存器位址為0xe...