主頁 > 軟體設計 > 【計算機組成原理】——期末不掛科系列(持續更新ing)

【計算機組成原理】——期末不掛科系列(持續更新ing)

2022-01-03 08:11:42 軟體設計

文章目錄

  • 一、計算機硬體的基本組成
    • 1、早期的馮諾依曼機:
    • 2、 現代計算機:
    • 3、對基本部件的細分理解:
      • (1)主存盤器
      • (2)運算器
      • (3)控制器
      • (例子)指令周期
  • 二、數制及其轉換
    • 1、各進制轉換為十進制:
    • 2、二進制和八進制、十六進制的相互轉換
      • (1)二進制轉換為八進制
      • (2)二進制轉換為十六進制
      • (3)八進制轉換為二進制
      • (4)十六進制轉換為二進制
    • 3、十進制轉換為二進制
      • (1)整數部分
      • (2)小數部分
      • (3)十進制轉為二進制(拼湊法)
      • (4)總結:
  • 三、定點數
    • 1、定點數的表示
      • (1)無符號數(unsigned):
      • (2)有符號數:
        • i.原碼
        • ii.反碼
        • ii.補碼
        • iii.移碼
      • (3)原碼、補碼、移碼的作用
        • i.原碼計算的缺點
        • ii.移碼的作用
    • 2、定點數的計算
      • (1)算數移位
        • i.算數移位(原碼)
        • ii.算數移位(反碼)
        • iii.算數移位(補碼)
        • iiii.總結:
      • (2)邏輯移位
      • (3)回圈移位
    • 4、補碼的加減運算
      • (1)運算
      • (2)溢位判斷
    • 5、 乘法運算
      • (1)原碼的乘法運算
      • (2)原碼的乘法運算
      • (3)兩種乘法的總結
    • 6、除法運算
      • (1)原碼的除法
        • i.恢復余數法
        • i.加減交替法
      • (2)補碼的除法(加減交替法)
      • (3)總結:
  • 四、浮點數(對定點數的一個擴展)


一、計算機硬體的基本組成

未解決早期計算機不會自動執行后面指令的問題,馮*諾依曼等人提出存盤程式的概念:將指令以二進制代碼的形式
事先輸入計算機的主存盤器,然后按其在存盤器中的首地址執行程式的第一條指令,以后就按程式的規定順序執行其他指令,直到程式執行結束,

1、早期的馮諾依曼機:

以運算器為中心,削弱了運算器的計算能力,
在這里插入圖片描述
帶箭頭的實線代表資料線(在兩部件間進行資料交流),虛線表示控制線和反饋線(由控制器下達控制命令)
通過上圖,我們可以總結出馮諾依曼機的幾個特點:

  1. 計算機由五大部件組成:運算器、存盤器、控制器、I/O設備(輸入、輸出設備)
  2. 指令和資料皆采用二進制來表示
  3. 存盤程式

為什么說軟體和硬體在邏輯上是等效的呢?
比如說乘法運算,我們可以設計一個硬體專門執行乘法運算,也可以通過累加的程式進行運算,最終所得到的結果是一樣的,只是程式累加的方式明顯累贅了很多,

2、 現代計算機:

以存盤器為中心
在這里插入圖片描述
其中,運算器和控制器可以統稱為CPU,CPU+主存盤器就稱為了主機,
在這里插入圖片描述
要注意主存和輔存的區別:主存是位于主機中的,而輔存是屬于I/O設備里的,我們平時手機上的APP就是裝在輔存上的,只有當app要啟動的時候,才會把相關資料、程式檔案讀到主存里,

3、對基本部件的細分理解:

(1)主存盤器

在這里插入圖片描述
主存盤器包括存盤體和MAR、MDR,
存盤體中是一個倉庫,里面有各種各樣的架子,按一定順序編號,存盤的每一個資料都有屬于自己唯一的地址編號,
在這里插入圖片描述

MAR中的地址上都對應著一個存盤單元,存盤單元存盤著存盤字,存盤字是一串二進制代碼(資料),
MAR的位數反映了存盤單元的個數,一個笛之愛對應一個存盤單元,
MDR的位數和存盤字長一樣,
兩種操作:

  1. 讀——其他部件需要讀取主存中的內容
    該部件將需要資料的地址給MAR,MAR再傳到存盤體,取出資料交由MDR,交給該部件,
  2. 寫——其他部件需要將內容保存進主存
    該部件將需要保存的資料地址傳給MAR,資料傳給MDR,經主存內部操作后,即可將資料存入指定地址內,

注意:有的資料也會將MAR、MDR歸到CPU中

(2)運算器

