色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

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

CPU的內(nèi)部結(jié)構(gòu)剖析

jf_78858299 ? 來源:前端柒八九 ? 作者:前端柒八九 ? 2023-03-31 16:04 ? 次閱讀

CPU的內(nèi)部結(jié)構(gòu)

?CPU是中央處理器Central Processing Unit的縮寫,相當(dāng)于計算機(jī)的大腦,它的內(nèi)部由數(shù)百萬至數(shù)億個 晶體管 構(gòu)成。

?

「程序運行流程」 中,CPU所負(fù)責(zé)的就是 「解釋和運行」 最終轉(zhuǎn)換成 「機(jī)器語言」 的程序內(nèi)容。

圖片

程序運行流程

CPU和內(nèi)存是由許多晶體管組成的 電子部件」 ,通常成為集成電路Integrated Circuit。

?從功能方面來看,CPU的內(nèi)部是由 寄存器控制器「運算器」時鐘 等四個部分組成,各個部分之間由 電流信號 相互連通。

?

圖片

CPU的四個組成部分

  1. 「寄存器」
    • 用來 「緩存」 指令、數(shù)據(jù)等處理對象,可以將其看作是**「內(nèi)存的一種」**
    • 根據(jù)種類的不同,一個CPU內(nèi)部戶有20~100個寄存器
  2. 「控制器」
    • 負(fù)責(zé)把 「內(nèi)存」 上的指令、數(shù)據(jù)等讀入**「寄存器」**
    • 并根據(jù)指令的執(zhí)行結(jié)果來 「控制」 整個計算機(jī)
  3. 「運算器」
    • 負(fù)責(zé)運算**「從內(nèi)存讀入寄存器的數(shù)據(jù)」**
  4. 「時鐘」
    • 負(fù)責(zé)發(fā)出CPU開始計時的**「時鐘信號」**

內(nèi)存

?通常所說的 「內(nèi)存」 指的是計算機(jī)的主要存儲器Main Memory,簡稱 「主存」

?

主存通過 控制芯片 等與CPU相連,主要負(fù)責(zé) 「存儲指令和數(shù)據(jù)」 。主存由 「可讀寫」 的元素構(gòu)成,每個字節(jié)(1字節(jié)=8位)都帶有一個 「地址編號」CPU可以通過該地址 「讀取」 主存中的指令和數(shù)據(jù),當(dāng)然也可以 「寫入」 數(shù)據(jù)。

程序運行機(jī)制

程序啟動后,根據(jù) 「時鐘信號」「控制器」 會從 「內(nèi)存」 中讀取指令和數(shù)據(jù)。通過對這些指令加以解釋和運行, 「運算器」 就會對數(shù)據(jù)進(jìn)行運算, 「控制器」 根據(jù)該運算結(jié)果來控制計算機(jī)。


CPU是寄存器的集合體

CPU的四個構(gòu)成部分中,我們只需要了解寄存器即可。這是因為, 「程序是把寄存器作為對象來描述的」

假設(shè),我們存在如下用匯編語言編寫的代碼。

? 「匯編語言」 采用助記符Memonic來編寫程序,每一個原本是 電氣信號」「機(jī)器語言指令」 都有有一個與其 「相對應(yīng)的助記符」

助記符通常為指令功能的英語單詞的縮寫。

?

圖片

匯編代碼

例如,movadd分別是數(shù)據(jù)的存儲和相加的簡寫。

?「匯編語言和機(jī)器語言基本上是一一對應(yīng)的」

?

  • 通常我們將 「匯編語言」 編寫的程序轉(zhuǎn)化成 「機(jī)器語言」 的過程稱為**「匯編」**
  • 反之, 「機(jī)器語言」 程序轉(zhuǎn)化成 「匯編語言」 的程序的過程稱為**「反匯編」**

從上述的 「匯編代碼」 中,我們可以看出, 「機(jī)器語言級別的程序是通過寄存器來處理的」 ,也就是說, 「CPU是寄存器的集合體」eaxebp表示的都是寄存器。并且,內(nèi)存的存儲場所 「通過地址編號來區(qū)分」 ,而寄存器的種類 「通過名字來區(qū)分」

