計算機原理(二)

計算機原理系列

歡迎大家關注「海拉魯知識大陸」 多交流不迷路

計算機原理(一)

繼續上一篇計算機原理(一)深入了解程序執行部分,進一步說說程序在馮諾依曼模型上如何執行。如果沒有了解的童鞋可以查看我上一篇文章。

1.程序的執行過程

當 CPU 執行程序的時候:
1.第一步,CPU 讀取 PC 指針指向的指令,將它導入指令寄存器。完成讀取指令這件事情有 3 個步驟:

  • 步驟 1:CPU 的控制單元操作地址總線指定需要訪問的內存地址(簡單理解,就是把 PC 指針中的值拷貝到地址總線中)。
  • 步驟 2:CPU 通知內存設備準備數據(內存設備準備好了,就通過數據總線將數據傳送給 CPU)。
  • 步驟 3:CPU 收到內存傳來的數據后,將這個數據存入指令寄存器。
    完成以上 3 步,CPU 成功讀取了 PC 指針指向指令,存入了指令寄存器。

2.然后,CPU 分析指令寄存器中的指令,確定指令的類型和參數。
3.如果是計算類型的指令,那么就交給邏輯運算單元計算;如果是存儲類型的指令,那么由控制單元執行。
4.PC 指針自增,并準備獲取下一條指令。
圖片

2.詳解a=11+15的程序執行過程

上面我們了解了基本的程序執行過程,接下來我們來看看如果用馮諾依曼模型執行a=11+15是一個怎樣的過程。

當我們寫的程序a=11+15是字符串,CPU只能執行指令。所以這里需要用到編譯器。編譯器的核心能力是翻譯,它把一種程序翻譯成CPU可執行的語言。比如java語言就是把.java轉換成.class文件類加載到JVM通過解釋器和即時編譯器(JIT Compiler)執行字節碼指令(這里大概了解下,后面我會單獨講講JVM工作原理)。
下面我們來詳細闡述a=11+15的大體執行過程:

1.編譯器通過分析,發現11和15是數據,因此編譯好的程序啟動時,會在內存中開辟出一個專門的區域存這樣的常數,這個專門用來存儲常數的區域,就是數據段,如下:

  • 11 被存儲到了地址 0x100;
  • 15 被存儲到了地址 0x104;
    圖片

2.編譯器將a=11+15轉換成了 4 條指令,程序啟動后,這些指令被導入了一個專門用來存儲指令的區域,也就是正文段。如上圖所示,這 4 條指令被存儲到了 0x200-0x20c 的區域中:

  • 0x200位置的load指令將地址0x100中的數據11導入寄存器R0;
  • 0x204位置的load指令將地址0x104中的數據15導入寄存器R1;
  • 0x208位置的add指令將寄存器R0和R1中的值相加,存入寄存器R2;
  • 0x20c位置的store指令將寄存器R2中的值存回數據區域中的0x1108位置。

3.具體執行的時候,PC指針先指向0x200位置,然后依次執行這4條指令。

3.指令

在上面的例子中,load 指令將內存中的數據導入寄存器,我們寫成了 16 進制:0x8c000100,拆分成二進制就大體如下:
圖片

  • 最左邊的6位,叫作操作碼,英文是OpCode,100011代表load指令;
  • 中間的4位0000是寄存器的編號,這里代表寄存器R0;
  • 后面的22位代表要讀取的地址,也就是0x100。

所以我們是把操作碼、寄存器的編號、要讀取的地址合并到了一個32位的指令中。
我們再來求加法運算的 add 指令,16進制表示是0x08048000,換算成二進制就是:
圖片

  • 最左邊的6位是指令編碼,代表指令 add;
  • 緊接著的4位 0000 代表寄存器 R0;
  • 然后再接著的4位 0001 代表寄存器 R1;
  • 再接著的4位 0010 代表寄存器 R2;
  • 最后剩下的14位沒有被使用。

構造指令的過程,叫作指令的編碼,通常由編譯器完成;解析指令的過程,叫作指令的解碼,由CPU完成。由此可見CPU內部有一個循環:

  • 首先CPU通過PC指針讀取對應內存地址的指令,單詞就是Fetch 。
  • CPU對指令進行解碼,單詞就是Decode。
  • CPU執行指令,單詞就是Execution。
  • CPU將結果存回寄存器或者將寄存器存入內存,單詞就是Store。
    圖片
    上面4個步驟,就是CPU的指令周期。CPU的工作就是一個周期接著一個周期,周而復始。

4.指令的類型

通過上面的例子,不同類型的指令、參數個數、每個參數的位寬,都不一樣。而參數可以是以下這三種類型:

  • 寄存器;
  • 內存地址;
  • 數值(一般是整數和浮點)。