在這里插入圖片描述
ACC(累加器):存放運算元/運算結果
MQ(乘商暫存器):在乘、除法運算時,用于存放運算元/運算結果
X(通用暫存器):存放運算元
ALU(算術邏輯單元):實作算術運算/邏輯運算

(3)控制器

在這里插入圖片描述
CU(控制單元):分析指令(分析操作碼),給出控制信號
IR(指令暫存器):存放當前執行的指令,拆解為操作碼和地址碼
PC (程式計數器):存放下一條指令地址,自動加1

(例子)指令周期

在這里插入圖片描述
公共周期:(取指,分析)

  1. (PC)->MAR
  2. MAR經過存盤體將資料通過MDR回傳:(MDR)->IR
  3. OP(IR)->CU
  4. 根據所得不同的操作碼,才決定最終地址碼應該送往何處

二、數制及其轉換

基數:r進制的基數是r,比如十進制的基數是10——0~9共十個數
位權:每一位代表的權值,比如十進制——個十百千萬,,,

1、各進制轉換為十進制:

方法:將各位上的數字乘上位權之和
在這里插入圖片描述

2、二進制和八進制、十六進制的相互轉換

(1)二進制轉換為八進制

方法:將二進制數以小數點為界限,向兩邊,三位為一組,不夠則補0,最后將每一組算出其十進制下的值,
在這里插入圖片描述

(2)二進制轉換為十六進制

方法:將二進制數以小數點為界限,向兩邊,四位為一組,不夠則補0,最后將每一組算出其十進制下的值,

在這里插入圖片描述

(3)八進制轉換為二進制

方法:將八進制數每一位對應展開為三位二進制的數
在這里插入圖片描述

(4)十六進制轉換為二進制

方法:將十六進制數每一位對應展開為四位二進制的數
在這里插入圖片描述

3、十進制轉換為二進制

十進制轉換為其他進制,方法類似

(1)整數部分

除基求余法:
在這里插入圖片描述

(2)小數部分

乘基取整法:
在這里插入圖片描述

(3)十進制轉為二進制(拼湊法)

比如十進制260.75轉換為二進制
在這里插入圖片描述

(4)總結:

其實數制轉換最主要的還是二進制和十進制間的轉換,二進制轉換為十進制的方法是各進制轉換為十進制的通用方法,而二進制可以非常方便的轉換為八進制和十六進制,所以如果需要將十進制轉換為八進制或者十六進制的時候,我們可以先將十進制轉換為二進制,再將二進制轉換為對應的八進制或者十六進制,

三、定點數

1、定點數的表示

在這里插入圖片描述

(1)無符號數(unsigned):

整個機器字長的全部二進制位均為數值位,沒有符號位,相當于數的絕對值

無符號unsigned只能修飾int、long等整形變數,不能修飾小數,
在這里插入圖片描述

(2)有符號數:

定點整數、定點小數
設定最高位為符號位0為正1為負!

i.原碼

在這里插入圖片描述
這里特別要注意的是最高位如果是1的時候,要時刻謹記它是符號位,不是數值,尤其是定點小數的原碼表示的時候!!!

比如原碼:1.1000表示的真值是-0.5,而不是1.5,更不是-1.5

原碼表示真值0有兩種表示形式+0、-0

ii.反碼

一些課本上的描述確實挺復雜的,所以這里就不采用課本的講法了,

反碼只是原碼轉換為補碼的一個中間狀態,實際上反碼并沒有什么太大的用途,計算機不會采用反碼進行加減乘除各種運算,

其實在反碼這一塊只需要記住兩句話,即可:

  1. 正數的反碼和原碼一樣
  2. 負數的反碼:將原碼各位取反,符號位除外

注意:反碼對0的表示也有+0、-0兩種表示方法,

ii.補碼

  1. 正數的補碼和原碼一樣
  2. 負數的補碼=反碼末位+1=除符號位,原碼各位取反+1

注意:反碼對0的表示只有0一種表示方法,

補碼轉原碼:各位取反末位+1,符號位除外

iii.移碼

移碼是在補碼的基礎上將符號位取反,但是有一點需要注意的是:移碼只能用于表示整數,

(3)原碼、補碼、移碼的作用

i.原碼計算的缺點

在這里插入圖片描述

如果是00001110和10001110是兩真值(無符號位)相加是可以得到正確結果的,可以原碼中最高位表示符號位,,,
正數的原碼的想加是沒問題的,可是一正一負,就會出現計算結果錯誤了,但是這時候可采用另一種方法,將一正一負想加轉換為減法運算即可得到正確結果,然而這卻涉及到一個高成本的問題,畢竟減法器比加法器可是要復雜多了,

這時候,就有人靈光一閃:可以將減法運算轉換成加法運算嗎?該怎么轉換??