CPU處理程序的大致過程如下:

?使用 「高級語言」 編寫的程序會在 「編譯」 后轉(zhuǎn)化成 「機(jī)器語言」 ,然后再通過CPU內(nèi)部的寄存器來處理。

?

寄存器的種類

?不同類型的CPU,其內(nèi)部寄存器的數(shù)量、種類以及寄存器存儲的數(shù)值范圍都是不同的。

?

不過,根據(jù)功能的不同,我們可以將寄存器大致分為 「8類」

圖片

寄存器的主要種類和功能

可以看出,寄存器中存儲的內(nèi)容既 「可以是指令也可以是數(shù)據(jù)」 。其中,數(shù)據(jù)分為 「用于運算的數(shù)據(jù)」 和**「表示內(nèi)存地址的數(shù)據(jù)」**

圖片

CPU是寄存器的集合體


決定程序流程的程序計數(shù)器

只有1行的有用程序是很少見的,機(jī)器語言的程序也是如此。接下來,我們看一下程序是如何按照流程運行的。

下圖是程序啟動后的內(nèi)存內(nèi)容的模型。

?用戶發(fā)出啟動程序的指示后, 操作系統(tǒng) 會把 「硬盤」 中保存的程序 「復(fù)制」「內(nèi)存」 中。

?

實例中的程序?qū)崿F(xiàn)的是將123456兩個數(shù)值相加,并將結(jié)果輸出到顯示器上。圖片

前面我們已經(jīng)介紹過,存儲指令和數(shù)據(jù)的內(nèi)存,是通過地址來劃分的。由于使用機(jī)器語言難以清晰地表明各地址存儲的內(nèi)容,因此我們對各地址的存儲內(nèi)容添加注釋。實際上, 「一個命令和數(shù)據(jù)通常被存儲在多個地址上」 ,但是為了便于說明,上面的圖例中,把指令、數(shù)據(jù)分配到一個地址中。

大致流程如下:

  1. 地址0100是程序運行的開始位置。
  2. 操作系統(tǒng)把程序從 「硬盤」 復(fù)制到 「內(nèi)存」 后,會將 「程序計數(shù)器」CPU寄存器的一種)設(shè)定為0100,然后程序便開始運行。
  3. CPU每執(zhí)行一個指令,程序計數(shù)器的值就會自動加1」
  4. 然后,CPU「控制器」 就會參照程序計數(shù)器的數(shù)值,從內(nèi)存中讀取命令并執(zhí)行。

?程序計數(shù)器決定著程序的流程

?


條件分支和循環(huán)機(jī)制

程序的流程分為 「順序執(zhí)行」「條件分支」「循環(huán)」 三種。

  1. 「順序執(zhí)行」 是指按照地址內(nèi)容的順序執(zhí)行指令
  2. 「條件分支」 是指根據(jù)條件執(zhí)行任意地址的指令
  3. 「循環(huán)」 是指重復(fù)執(zhí)行同一地址的指令

「順序執(zhí)行」 的情況比較簡單,每執(zhí)行一個指令 「程序計數(shù)器」 的值就 「自動加1」 .但若程序中存在 「條件分支」「循環(huán)」 ,機(jī)器語言的指令就可以將 「程序計數(shù)器」 的值設(shè)定為 「任意地址」 (不是加1)。這樣一來,程序便可以返回到上一個地址來重復(fù)執(zhí)行同一個指令,或者跳轉(zhuǎn)到任意地址。

條件分支運行流程

圖片上圖表示把內(nèi)存中存儲的數(shù)值(示例中是123)的絕對值輸出到顯示器的程序的內(nèi)存狀態(tài)。

大致流程如下:

  1. 程序運行的開始位置是0100地址
  2. 隨著 「程序計數(shù)器」 數(shù)值的增加
  3. 當(dāng)?shù)竭_(dá)0102地址時,如果 「累加寄存器」 的值是 「正數(shù)」 ,則執(zhí)行 「跳轉(zhuǎn)指令」jump指令)跳轉(zhuǎn)到0104地址
  4. 此時,由于 「累加寄存器」 的值是123,為 「正數(shù)」 ,因此0103地址的指令被跳過,程序的流程 「直接」 跳轉(zhuǎn)到了0104地址

