2013年3月29日 星期五

漢明碼、CPU、暫存器

漢明碼、CPU、暫存器

○漢明碼
漢明碼(Hamming Code),是在電信領域的一種線性偵錯碼,以發明者Richard Hamming的名字命名。漢明碼在傳輸的訊息流中插入驗證碼,以偵測並更正單一位元錯誤。由於簡單的漢明編碼,它們被廣泛應用於記憶體(RAM)。其 SECDED (single error correction, double error detection) 版本另外加入一檢測位元,可以偵測兩個以下同時發生的位元錯誤,並能夠更正單一位元的錯誤。因此,當傳送端與接收端的位元樣式的漢明距離 (Hamming distance) 小於或等於1時(僅有 1 bit 發生錯誤),可實現可靠的通訊。相對的,簡單的奇偶檢驗碼除了不能糾正錯誤之外,也只能偵測出奇數個的錯誤。



○CPU的意義
中央處理器(Central Processing Unit),是電子電腦的主要裝置之一。其功能主要是解釋電腦指令以及處理電腦軟體中的資料。電腦的可編程性主要是指對中央處理器的編程。中央處理器、記憶體和輸入/輸出裝置是現代電腦的三大核心部件。20世紀70年代以前,中央處理器是由多個獨立單元構成。後來發展出由積體電路製造的中央處理器,微處理器中央處理器複雜的電路可以做成單一微小功能強大的單元。


○CPU的組成
CPU為控制整部電腦運作的中心樞紐,其內部包括控制單元、算術及邏輯單元、暫存器或記憶單元。
1.算術及邏輯運算單元(ALU):加、減、乘、除及比較、選擇、判斷等運算。
2.控制單元(CU):翻譯程式中的指令的解碼功能及協調控制各部門依指令執行使電腦自動化處理資料。
3.記憶單元(MU):儲存目前正要被處理運算的程式或資料,容量以KB為單位。
4.暫存器(Register):暫時儲存資料,如用來儲存運算的累積器。其功能與記憶體相似。


○暫存器
暫存器(Register),是中央處理器內的其中組成部份。暫存器是有限存貯容量的高速存貯部件,它們可用來暫存指令、數據和位址。在中央處理器的控制部件中,包含的暫存器有指令暫存器(IR)和程式計數器(PC)。在中央處理器的算術及邏輯部件中,包含的暫存器有累加器(ACC)。
○暫存器的種類

累加器(Accumulator) : 它負責讀取運算元做運算, 並且將結果轉移到其它暫存器或記憶體內。
程式計數器PC (Program Counter):負責儲存CPU下一次所要執行的記憶體位址
指令暫存器IR (Instruction Register):負責儲存CPU所要執行的指令
堆疊指標器SP (Stack Pointer):負責儲存CPU目前使用的堆疊位址
記憶體位址暫存器MAR(Memory address register):負責儲存CPU所要存取記憶體資料的位址
記憶體緩衝暫存器MBR(Memory buffer register):為一緩衝區,儲存要進/出記憶體資料的資料。



○機器循環週期
1.擷取指令
2.解碼
3.執行
4.存回

2013年3月15日 星期五

浮點數

浮點數

浮點數(Floating-point)表示法 = 符號 + 指數 + 假數或小數

  1. 符號 (sign):通常只是一個位元,用來表示正負符號。
  2. 指數 (exponent):有若干位元,用來表示基底的次方數。
  3. 假數或小數 (mantissa或fraction):有最多的位元,用來表示數值中真正有效的數字。



浮點數表示法中的「符號」位元,如同一般真假值般,以0表示正值,以1表示負值。「指數」位元在32位元的單倍準實數中有8位,在64位元的雙倍準實數中有11位,它們將真正小數點的位置偏移數轉化為基底的次方數
其中真正指數=偏移指數-127

故可知
偏移指數為0~255
真正指數為-127~0~128
例1 :  + 43.125
+43.125 = + 101011.001 = 1.01011001 x 2^ 5 
(由101011.001變成1.01011001x2^5的過程,稱為正規化)

