程序計(jì)數(shù)器是用于存放下一條指令所在單元的地址的地方。
當(dāng)執(zhí)行一條指令時(shí),首先需要根據(jù)PC中存放的指令地址,將指令由內(nèi)存取到指令寄存器中,此過(guò)程稱為"取指令"。與此同時(shí),PC中的地址或自動(dòng)加1或由轉(zhuǎn)移指針給出下一條指令的地址。此后經(jīng)過(guò)分析指令,執(zhí)行指令。完成第一條指令的執(zhí)行,而后根據(jù)PC取出第二條指令的地址,如此循環(huán),執(zhí)行每一條指令。
中文名稱 | 程序計(jì)數(shù)器 | 外文名稱 | Program Counter |
---|---|---|---|
外語(yǔ)簡(jiǎn)稱 | PC | 類別 | 計(jì)算機(jī)處理器中的寄存器 |
為了保證程序(在操作系統(tǒng)中理解為進(jìn)程)能夠連續(xù)地執(zhí)行下去,處理器必須具有某些手段來(lái)確定下一條指令的地址。而程序計(jì)數(shù)器正是起到這種作用,所以通常又稱為指令計(jì)數(shù)器。在程序開(kāi)始執(zhí)行前,必須將它的起始地址,即程序的第一條指令所在的內(nèi)存單元地址送入程序計(jì)數(shù)器,因此程序計(jì)數(shù)器的內(nèi)容即是從內(nèi)存提取的一條指令的地址。當(dāng)執(zhí)行指令時(shí),處理器將自動(dòng)修改PC的內(nèi)容,即每執(zhí)行一條指令PC增加一個(gè)量,這個(gè)量等于指令所含的字節(jié)數(shù),以便使其保持的總是將要執(zhí)行的下一條指令的地址。由于大多數(shù)指令都是按順序來(lái)執(zhí)行的,所以修改的過(guò)程通常只是簡(jiǎn)單的對(duì)PC加1。
但是,當(dāng)遇到轉(zhuǎn)移指令如JMP(跳轉(zhuǎn)、外語(yǔ)全稱:JUMP)指令時(shí),后繼指令的地址(即PC的內(nèi)容)必須從指令寄存器中的地址字段取得。在這種情況下,下一條從內(nèi)存取出的指令將由轉(zhuǎn)移指令來(lái)規(guī)定,而不像通常一樣按順序來(lái)取得。因此程序計(jì)數(shù)器的結(jié)構(gòu)應(yīng)當(dāng)是具有寄存信息和計(jì)數(shù)兩種功能的結(jié)構(gòu)。
程序計(jì)數(shù)器是計(jì)算機(jī)處理器中的寄存器,它包含當(dāng)前正在執(zhí)行的指令的地址(位置)。當(dāng)每個(gè)指令被獲取,程序計(jì)數(shù)器的存儲(chǔ)地址加一。在每個(gè)指令被獲取之后,程序計(jì)數(shù)器指向順序中的下一個(gè)指令。當(dāng)計(jì)算機(jī)重啟或復(fù)位時(shí),程序計(jì)數(shù)器通常恢復(fù)到零。
馮 ·諾伊曼計(jì)算機(jī)體系結(jié)構(gòu)的主要內(nèi)容之一就是"程序預(yù)存儲(chǔ),計(jì)算機(jī)自動(dòng)執(zhí)行"!處理器要執(zhí)行的程序(指令序列)都是以二進(jìn)制代碼序列方式預(yù)存儲(chǔ)在計(jì)算機(jī)的存儲(chǔ)器中,處理器將這些代碼逐條地取到處理器中再譯碼、執(zhí)行,以完成整個(gè)程序的執(zhí)行。為了保證程序能夠連續(xù)地執(zhí)行下去,CPU必須具有某些手段來(lái)確定下一條取指指令的地址。程序計(jì)數(shù)器(PC )正是起到這種作用,所以通常又稱之為'指令計(jì)數(shù)器'。
在程序開(kāi)始執(zhí)行前,將程序指令序列的起始地址,即程序的第一條指令所在的內(nèi)存單元地址送入PC,CPU按照 PC的指示從內(nèi)存讀取第一條指令(取指)。當(dāng)執(zhí)行指令時(shí),CPU自動(dòng)地修改PC的內(nèi)容,即每執(zhí)行一條指令PC增加一個(gè)量,這個(gè)量等于指令所含的字節(jié)數(shù)(指令字節(jié)數(shù)),使 PC總是指向下一條將要取指的指令地址。由于大多數(shù)指令都是按順序來(lái)執(zhí)行的,所以修改PC 的過(guò)程通常只是簡(jiǎn)單的對(duì)PC 加"指令字節(jié)數(shù)"。
當(dāng)程序轉(zhuǎn)移時(shí),轉(zhuǎn)移指令執(zhí)行的最終結(jié)果就是要改變PC的值,此PC值就是轉(zhuǎn)去的目 標(biāo)地址。處理器總是按照PC 指向取指、譯碼、執(zhí)行,以此實(shí)現(xiàn)了程序轉(zhuǎn)移。
ARM 處理器中使用R15 作為PC,它總是指向取指單元,并且ARM 處理器中只有一個(gè)PC 寄存器,被各模式共用。R15 有32 位寬度(下述標(biāo)記為R15[31:0],表示R15 的'第31位'到'第0位'),ARM 處理器可以直接尋址4GB的地址空間(2^32 = 4G )。
一個(gè)郵箱,我給你的圖片里面不起來(lái) 2010年,東城區(qū),模具體檢,多項(xiàng)選擇題 1.在圖1中所示的四種方法,在符合安全使用電力 2的原則.圖2中,增加了受力面積減小壓力實(shí)例 3.該加熱器是當(dāng)前的演技的使用...
單片機(jī)6位數(shù)碼管計(jì)數(shù)器程序問(wèn)題
#include <reg52.H> //STC頭文件#define uchar unsigned char#define ui...
都一樣,主要還是看利率的選擇多不,利率應(yīng)該跟著最新政策走,有上浮和下折的各個(gè)梯段,這樣計(jì)算出來(lái)的結(jié)果更有針對(duì)性,希望可以幫到你,祝你生活愉快,望采納
格式:pdf
大?。?span id="oqwmpsh" class="single-tag-height">77KB
頁(yè)數(shù): 2頁(yè)
評(píng)分: 4.7
水泥計(jì)數(shù)器 產(chǎn)品簡(jiǎn)介: 專用于水泥廠,不怕粉塵,解決連包、疊包。支持 MODBUS 協(xié)議 .產(chǎn)品編號(hào): ZT-JS01A-A 專用于水泥廠,不怕粉塵,解決連包、疊包。支持 MODBUS 協(xié)議 .產(chǎn)品編號(hào): ZT-JS01A-A 中泰華旭生產(chǎn)的水泥計(jì)數(shù)器,專用于水泥廠的一款智能型計(jì)數(shù)器,能夠在水泥廠多粉塵的環(huán)境下正常工 作。已成功應(yīng)用于海螺水泥、華潤(rùn)水泥、福建水泥、金頂水泥、冀東水泥等多家水泥廠家。 化工廠專用計(jì)數(shù)器 產(chǎn)品簡(jiǎn)介: 專用于化工廠的智能計(jì)數(shù)器,解決連包、疊包 . 支持 MODBUS 協(xié)議 . 產(chǎn)品編號(hào): ZT-JS01A-B 中泰華旭生產(chǎn)的化工專用計(jì)數(shù)器,專用于化工廠的一款智能型計(jì)數(shù)器,能夠在化工廠多粉塵的環(huán)境 下正常工作。已成功應(yīng)用于河南中源大化、中海油海南東方大化、山西晉豐煤化工、江蘇靈谷化工等多 家廠家。 化工專用計(jì)數(shù)器獨(dú)有的特點(diǎn): 獨(dú)有的光電傳感器防粉塵專利技術(shù),真
格式:pdf
大小:77KB
頁(yè)數(shù): 31頁(yè)
評(píng)分: 4.6
目 錄 摘 要 ........................................................................................... 錯(cuò)誤!未定義書(shū)簽。 目 錄 ............................................................................................................................. I 一、 緒論 ................................................................................. 錯(cuò)誤!未定義書(shū)簽。 1.1 概述 .....................................................
[initialize] 安置初始值。如將計(jì)算機(jī)程序計(jì)數(shù)器置于初始位置或初始值
控制器的作用是控制和協(xié)調(diào)整個(gè)計(jì)算機(jī)的動(dòng)作控制通常需要程序計(jì)數(shù)器(PC)、指令寄存器(IR)、指令譯碼器(ID)、定時(shí)與控制電路以及脈沖源、中斷等共同完成。控制器由:指令寄存器Instruction Register、指令譯碼器Instruction Decoder、定時(shí)與控制電路Programmable Logic Array、程序計(jì)數(shù)器Program Counter、標(biāo)志寄存器Flags Register、堆棧和堆棧指針Stack Pointer、寄存器組等構(gòu)成。
CPU可以向控制器發(fā)送多種不同的命令,設(shè)備控制器應(yīng)能接收并識(shí)別這些命令。為此,在控制器中應(yīng)具有相應(yīng)的控制寄存器,用來(lái)存放接收的命令和參數(shù),并對(duì)所接收的命令進(jìn)行譯碼。例如,磁盤(pán)控制器可以接收CPU發(fā)來(lái)的Read、Write、Format等15條不同的命令,而且有些命令還帶有參數(shù);相應(yīng)地,在磁盤(pán)控制器中有多個(gè)寄存器和命令譯碼器等。
這是指實(shí)現(xiàn)CPU與控制器之間、控制器與設(shè)備之間的數(shù)據(jù)交換。對(duì)于前者,是通過(guò)數(shù)據(jù)總線,由CPU并行地把數(shù)據(jù)寫(xiě)入控制器,或從控制器中并行地讀出數(shù)據(jù);對(duì)于后者,是設(shè)備將數(shù)據(jù)輸入到控制器,或從控制器傳送給設(shè)備。為此,在控制器中須設(shè)置數(shù)據(jù)寄存器。
控制器應(yīng)記下設(shè)備的狀態(tài)供CPU了解。例如,僅當(dāng)該設(shè)備處于發(fā)送就緒狀態(tài)時(shí),CPU才能啟動(dòng)控制器從設(shè)備中讀出數(shù)據(jù)。為此,在控制器中應(yīng)設(shè)置一狀態(tài)寄存器,用其中的每一位來(lái)反映設(shè)備的某一種狀態(tài)。當(dāng)CPU將該寄存器的內(nèi)容讀入后,便可了解該設(shè)備的狀態(tài)。
就像內(nèi)存中的每一個(gè)單元都有一個(gè)地址一樣,系統(tǒng)中的每一個(gè)設(shè)備也都有一個(gè)地址,而設(shè)備控制器又必須能夠識(shí)別它所控制的每個(gè)設(shè)備的地址。此外,為使CPU能向(或從)寄存器中寫(xiě)入(或讀出)數(shù)據(jù),這些寄存器都應(yīng)具有唯一的地址。例如,在IB-MPC機(jī)中規(guī)定,硬盤(pán)控制器中各寄存器的地址分別為320~32F之一??刂破鲬?yīng)能正確識(shí)別這些地址,為此,在控制器中應(yīng)配置地址譯碼器。
由于I/O設(shè)備的速率較低而CPU和內(nèi)存的速率卻很高,故在控制器中必須設(shè)置一緩沖器。在輸出時(shí),用此緩沖器暫存由主機(jī)高速傳來(lái)的數(shù)據(jù),然后才以I/O設(shè)備所具有的速率將緩沖器中的數(shù)據(jù)傳送給I/O設(shè)備;在輸入時(shí),緩沖器則用于暫存從I/O設(shè)備送來(lái)的數(shù)據(jù),待接收到一批數(shù)據(jù)后,再將緩沖器中的數(shù)據(jù)高速地傳送給主機(jī)。
設(shè)備控制器還兼管對(duì)由I/O設(shè)備傳送來(lái)的數(shù)據(jù)進(jìn)行差錯(cuò)檢測(cè)。若發(fā)現(xiàn)傳送中出現(xiàn)了錯(cuò)誤,通常是將差錯(cuò)檢測(cè)碼置位,并向CPU報(bào)告,于是CPU將本次傳送來(lái)的數(shù)據(jù)作廢,并重新進(jìn)行一次傳送。這樣便可保證數(shù)據(jù)輸入的正確性。
實(shí)施例
該實(shí)施例包括以下步驟:
第一步,建立一個(gè)共享讀取的程序計(jì)數(shù)寄存器組SPC,該寄存器組中寄存器的個(gè)數(shù)與CPU核的數(shù)目相同,每個(gè)寄存器分別與對(duì)應(yīng)的CPU核相連以實(shí)時(shí)地儲(chǔ)存該CPU核的程序計(jì)數(shù)器值。
所述的共享讀取是:每個(gè)CPU核實(shí)時(shí)讀取寄存器組中每個(gè)寄存器存儲(chǔ)的其它CPU核的程序計(jì)數(shù)器值。
第二步,當(dāng)存在空閑的CPU核時(shí),進(jìn)行加速對(duì)象選擇處理,得到自動(dòng)并行加速線程的加速對(duì)象為線程P。
所述的加速對(duì)象選擇處理,是:當(dāng)正在運(yùn)行且未被加速的用戶線程中存在CPU占用率最高的線程時(shí),則選擇該線程作為自動(dòng)并行加速線程的加速對(duì)象;否則,時(shí)間t后,再次選擇正在運(yùn)行且未被加速的用戶線程中CPU占用率最高的線程作為自動(dòng)并行加速線程的加速對(duì)象,直至得到自動(dòng)并行加速線程的加速對(duì)象。
所述的時(shí)間t是系統(tǒng)的調(diào)度時(shí)間片大小,該實(shí)施例為20毫秒。
第三步,當(dāng)線程P存在已分析指令集合Sp時(shí),載入該集合Sp;否則,為線程P新建一個(gè)集合Sp,對(duì)線程P所在的CPU核進(jìn)行讀取處理,得到線程P所在的CPU核當(dāng)前正在讀取的指令I(lǐng)c,并由Ic追蹤線程P下一條將要執(zhí)行指令的地址,將追蹤分析的指令代碼和跳轉(zhuǎn)關(guān)系加入集合Sp中。
所述的讀取處理,是:讀取線程P所在的CPU核的程序計(jì)數(shù)寄存器的值,將得到的虛擬地址轉(zhuǎn)換為物理地址,然后從該物理地址得到線程P所在的CPU核正在執(zhí)行的指令I(lǐng)c,當(dāng)集合Sp中包括指令I(lǐng)c時(shí),刪除集合Sp中Ic以前的指令記錄,并根據(jù)集合Sp追蹤線程P下一條將要執(zhí)行的指令;否則,清空集合Sp。
第四步,采用第三步的方法,得到線程P將要執(zhí)行的所有指令,當(dāng)集合Sp中每次加入條件轉(zhuǎn)移指令后且集合Sp中存在循環(huán)代碼時(shí),進(jìn)行進(jìn)度校驗(yàn)和替換處理。
所述的進(jìn)度校驗(yàn),是:重新讀取指令I(lǐng)c,當(dāng)指令I(lǐng)c不在集合Sp中時(shí),清空集合Sp,然后從指令I(lǐng)c開(kāi)始追蹤;當(dāng)指令I(lǐng)c在集合Sp中、線程P走向該循環(huán)且線程P已經(jīng)開(kāi)始執(zhí)行該循環(huán),則選取循環(huán)接收后第一條語(yǔ)句作為待分析指令,并清空集合Sp;當(dāng)指令I(lǐng)c在集合Sp中、線程P走向該循環(huán)且線程P未執(zhí)行該循環(huán),則對(duì)該循環(huán)進(jìn)行替換處理;當(dāng)指令I(lǐng)c在集合Sp中但線程P未走向該循環(huán)時(shí),則刪除集合Sp中Ic以前的指令記錄,并繼續(xù)追蹤。
所述的替換處理,包括以下步驟:
1)當(dāng)循環(huán)的總工作量大于閾值G時(shí),生成并行化執(zhí)行該循環(huán)的代碼,執(zhí)行該循環(huán)的代碼出口語(yǔ)句跳轉(zhuǎn)到原循環(huán)出口對(duì)應(yīng)的語(yǔ)句,且將新生成的代碼單獨(dú)放在一個(gè)或若干個(gè)內(nèi)存頁(yè)中;否則,放棄替換該循環(huán),并刪除集合Sp中Ic以前的指令記錄,繼續(xù)追蹤;
2)生成代碼后,進(jìn)行進(jìn)度校驗(yàn),當(dāng)通過(guò)進(jìn)度校驗(yàn)時(shí)則中斷線程P,且中斷線程P后再次進(jìn)行校驗(yàn),再次通過(guò)進(jìn)度校驗(yàn)后,執(zhí)行3);否則,線程P繼續(xù)運(yùn)行;
3)將1)生成的代碼所在的內(nèi)存頁(yè)分配給線程P,并修改原循環(huán)起始地址的二進(jìn)制代碼為跳轉(zhuǎn)到新生成代碼的起始位置,在集合Sp中刪除原循環(huán)對(duì)應(yīng)指令,加入新生成的代碼指令;
4)替換完成后通知線程P繼續(xù)執(zhí)行,繼續(xù)分析后續(xù)代碼。
所述的閾值G是單個(gè)CPU核1秒鐘執(zhí)行的最大指令數(shù)。
所述的通過(guò)進(jìn)度校驗(yàn)是指:指令I(lǐng)c在集合Sp中、線程P走向該循環(huán)且線程P未執(zhí)行該循環(huán)。
第五步,當(dāng)線程P被調(diào)度出CPU核時(shí),系統(tǒng)以中斷方式將該事件連同當(dāng)時(shí)的SPCp值發(fā)送給自動(dòng)并行加速線程,當(dāng)自動(dòng)并行加速線程正在替換處理中時(shí),則使用此時(shí)的SPCp值作為讀取Ic的依據(jù),繼續(xù)執(zhí)行替換處理直到退出該步驟;否則,自動(dòng)并行加速線程根據(jù)當(dāng)時(shí)的SPCp值讀取Ic,清空或更新集合Sp,其結(jié)果等待線程P被調(diào)入時(shí)繼續(xù)使用。
第六步,返回第二步,開(kāi)始處理新的需要加速的線程。
該實(shí)施例方法實(shí)現(xiàn)簡(jiǎn)單,且完全由操作系統(tǒng)完成;能夠在有空閑的CPU核時(shí)自動(dòng)利用空閑資源對(duì)程序進(jìn)行并行加速,免去等待預(yù)先處理程序的時(shí)間,從而大大提高了多核平臺(tái)下串行程序運(yùn)行時(shí)的并行處理速度。