? 「條件分支」「循環(huán)」 中使用的 「跳轉(zhuǎn)指令」 ,會參照當(dāng)前執(zhí)行的 「運算結(jié)果」 來判斷是否跳轉(zhuǎn)。

?

前面我們提到過 「標(biāo)志寄存器」 。無論當(dāng)前 「累加寄存器」 的運算結(jié)果是負(fù)數(shù)、零還是正數(shù), 「標(biāo)志寄存器」 都會將其保存。

CPU在進(jìn)行運算時, 「標(biāo)志寄存器」 的數(shù)值會根據(jù)運算結(jié)果 「自動設(shè)定」 。至于是否執(zhí)行 「跳轉(zhuǎn)指令」 ,則由CPU在參考 「標(biāo)志寄存器」 的數(shù)值后進(jìn)行判斷。運算結(jié)果的正、零、負(fù) 「三個狀態(tài)」「標(biāo)志寄存器」 的三個位表示。

圖片

32位CPU(寄存器的長度是32位)的標(biāo)志寄存器的示例

「標(biāo)志寄存器」 的第一個字節(jié)位、第二個字節(jié)位和第三個字節(jié)位的值為1時,表示的運算結(jié)果分別為正數(shù)、零和負(fù)數(shù)。

CPU比較機(jī)制

假設(shè)要比較 「累加寄存器」 中存儲的XXX值和 「通用寄存器」 中存儲的YYY值,執(zhí)行比較的指令后,CPU的運算裝置就會在內(nèi)部進(jìn)行XXX-YYY「減法運行」

無論減法運算的結(jié)果是正數(shù)、零還是負(fù)數(shù),都會被保存到 「標(biāo)志寄存器」 中。

  • 結(jié)果為 「正」 表示XXXYYY
  • 結(jié)果為 「零」 表示XXXYYY相等
  • 結(jié)果為 「負(fù)」 表示XXXYYY

?程序中的比較指令,就是在CPU內(nèi)部做減法運算

?


函數(shù)的調(diào)用機(jī)制

?函數(shù)調(diào)用處理也是通過把 「程序計數(shù)器」 的值設(shè)定成函數(shù)的存儲地址來實現(xiàn)的

?

「條件分支」「循環(huán)」 的機(jī)制不同,因為單純的跳轉(zhuǎn)指令無法實現(xiàn)函數(shù)的調(diào)用。

?函數(shù)的調(diào)用需要在完成函數(shù)內(nèi)部的處理后,處理流程再返回到函數(shù)調(diào)用點( 「函數(shù)調(diào)用指令的下一個地址」 )

?

圖片

上圖的示例為 變量ab分別代入123456后,將其賦值給參數(shù)來調(diào)用MyFunc函數(shù)的C語言程序。圖中的地址是將C語言編譯成機(jī)器語言后運行時的地址。由于1行C語言程序在編譯后通常會變成多行的機(jī)器語言,所以圖中的地址是 「離散」 的。

此外,通過 「跳轉(zhuǎn)指令」「程序計數(shù)器」 的值設(shè)定為0260也可以實現(xiàn)調(diào)用MyFunc函數(shù)。函數(shù)的 「調(diào)用原點」0132地址)和 「被調(diào)用函數(shù)」 (0260地址)之間的數(shù)據(jù)傳遞,可以通過內(nèi)存或寄存器來實現(xiàn)。

當(dāng)函數(shù)處理進(jìn)行到最后的0354地址時,我們應(yīng)該將 「程序計數(shù)器」 的值設(shè)定成函數(shù)調(diào)用后要執(zhí)行的0154地址。我們通過機(jī)器語言的call指令和return指令能實現(xiàn)該功能。

call 指令和return 指令

?函數(shù)調(diào)用使用的是call指令,而不是跳轉(zhuǎn)指令。

?