當然,無論是寄存器、內存地址還是數值,它們都是數字。
指令從功能角度來劃分,大概有以下 5 類:

  • I/O 類型的指令,比如處理和內存間數據交換的指令 store/load 等;再比如將一個內存地址的數據轉移到另一個內存地址的 mov
    指令。
  • 計算類型的指令,最多只能處理兩個寄存器,比如加減乘除、位運算、比較大小等。
  • 跳轉類型的指令,用處就是修改 PC 指針。比如編程中大家經常會遇到需要條件判斷+跳轉的邏輯,比如if-else,swtich-case、函數調用等。
  • 信號類型的指令,比如發送中斷的指令 trap。
  • 閑置 CPU 的指令 nop,一般 CPU 都有這樣一條指令,執行后 CPU 會空轉一個周期。

指令還有一個分法,就是尋址模式,比如同樣是求和指令,可能會有另個版本:

  • 將兩個寄存器的值相加的 add 指令。
  • 將一個寄存器和一個整數相加的 addi 指令。
    另外,同樣是加載內存中的數據到寄存器的 load 指令也有不同的尋址模式:
  • 比如直接加載一個內存地址中的數據到寄存器的指令la,叫作直接尋址。
  • 直接將一個數值導入寄存器的指令li,叫作寄存器尋址。
  • 將一個寄存器中的數值作為地址,然后再去加載這個地址中數據的指令lw,叫作間接尋址。

因此尋址模式是從指令如何獲取數據的角度,對指令的一種分類,目的是給編寫指令的人更多選擇。

5.指令的執行速度

CPU其實是用石英晶體產生的脈沖轉化為時鐘信號驅動的,每一次時鐘信號高低電平的轉換就是一個周期,我們叫時鐘周期。CPU的主頻,說的就是時鐘信號的頻率。比如一個1GHz的CPU,說的是時鐘信號的頻率是1G。這就是我們買電腦熟悉的需要知道CPU的頻率參數了,頻率越高性能越好了。

這里再說明一下,不是每個時鐘周期都可以執行一條指令。多數指令可能不在一個時鐘周期完成,通常需要 2 個、4 個、6 個時鐘周期。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921444.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921444.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921444.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【設計模式】 工廠方法模式

系列文章目錄 文章目錄系列文章目錄需要了解工廠制造細節嗎?簡單工廠模式實現工廠方法模式的實現簡單方法? 工廠方法?總結需要了解工廠制造細節嗎? 我們在前面的文章中為大家介紹了簡單工廠模式,我們知道 簡單工廠模式…

詳解 Java 中的 CopyOnWriteArrayList

目錄 【1】CopyOnWriteArrayList 簡介 【2】核心原理 1.底層數據結構 2.寫時復制機制 【3】CopyOnWriteArrayList常用方法及實例 1.添加元素方法 add () 2.獲取元素方法 get () 3.刪除元素方法remove() 【4】優缺點分析 【5】適用場景 【6】總結 【1】CopyOnWriteAr…

新手SEO優化快速起步教程

本教程專為SEO新手設計,幫助您快速上手優化工作。我們將一步步帶您了解基礎概念,包括高效挖掘關鍵詞的方法、內容優化的核心技巧,以及網站基礎設置的關鍵步驟。后續還會講解提升排名的實用策略、如何監控效果并進行調整,確保您能系…

Minecraft圖片搜索技巧

以下是更多專注 Minecraft 內容的高質量社區平臺,涵蓋建筑展示、模組/材質分享、實機截圖、藝術創作等方向,按類型分類整理:---一、國際知名綜合社區平臺 特點 鏈接 CurseForge 模組/材質/數據包第一倉庫,作者更新快,支…

數學建模-非線性規劃(NLP)