所以
符號位元 = 0 (正)
指數部分 = 5 + 127= 132 = 10000100
假數部分 = 01011001000000000000000 (後方以0補滿)

所以 + 43.125 的單精度表示法 = 0 10000100 01011001000000000000000


例2 :  - 107.75
-107.75 = + 1101011.11 = 1.10101111 x 2^  6  所以
符號位元 = 1 (負)
指數部分  = 6 + 127= 133 = 10000101
假數部分 = 10101111000000000000000
所以 -107.75 的單精度表示法 = 1 10000101 10101111000000000000000

2013年3月14日 星期四

電腦常用數字系統


1.電腦常用數字系統
  1. 十進位制(decimal number system):十進位制是一種滿10進位,基底為十的數字系統,由0、1、2、3、4、5、6、7、8、9等十個數字組成,為日常生活中普遍使用的數制。例127810,其基底通常被省略,亦即1278。
  2. 二進位制(Binary number system):二進位制是一種滿2進位,基底為二的數字系統,由0和1兩個數字所組成,為電腦最基本的數字系統。通常表示時會在數字前加一"B"以便於識別,例B1101或1102
  3. 八進位制(octal number system):八進位制為逢8進位的數字系統,由0、1、2、3、4、5、6、7所組成,通常於數字前加"&"或"&O"字母符號識別,例如&O467或4568
  4. 十六進位制(hexadecimal number system):十六進位制為逢16進位的數字系統,由0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F所組成,其中A表十進位的10,B表 11,依次類推,其識別方式是於數前加"&H",例如&H123C,&HA28。或123C16
 

二、八、十、十六進位數字系統對照表

 





2.數字系統的轉換

(1)二進位數轉換成十進位數
將2進位每一位數分別乘以其位值, 再把結果加起來即可。
 
 
○由此可類推八進位十六進位轉十進位
 

(2) 十進位數轉換成二進位數


 
整數部份:將十進位整數連除以2,直到商數為0,再從下往上依次取出餘數。
故(63)10=111111(2)
 

數小部份:將十進位小數連乘以2,直到適當位數為止,從上往下依序取其整數 。
故(0.625)10=(0.101)2
 
 
 
○由此可類推神進位轉八進位和十六進位
 
 

 
 
 
(63.75)10=(63)10+(0.75)10
其中(63)10=(77)8 , (0.75)10=(0.6)8
 
 
(120.5)10=(120)10+(0.5)10
其中(120)10=(78)16  ,  (0.5)10=(0.8)16
 




 
 

(3) 十六,八進位數轉換成二進位數

當八進位要轉換成二進位時, 只要將八進位的數值轉換成每3個1組的二進位數值即可。
 

 
而十六進位要轉換成二進位時, 只要將十六進位的數值轉換成每4個1組的二進位數值即可。
 
(3) 十六進位數轉換成八進位數,八進位數轉換成十六進位數
 
按照前面所述將十六進位數轉人二進位數如此便可以再轉為八進位數
八進位數亦同理。
 
3.補數(用於表達數值負號的方法)
所謂補數(Complement)是指兩個數字加起來等於某數時,則稱該二數互為某數的補數;例如3的10補數為7,同理7的10補數為3。而補數有助減法運算用加法器來執行。而電腦的世界裡則採用二的補數法來執行運算。
 
(1)補數系統(1´s Complement)
 「1補數系統」是指如果兩數之和為1,則此兩數互為1的補數,亦即0和1互為1的補數。換言之,欲求得二進位數的1補數,只需將0變成1,1變成0即可;例如10102 的1補數為01012
 (2)補數系統(2´s Complement)
「2補數系統」的作法則是必須事先計算出該數的1補數,再加1即可。


○以2補數法求兩數相減的步驟如下:
  1. 取減數的2補數。
  2. 和被減數相加。
  3. 相加後會產生有無溢位問題,再分別處理:
  4. 若沒有溢位,表示其結果為負值,再取此結果的2補數,才能得到正確的答案。
  5. 若發生溢位,表示其結果為正值,則將此溢位捨棄,即得正確的答案。