在將函數(shù)的入口地址設(shè)定到 「程序計數(shù)器」 之前, 「call指令」 會把調(diào)用函數(shù)后要執(zhí)行的指令地址存儲在名為 「棧」 的內(nèi)存內(nèi)。 「return 指令」 的功能是把保存在棧中的地址設(shè)定到 「程序計數(shù)器」 中。

圖片

通過地址和索引實現(xiàn)數(shù)組

?通過 「基址寄存器」「變址寄存器」 可以對 「主內(nèi)存」 上特定的內(nèi)存區(qū)域進(jìn)行劃分,從而實現(xiàn)類似于數(shù)組的操作

?

圖片

  1. 「十六進(jìn)制數(shù)」 將計算機(jī)內(nèi)存上00000000~FFFFFFFF的地址劃分出來
    • 凡是該范圍的內(nèi)存區(qū)域,只要有一個32位的寄存器,即可查看全部的內(nèi)存地址
  2. 如果想要像數(shù)組那樣分割特定的內(nèi)存區(qū)域以達(dá)到連續(xù)查看的目的,使用兩個寄存器會更方便

圖片

?CPU會把 「基址寄存器」 + 「變址寄存器」 的值解釋為實際查看的內(nèi)存地址。

?

「變址寄存器」 的值相當(dāng)于高級程序語言程序中數(shù)組的**「索引功能」**

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

    關(guān)注

    68

    文章

    10870

    瀏覽量

    211877
  • 計算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7500

    瀏覽量

    88019
  • 晶體管
    +關(guān)注

    關(guān)注

    77

    文章

    9698

    瀏覽量

    138246
