文章目錄
- 一、計算機硬體的基本組成
- 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、早期的馮諾依曼機:
以運算器為中心,削弱了運算器的計算能力,

帶箭頭的實線代表資料線(在兩部件間進行資料交流),虛線表示控制線和反饋線(由控制器下達控制命令)
通過上圖,我們可以總結出馮諾依曼機的幾個特點:
- 計算機由五大部件組成:運算器、存盤器、控制器、I/O設備(輸入、輸出設備)
- 指令和資料皆采用二進制來表示
- 存盤程式
為什么說軟體和硬體在邏輯上是等效的呢?
比如說乘法運算,我們可以設計一個硬體專門執行乘法運算,也可以通過累加的程式進行運算,最終所得到的結果是一樣的,只是程式累加的方式明顯累贅了很多,
2、 現代計算機:
以存盤器為中心

其中,運算器和控制器可以統稱為CPU,CPU+主存盤器就稱為了主機,

要注意主存和輔存的區別:主存是位于主機中的,而輔存是屬于I/O設備里的,我們平時手機上的APP就是裝在輔存上的,只有當app要啟動的時候,才會把相關資料、程式檔案讀到主存里,
3、對基本部件的細分理解:
(1)主存盤器

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

MAR中的地址上都對應著一個存盤單元,存盤單元存盤著存盤字,存盤字是一串二進制代碼(資料),
MAR的位數反映了存盤單元的個數,一個笛之愛對應一個存盤單元,
MDR的位數和存盤字長一樣,
兩種操作:
- 讀——其他部件需要讀取主存中的內容
該部件將需要資料的地址給MAR,MAR再傳到存盤體,取出資料交由MDR,交給該部件, - 寫——其他部件需要將內容保存進主存
該部件將需要保存的資料地址傳給MAR,資料傳給MDR,經主存內部操作后,即可將資料存入指定地址內,
注意:有的資料也會將MAR、MDR歸到CPU中
(2)運算器

ACC(累加器):存放運算元/運算結果
MQ(乘商暫存器):在乘、除法運算時,用于存放運算元/運算結果
X(通用暫存器):存放運算元
ALU(算術邏輯單元):實作算術運算/邏輯運算
(3)控制器

CU(控制單元):分析指令(分析操作碼),給出控制信號
IR(指令暫存器):存放當前執行的指令,拆解為操作碼和地址碼
PC (程式計數器):存放下一條指令地址,自動加1
(例子)指令周期

公共周期:(取指,分析)
- (PC)->MAR
- MAR經過存盤體將資料通過MDR回傳:(MDR)->IR
- OP(IR)->CU
- 根據所得不同的操作碼,才決定最終地址碼應該送往何處
二、數制及其轉換
基數: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.反碼
一些課本上的描述確實挺復雜的,所以這里就不采用課本的講法了,
反碼只是原碼轉換為補碼的一個中間狀態,實際上反碼并沒有什么太大的用途,計算機不會采用反碼進行加減乘除各種運算,
其實在反碼這一塊只需要記住兩句話,即可:
- 正數的反碼和原碼一樣
- 負數的反碼:將原碼各位取反,符號位除外
注意:反碼對0的表示也有+0、-0兩種表示方法,
ii.補碼
- 正數的補碼和原碼一樣
- 負數的補碼=反碼末位+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.算數移位(原碼)
移位:通過改變各個數碼位和小數點的相對位置,從而改變各數碼位的位權,可用移位運算實作乘法、除法,
比如在十進制下:
小數點右移:
- 1001.123小數點右移一位變成了10011.23,相當于乘以10
- 1001.123小數點右移兩位變成了100112.3,相當于乘以100(10的平方)
- 1001.123小數點右移三位變成了1001123.0,相當于乘以1000(10的三次方)
小數點左移: - 1001.123小數點左移一位變成了1001.123,相當于除以10
- 1001.123小數點左移兩位變成了10.01123,相當于除以100
- ,,,
在原碼中,因為定點數,小數點的位置不能動,但是山不動水可動,我們可以對數字進行移動,
原碼算數右移:

原碼算數左移:

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

ii.算數移位(反碼)

其實也很好理解,正數的原碼、反碼一樣,所以算數移位的方法是一樣的,負數的反碼是原碼取反,而移位的時候原碼是補0的,故反碼則是0取反為1,補1.
iii.算數移位(補碼)

iiii.總結:

左移相當于乘以2,右移相當于除以2
由于位數有限,因此有時候無法用算數移位精確地等效乘除法,
(2)邏輯移位
邏輯右移:高位補0,低位舍棄,
邏輯左移:低位補0,高位舍棄,
綜上,邏輯移位可以看做是對“無符號數”的算數移位,
(3)回圈移位
移出的位補充到空缺的位上
4、補碼的加減運算
(1)運算

要注意:補碼的加減運算和原碼、補碼之間的轉換不同,后者是符號位1不變,其余取反+1,而前者是符號位也參與運算的,
補碼轉變為原碼:
- 符號位不變,其余各位取反+1
- 從右到左,找到第一個非0的位,該位及其右邊的位和原碼一樣,不需要改變,該位的左邊和反碼一樣,直接取反即可
(2)溢位判斷

每個位元組都有一個表示范圍,當超過該范圍的上界的時候叫上溢,反之叫下溢,

5、 乘法運算
(1)原碼的乘法運算


(2)原碼的乘法運算


(3)兩種乘法的總結

6、除法運算
(1)原碼的除法
i.恢復余數法

i.加減交替法


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

(3)總結:

四、浮點數(對定點數的一個擴展)
定點小數總有一個范圍,范圍小,能表示的資料有限,浮點數是對定點數的一個擴展,使得范圍擴大(類似科學計數法)



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

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