《Code:The Hidden Language Of Computer Hardware and Software》 ——笔记
怎么由邏輯電路實現二進制的加法
首先二進制的加法可以拆解為兩個步驟:加與進位。
| +加法 | 0 | 1 |
| 0 | 0 | 1 |
| 1 | 1 | 0 |
| +進位 | 0 | 1 |
| 0 | 0 | 0 |
| 1 | 0 | 1 |
?
?
?
?
?
?
加這一步驟可以由異或門來完成,進位這一步驟則可以用與門來完成。
但是由這兩個邏輯門只能組成一個半加器,輸入2個值,輸出加和位與進位。這是不夠的,除了最低位的加法不需要進位配合,其他位上的加法都要進位、加位與被加一起輸入。
所以需要能有3個輸入2個輸出的全加器。這可以由兩個半加器組成。
?
減法的實現
我們可以用加法器來實現減法,首先來一次簡單的數學推導。
253 - 176
=> 253 -176 + 1000 - 1000
=> 253 - 176 + 999 + 1 - 1000
=> 253 + (999-176) +1 - 1000
(999 - 176) ?可以稱作176對9的補碼,這樣如果我們忽略-1000(確實可以忽略,因為假如我們這的輸出位只有3位那么第四位上的1是不被輸出的),那么用三的加法就可以完成一個減法運算。
(999-176) +1 則可以稱作是對10的補數。
這是十進制下的推導,同樣在二進制下一樣成立。、
所以對一個數的減法可以加上這個數的補碼(二進制就是對2求補,十進制就是對10求補)即可。
?
如何實現儲存
有種電路有兩種穩態,可記錄二進位制數字信號“1”和“0,這就是觸發器。
基本RS觸發器又稱SR鎖存器,是觸發器中最簡單的一種,也是各種其他類型觸發器的基本組成部分。兩個與非門或或非門的輸入端輸出端進行交叉耦合或首尾相接,即可構成一個基本RS觸發器。
如何實現尋址
要實現一個最基本的儲存器,光光只有儲存功能還不夠,還要能有選擇的儲存與讀取功能也就是要有尋址能力。
假如我們有32位二進制來尋址,那么我們能選擇232個單位的數據,如果一個單位的數據是一字節,那么32位尋址端的最多能儲存大約是4GB的數據。這也是為什么隨著電腦的內存越來越大,我們要換成64位的CPU與系統。因為超過4GB的儲存,32位是無法尋址到的。
?
為什么是字節與十六位進制
在早期的加法器中的位寬就是8位,現在用字節表示一組8比特數據。
一字節由于有8位,其取值范圍為00000000到11111111,也可以表示0~255之間的正整數,通過補碼也能表示-128~127范圍內的正、負整數。雖然一個8位的二進制10110110自然并直觀,但不夠簡潔。這是我們就可以使用十六位進制來表達。一個十六位進制的數能表達4位二進制即半字節。所以一個字節只需要2個十六位進制就行,10110110就可以拆分成1011與0110,即b6h(h表明這是一個十六位進制的數)表達。
?
怎么實現自動操作
首先我們要有一個振蕩器,它能在不需要人工干涉的情況下自動輸出0與1。其經常被稱為時鐘,因為通過震蕩可以進行計時。一個循環(cycle)就是振蕩器從某個初始狀態經過一段時間又回到先前的初始狀態的這一段時間,又稱為一個周期。周期的倒數就是這個震蕩器的頻率(frequency),例如20Hz就是指振蕩器每秒產生20次循環。
我們能利用振蕩器實現一個計數器,能循環計數。例如一個16位的計數器能累積000h~ffffh。
儲存在RAM中的代碼分為2種:一種是指令,讓電路執行何種操作,其往往包含要操作數據的地址。另一種是數據,要被執行的代碼。
計數器是種能連續累加的電路,但RAM中儲存的代碼往往不是連續的,那么我們需要一種方法能重新選擇開始執行代碼的位置的指令,即jump,通過重置計數器便可以實現。
什么是總線
總線(Bus)是指計算機組件間規范化的交換數據(data)的方式,即以一種通用的方式為各組件提供數據傳送和控制邏輯。從另一個角度來看,如果說主板(Mother Board)是一座城市,那么總線就像是城市里的公共汽車(bus),能按照固定行車路線,傳輸來回不停運作的比特(bit)。這些線路在同一時間內都僅能負責傳輸一個比特。因此,必須同時采用多條線路才能發送更多數據,而總線可同時傳輸的數據數就稱為寬度(width),以比特為單位,總線寬度愈大,傳輸性能就愈佳。總線的帶寬(即單位時間內可以傳輸的總數據數)為:總線帶寬 = 頻率 x 寬度(Bytes/sec)。
PC上一般有五種總線:
- 數據總線(Data Bus):在CPU與RAM之間來回傳送需要處理或是需要儲存的數據。
- 地址總線(Address Bus):用來指定在RAM(Random Access Memory)之中儲存的數據的地址。
- 控制總線(Control Bus):將微處理器控制單元(Control Unit)的信號,傳送到周邊設備,一般常見的為USB Bus和1394 Bus。
- 擴展總線(Expansion Bus):可連接擴展槽和電腦。
- 局部總線(Local Bus):取代更高速數據傳輸的擴展總線。
?定點數與浮點數
? 首先我們來介紹下BCD碼(Binary-Coded Decimal),是一種二進制的數字編碼形式,用二進制編碼的十進制代碼。用4位二進制數來表示1位十進制數中的0~9這10個數碼。由于2的補數不于BCD碼一起使用,所以BCD碼需要增加一位來表示負數。
例如-4,325,120.25可以表示為如下5個字節:
00010100 00110010 01010001 00100000 00100101
14h ? ? ? ? ?32h ? ? ? ? ?51h ? ? ? ? ?20h ? ? ? ? ?25h
在上面的例子中,小數點位置在2位小數之前。關于小數點位置的信息并沒有儲存在數字中,它的位置是固定的。
基于這個二進制的儲存和標記方式就是定點格式(fixed-point format)。
顧名思義,浮點數就是其小數點的位置不確定。其二進制的儲存方法如下:
sign是符號位,exponent是指數位(單精度8位,雙精度11位),fraction是有效位(單精度23位,雙精度52位)。
這是不是很像我們平時用到的科學計數法。
但這種方法會帶來一個問題,就是在有效位超過一定時會有精度問題。
console.log(9007199254740992 === 9007199254740993); //true console.log(9007199254740992 === 9007199254740994); //false? 是的,這相等。
因為 前兩者都會被儲存為?1.000...(52個零)×253?
?9007199254740994 ?則會被保存為1.000...0001×253?。
其影響精度的因素是有效位數,在雙精度的條件下有效位是53位(包含了符號位),由于210~103,所以雙精度下能保證15位的十進制有效數,單精度則是7位。
轉載于:https://www.cnblogs.com/chenrj23/p/4456454.html
總結
以上是生活随笔為你收集整理的《Code:The Hidden Language Of Computer Hardware and Software》 ——笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DEV控件中GridView中的复选框与
- 下一篇: get--ip