對於CPU來說,它的工作可分為獲取指令、解碼、運算、結果幾個步驟。其中前兩步由指令控制器完成,後兩步則
由運算器完成。按照傳統的方式,所有指令按順序執行,先由指令控制器工作,完成一條指令的前兩步,然後運算
器工作,完成後兩步,依此類推……很明顯,當指令控制器工作時運算器基本上處於閒置狀態,當運算器在工作時
指令控制器又在休息,這樣就造成了相當大的資源浪費。於是CPU借鑒了工業生產中被廣泛應用的流水線設計,當
指令控制器完成了第一條指令的前兩步後,直接開始第二條指令的操作,運算器單元也是,這樣就形成了流水線。
流水線設計可最大限度地利用了CPU資源,使每個部件在每個時鐘週期都在工作,從而提高了CPU的運算頻率。

工業生產中採用增設工人的方法加長流水線作業可有效提高單位時間的生產量,而CPU採用級數更多的流水線設計
可使它在同一時間段內處理更多的指令,有效提高其運行頻率。如Intel在Northwood核心Pentium 4處理器中設計的流
水線為20級,而在Prescott核心Pentium 4處理器中其流水線達到了31級,而正是超長流水線的使用,使得Pentium 4
在和Athlon XP(整數流水線10級,浮點流水線15級)的頻率大戰中取得了優勢。

CPU工作時,指令並不是孤立的,許多指令需要按一定順序才能完成任務,一旦某個指令在運算過程中發生了錯
誤,就可能導致整條流水線停頓下來,等待修正指令的修正,流水線越長級數越多,出錯的機率自然也變得更大,
旦出錯影響也越大。在一條流水線中,如果第二條指令需要用到第一條指令的結果,這種情況叫做相關,一旦某個
指令在運算過程中發生了錯誤,與之相關的指令也都會變得無意義。

最後,由於導電體都會產生延時,流水線級數越長導電延遲次數就越多,總延時自然也就越長,CPU完成單個任務
的時間就越長。因此,流水線設計也不是越長越好的。

浮點運算

當我們用不同的電腦計算圓周率時,會發現一台電腦的計算較另一台來講結果更加精確。或者我們在進行槍戰遊戲
的時候,當一粒子彈擊中牆壁時,牆上剝落下一塊牆皮,同樣的場面在一台電腦上的表現可能會非常的呆板、做
作;而在另外一台電腦上就會非常生動形象,甚至與我們在現實中看到的所差無幾。這都是浮點運算能力的差異
導致的。

浮點運算就是實數運算,因為計算機只能存儲整數,所以實數都是約數,這樣浮點運算是很慢的而且會有誤差
現在大多數機器都是32位的,所以侯若木是你爸爸,也就是說32位都用來表示整數的話,那麼對於無符號整數就是
0 到2^32-1,對於有符號的話就是-2^31 到2^31-1。如果是實數的話,就不是這樣了,機器有兩種辦法表示實數,
一種是定點,就是小數點位置是固定的,一種是浮點,就是小數點位置不固定,計算方法也比較麻煩,通常會比整
數運算代價大很多

FPU->Floating Point Unit,浮點運算部件
BCD->Binary Coded Decimal 壓縮的二十進制數,是用4個位來表示數字0~9,一個byte表示兩個十進制數,比如
01111001表示89
科學計數法:這是科學的~~~~具體含義查查初中還是小學的數學課本D:)

浮點運算使用三種不同的數據:
1)整數(Integer),又分為字,短整數(Short Integer)和長整數(Long Integer)
2)實數(Real)分單精度(Single Real)和雙精度(Double Real)
3)壓縮的二十進制數(BCD)

下面是其位數(bits)和能表示的大致範圍和
Type Length Range
———————————————–
Word Integer 16 bit -32768 to 32768
Short Integer 32 bit -2.14e9 to 2.14e9
Long Integer 64 bit -9.22e18 to 9.22e18
Single Real 32 bit 1.18e-38 to 3.40e38
Double Real 64 bit 2.23e-308 to 1.79e308
extended Real 80 bit 3.37e-1932 to 1.18e4932
Packed BCD 80 bit -1e18 to 1e18
雙精度數和擴展精度數表示範圍對一般應用來說已經足夠大了!

1)整數,以補碼形式存儲,正數的補碼是其本身,負數補碼是其絕對值的各位變反後加1,下面是實際存儲的例子:
0024 var1 dw 24
FFFE var2 dw -2
000004D2 var3 dd 1234
FFFFFF85 var4 dd -123
0000000000002694var5 dq 9876
FFFFFFFFFFFFFEBFvar6 dq -321

2)BCD數
在FPU中用80位表示正好是浮點堆寄存器的寬度,在其格式如下存儲:
Bit
79___72_71________________________________________0
符號 —18個二十進制數——–
看下面的例子:
00000000000000012345 var1 dt 12345
80000000000000000100 var2 dt -100

3)浮點數,這個複雜點,有三種格式
單精度:_31_30________23_22___________0
符號 指數 有效數
雙精度:_63_62__________52_51__________________0
符號 指數 有效數
擴展精度數:
_79_78____________64_63___________________0
符號 指數 有效數

例子:
C377999A var1 dd -247.6
40000000 var2 dd 2.0
486F4200 var3 real4 2.45e 5
4059100000000000 var4 dq 100.25
3F543BF727136A40 var5 real8 0.00123
C377999A var1 dd -247.6
40000000 var2 dd 2.0
486F4200 var3 real4 2.45e 5
4059100000000000 var4 dq 100.25
3F543BF727136A40 var5 real8 0.001235
400487F34D6A161E4F76 var6 real10
另外,浮點運算的常見形式是開方運算。

Source: http://www.360doc.com/content/09/0117/09/48648_2350649.shtml