1-理論知識介紹應用2-基于matlab實現非線性規劃1)例1% 清除工作臺和命令行 clear;clc; x0[0 0 0]; A [-1 1 -1]; b 0; [x,value] fmincon(f1,x0,A,b,[],[],[],[],nonlfun1) function f f1(x)f x(1)^2x(2)^2x(3)^28; end function [c,ceq] nonlfun1(x)c [x(1)…

人工智能學習:什么是seq2seq模型

一、seq2seq模型 Seq2Seq(Sequence-to-Sequence)模型是一種用于處理序列轉換問題的深度學習模型,廣泛應用于機器翻譯、文本摘要、對話系統、語音識別等領域。Seq2Seq模型的核心思想是通過一個編碼器(Encoder)將輸入序列編碼為一個固定長度的上下文向量(Context Vector),…

生態 | 華院計算與深至科技達成戰略合作,攜手推動AI+醫學影像算法升級迭代

8月25日,華院計算技術(上海)股份有限公司(以下簡稱“華院計算”)與上海深至信息科技有限公司(以下簡稱“深至科技”)正式簽署戰略合作協議。雙方將秉持“優勢互補、資源共享、戰略協同、共同發展…

詳解MySQL環境變量配置及其在備份中的應用

正確配置MySQL環境變量是保障數據庫穩定運行和高效管理的基礎。這些變量涵蓋了從內存分配、連接設置到日志行為等方方面面,直接決定了數據庫的性能表現和功能特性。對于數據庫管理員而言,熟練掌握環境變量的配置,是進行性能調優和故障排查的必…

scikit-learn零基礎配置(含python、anaconda)

一、Anaconda環境搭建 1、關于Anaconda Anaconda 是一個非常 popular 的 Python 發行版,它不僅包含了 Python 語言本身,還預裝了眾多常用的科學計算庫,如 NumPy、Pandas、Matplotlib 等,能夠極大地方便用戶的開發和數據分析工作。…

RAG提示詞(日本語版)

RAG提示詞(日本語版) System Message # 知能型質問応答アシスタント(RAGシステムプロンプト)## 役割定義 あなたは「知能型質問応答アシスタント」として、提供されたコンテキスト情報に基づいてユーザーの質問に回答する専門的な…

qData 數據中臺【開源版】發布 1.0.5 版本,全面提升規則治理、非結構化數據處理與部署體驗

2025年9月3日 —— 企業級開源數據中臺 qData 開源版 正式發布 1.0.5 版本。本次更新聚焦 規則治理一體化、非結構化數據支持、以及開源版的體驗與部署優化,進一步提升規則復用能力、數據接入廣度與運維效率,幫助企業和開發者更輕松地構建高質量數據治理…

RecSys:用戶行為序列建模以及DIN、SIM模型

引言 在推薦系統中,用戶歷史行為序列是極其重要的信息源。用戶最近的點擊、點贊、收藏、轉發等行為能夠有效反映其即時興趣,無論是在召回、粗排還是精排階段,合理利用這些行為序列都能顯著提升推薦效果。本文將系統介紹用戶行為序列建模的幾…

QGIS二次開發01:環境配置-OSGeo4W鏡像

寫在前面: 本筆記根據多方資料整理而成,旨在為QGIS二次開發提供學習參考。內容僅供交流學習,歡迎共同探討。 一、關于QGIS QGIS 是一個功能強大的桌面GIS軟件本身,為用戶提供了圖形化界面(GUI)來進行地圖制…

對接旅游行業安全需求:旅游安全急救實訓室的功能構建與育人目標

隨著我國旅游行業的快速發展,游客安全需求日益凸顯,安全應急處置能力已成為旅游服務人才的核心競爭力。旅游安全急救實訓室作為旅游服務與管理專業中的重要教學場所,其功能構建與育人目標影響人才培養質量與行業安全水平。點擊獲取方案 一、行…

Typora處理markdown文件【給.md文檔加水印】

①文件→偏好設置→外觀→打開主題文件夾②在打開的文件夾中放入水印圖像③右鍵點擊github.css文件后,點擊編輯,進入編輯頁面④將代碼塊中內容粘貼到文件最后 更多效果請自行探索 #write::before {content: "CSDN果子當夜宵:bigxie.blog…

基于單片機的六足機器人控制系統設計

基于單片機的六足機器人控制系統設計摘 要本設計主要是基于單片機的六足機器人控制系統設計,綜合分析六足機器人的結構、步態和控制算法,結合云端服務器、WIFI 技術、藍牙技術、語音識別技術和手勢識別技術進行多種控制模式的設計,并提出不同…

RK3568 Trust

文章目錄1、環境介紹2、前言3、ARM TrustZone3.1、什么是ARM TrustZone3.2、cpu特權等級3.3、ARM Trusted Firmware4、Rockchip 平臺的 Trust4.1、實現機制4.2、啟動流程4.3、生命周期4.4、Trust 編譯打包流程分析5、總結1、環境介紹 硬件:飛凌ok3568-c開發板 軟件…

C語言數據結構——詳細講解《二叉樹與堆的基本概念》

C語言數據結構——詳細講解《二叉樹與堆的基本概念》前言一、樹的基礎概念1.1 為什么需要樹?1.2 樹的定義與結構1.3 樹的核心術語1.3 樹的核心術語1.4 樹的表示方法(孩子兄弟表示法)結構定義為什么用孩子兄弟表示法?1.5 樹的實際應…

STAR-CCM+|雷諾數回顧

【1】引言 前序已經學習了K-epsilon湍流模型溯源的基礎知識,今天再學習一些更為基礎的知識,回顧一下雷諾數ReReRe。 【2】雷諾數定義 雷諾數公式為: ReρvDμRe\frac{\rho vD}{\mu}ReμρvD? 式中, ρ\rhoρ——流體密度&…

Java中的死鎖

鎖的合理使用能夠保證共享數據的安全性,但是 使用不當也會可能引起死鎖。1. 死鎖概念 死鎖是指兩個或兩個以上的線程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力干涉那它們都將無法推進下去,如果系統資源充足,進程的資源請求…