收藏 人收藏

    評論

    相關(guān)推薦

    芯片封裝內(nèi)部結(jié)構(gòu)

    `芯片封裝內(nèi)部結(jié)構(gòu)經(jīng)典封裝知識,內(nèi)部結(jié)構(gòu)完美呈現(xiàn),分析芯片封裝的每一個知識點。[hide][/hide]`
    發(fā)表于 06-11 16:10

    8051內(nèi)部結(jié)構(gòu)

    8051內(nèi)部結(jié)構(gòu)供大家參考。
    發(fā)表于 12-17 08:59

    51單片機(jī)CPU內(nèi)部結(jié)構(gòu)及工作原理是什么

    51單片機(jī)CPU內(nèi)部結(jié)構(gòu)及工作原理1.51單片機(jī)CPU內(nèi)部結(jié)構(gòu)2.工作原理1.51單片機(jī)CPU內(nèi)部
    發(fā)表于 11-18 08:22

    cpu內(nèi)部結(jié)構(gòu)

    cpu內(nèi)部結(jié)構(gòu) 1.算術(shù)邏輯單元ALU(Arithmetic Logic Unit) ALU是運算器的核心。它是以全加器為基礎(chǔ),輔之以移位寄存器及相應(yīng)控制邏輯組合而成的電路
    發(fā)表于 01-15 10:32 ?2.2w次閱讀

    L4990內(nèi)部結(jié)構(gòu)框圖

    L4990內(nèi)部結(jié)構(gòu)框圖
    發(fā)表于 10-15 11:52 ?793次閱讀
    L4990<b class='flag-5'>內(nèi)部結(jié)構(gòu)</b>框圖

    MAX782內(nèi)部結(jié)構(gòu)框圖

    MAX782內(nèi)部結(jié)構(gòu)框圖 內(nèi)部框圖
    發(fā)表于 11-14 16:24 ?992次閱讀
    MAX782<b class='flag-5'>內(nèi)部結(jié)構(gòu)</b>框圖

    LT1072的內(nèi)部結(jié)構(gòu)框圖

    LT1072的內(nèi)部結(jié)構(gòu)框圖
    發(fā)表于 11-14 16:59 ?1067次閱讀
    LT1072的<b class='flag-5'>內(nèi)部結(jié)構(gòu)</b>框圖

    蓄電池內(nèi)部結(jié)構(gòu)

    蓄電池內(nèi)部結(jié)構(gòu)
    發(fā)表于 11-16 14:15 ?5349次閱讀

    伺服電機(jī)內(nèi)部結(jié)構(gòu)

    伺服電機(jī)內(nèi)部結(jié)構(gòu)
    發(fā)表于 02-25 17:38 ?4756次閱讀
    伺服電機(jī)<b class='flag-5'>內(nèi)部結(jié)構(gòu)</b>

    動鐵耳機(jī)的內(nèi)部結(jié)構(gòu)

    動鐵耳機(jī)的內(nèi)部結(jié)構(gòu)  
    發(fā)表于 05-17 18:28 ?9393次閱讀

    元件的內(nèi)部結(jié)構(gòu)

    元件的內(nèi)部結(jié)構(gòu)
    發(fā)表于 03-04 17:48 ?6次下載

    mcs-51單片機(jī)CPU內(nèi)部結(jié)構(gòu)及工作原理

    51單片機(jī)CPU內(nèi)部結(jié)構(gòu)及工作原理1.51單片機(jī)CPU內(nèi)部結(jié)構(gòu)2.工作原理1.51單片機(jī)CPU內(nèi)部
    發(fā)表于 11-11 14:21 ?28次下載
    mcs-51單片機(jī)<b class='flag-5'>CPU</b>的<b class='flag-5'>內(nèi)部結(jié)構(gòu)</b>及工作原理

    交叉導(dǎo)軌的內(nèi)部結(jié)構(gòu)

    交叉導(dǎo)軌的內(nèi)部結(jié)構(gòu)
    的頭像 發(fā)表于 08-16 17:52 ?1050次閱讀
    交叉導(dǎo)軌的<b class='flag-5'>內(nèi)部結(jié)構(gòu)</b>

    MOSFET和IGBT內(nèi)部結(jié)構(gòu)與應(yīng)用

    MOSFET和IGBT內(nèi)部結(jié)構(gòu)不同,決定了其應(yīng)用領(lǐng)域的不同。
    的頭像 發(fā)表于 11-03 14:53 ?1042次閱讀
    MOSFET和IGBT<b class='flag-5'>內(nèi)部結(jié)構(gòu)</b>與應(yīng)用

    深度剖析汽車內(nèi)部結(jié)構(gòu)和原理

    很多人都想了解更多的汽車知識,以加深對汽車的了解,只是無奈汽車結(jié)構(gòu)之復(fù)雜,機(jī)械知識之乏味,都一一放棄了。下面給大家準(zhǔn)備了一組圖解汽車文章,結(jié)合圖片剖析汽車內(nèi)部結(jié)構(gòu),讓復(fù)雜的原理變得通俗易懂。
    的頭像 發(fā)表于 12-28 10:31 ?1215次閱讀
    深度<b class='flag-5'>剖析</b>汽車<b class='flag-5'>內(nèi)部結(jié)構(gòu)</b>和原理
    主站蜘蛛池模板: 国产精品99久久久久久AV蜜臀| 香蕉eeww99国产精品| a视频在线观看免费| 午夜久久影院| 内射白嫩少妇超碰| 国产亚洲精品视频亚洲香蕉视| a一级毛片视频免费看| 亚洲天堂一区二区三区| 十九禁啊啪射视频在线观看 | 手机毛片免费看| 男人网站在线| 久久er99热精品一区二区| 芳草地在线观看免费观看| 最新 国产 精品 精品 视频| 亚洲国产日韩a精品乱码| 亚洲成年人在线观看| 欧美精品亚洲精品日韩专区一| 精品免费视在线视频观看| 国产高清砖码区| wwww69| 中国xxxxx69| 亚洲熟女丰满多毛XXXXX| 午夜精品久久久久久久爽牛战| 日本熟妇乱妇熟色A片蜜桃| 妞干网手机免费视频| 久久精品天天中文字幕| 国内精品蜜汁乔依琳视频| 国产精品毛片在线视频| 超碰97人人做人人爱网站| 99爱在线精品视频网站| 中国字字幕在线播放2019| 亚洲色无码播放| 亚洲精品第五页中文字幕| 晚夜免费禁用十大亏亏| 青青青草国产| 暖暖 免费 高清 日本视频大全 | 国产成人精品视频播放| 菠萝菠萝蜜视频在线看1| CHINA篮球体育飞机2023| 97在线视频免费观看97| 970女主播电台歌曲|