請添加圖片描述
順時針方向為加,逆時針方向為減

mod方法:對于兩個數只要兩絕對值相加等于模,則說明兩個數等價,
比如:
|A|+|B|=C,則說明AmodC=B,BmodC=A
上面時鐘的例題同樣也是如此,
|-3|+9=12,則-3mod12=9,9mod12=9
這時候說明-3和9是等價的,即當前數加上9和減去3是等效的,也就是說明此時的減3可以轉換為加9,減法運算也就轉換為加法運算了,
在這里插入圖片描述
將一個負數的原碼轉換成補碼之后,就可以實作減變加!

ii.移碼的作用

在這里插入圖片描述
移碼只能表示整數,從最高位開始逐位比較,大的該數大,

2、定點數的計算

(1)算數移位

在這里插入圖片描述

i.算數移位(原碼)

移位:通過改變各個數碼位和小數點的相對位置,從而改變各數碼位的位權,可用移位運算實作乘法、除法,
比如在十進制下:
小數點右移:

  1. 1001.123小數點右移一位變成了10011.23,相當于乘以10
  2. 1001.123小數點右移兩位變成了100112.3,相當于乘以100(10的平方)
  3. 1001.123小數點右移三位變成了1001123.0,相當于乘以1000(10的三次方)
    小數點左移:
  4. 1001.123小數點左移一位變成了1001.123,相當于除以10
  5. 1001.123小數點左移兩位變成了10.01123,相當于除以100
  6. ,,,

在原碼中,因為定點數,小數點的位置不能動,但是山不動水可動,我們可以對數字進行移動,
原碼算數右移:
在這里插入圖片描述
原碼算數左移:
在這里插入圖片描述

以上的操作都是基于定點整數而言,那對于定點小數又是怎樣的呢?

其實是同理的:
在這里插入圖片描述

ii.算數移位(反碼)

在這里插入圖片描述
其實也很好理解,正數的原碼、反碼一樣,所以算數移位的方法是一樣的,負數的反碼是原碼取反,而移位的時候原碼是補0的,故反碼則是0取反為1,補1.

iii.算數移位(補碼)

在這里插入圖片描述

iiii.總結:

在這里插入圖片描述
左移相當于乘以2,右移相當于除以2
由于位數有限,因此有時候無法用算數移位精確地等效乘除法,

(2)邏輯移位

邏輯右移:高位補0,低位舍棄,
邏輯左移:低位補0,高位舍棄,
綜上,邏輯移位可以看做是對“無符號數”的算數移位,

(3)回圈移位

移出的位補充到空缺的位上

4、補碼的加減運算

(1)運算

在這里插入圖片描述
要注意:補碼的加減運算和原碼、補碼之間的轉換不同,后者是符號位1不變,其余取反+1,而前者是符號位也參與運算的,

補碼轉變為原碼:

  1. 符號位不變,其余各位取反+1
  2. 從右到左,找到第一個非0的位,該位及其右邊的位和原碼一樣,不需要改變,該位的左邊和反碼一樣,直接取反即可

(2)溢位判斷

在這里插入圖片描述
每個位元組都有一個表示范圍,當超過該范圍的上界的時候叫上溢,反之叫下溢,
在這里插入圖片描述

5、 乘法運算

(1)原碼的乘法運算

在這里插入圖片描述
在這里插入圖片描述

(2)原碼的乘法運算

在這里插入圖片描述
在這里插入圖片描述

(3)兩種乘法的總結

在這里插入圖片描述

6、除法運算

(1)原碼的除法

i.恢復余數法

在這里插入圖片描述

i.加減交替法

在這里插入圖片描述
在這里插入圖片描述

(2)補碼的除法(加減交替法)

在這里插入圖片描述

(3)總結:

在這里插入圖片描述

四、浮點數(對定點數的一個擴展)

定點小數總有一個范圍,范圍小,能表示的資料有限,浮點數是對定點數的一個擴展,使得范圍擴大(類似科學計數法)
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
浮點數中會存在兩種問題,類似是十進制科學計數法中:

  1. 123.12*10^6
  2. 0.00123.12*10^11
    雖然在手寫的情況下發現除了形式不同之外并沒有什么大不同,但是在計算機中每一個存盤都是有限的(比如8B)在以上兩種情況(過多地存盤無效位)就有可能會發生溢位,導致精度丟失,
    因此,引進了浮點數尾數的規格化:

在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/401604.html

標籤:其他

上一篇:Aria2遠程下載方案部署(CentOS7+Aria+AriaNG+Nginx)

下一篇:騰訊云Ubuntu18.04部署Django應用(Django 3)完整教程

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more