簡介
一種新處理器的流行,離不開相應軟體的支持。開發新的處理器可能會因為失去相應軟體的支持而影響其推廣套用和市場前景;另一方面,得不到廣泛套用和一定市場份額的處理器也很難得到豐富的軟體支持。這種處理器和支持軟體之間相互鉗制的關係,既使得新處理器的設計不得不考慮兼容老處理器,也阻礙了新處理器的推出。在這種情況下,研究如何把支持老處理器的軟體移植到新的處理器上,使新的處理器從誕生之初就有豐富的軟體,不僅對軟體重用有重大意義,更可以開闊處理器研發的思路,促進新處理器的創新。常見方法
一般有三種方法可以把老處理器上的代碼移植到新處理器上:1. 在新處理器上提供專門的運行模式來執行老代碼,如英特爾的安騰(Itanium)處理器專門設計了執行x86代碼的硬體。2. 把源程式重新編譯到新的指令集。3. 使用軟體方法,解釋或翻譯應用程式。第一種方法,顯然無法利用新處理器的一些先進特性,失去了開發新處理器的意義,並且增加了新處理器的硬體複雜度,甚至還會影響原有代碼的執行效率;第二種方法可以達到很好的效率,但並不總是可行,因為有些程式已經沒有原始碼,有些程式依賴於共享代碼庫,而這些共享代碼以目標代碼形式出現,不一定能得到源碼,有些源程式語言沒有編譯到新指令集的編譯器,此外作業系統的差異還可能使得只有修改原始碼才能重新編譯這些例程(比如與圖形相關的代碼)。因此第三種方法,稱之為二進制翻譯(Binary Translation)應運而生。它是一種直接翻譯可執行二進制程式的技術,能夠把一種處理器上的二進制程式翻譯到另外一種處理器上執行。它使得不同處理器之間的二進制程式可以很容易地相互移植,擴大了硬體/軟體的適用範圍,有助於打破前面提到的處理器和支持軟體之間互相掣肘影響創新的局面。二進制翻譯也是一種編譯技術,它與傳統編譯的差別在於其編譯處理對象不同。傳統編譯處理的對象是某一種高級語言,經過編譯處理生成某種機器的目標代碼;二進制翻譯處理的對象是某種機器的二進制代碼,該二進制代碼是經過傳統編譯生成的,經過二進制翻譯處理後生成另一種機器的二進制代碼。按照傳統編譯程式前端、中端和後端的劃分,我們可以理解為二進制翻譯是擁有特殊前端的編譯器。四則運算加法:0+0=0,0+1=1,1+0=1,1+1=10
減法:0-0=0,1-0=1,1-1=0,0-1=1
乘法:0×0=0,0×1=0,1×0=0,1×1=1
除法:0÷1=0,1÷1=1, 1÷0無意義,0÷0無意義
相關轉換
二進制轉換
二進制數第0位的權值是2的0次方,第1位的權值是2的1次方。
例如,設有一個二進制數:0110 0100(由後至前分別為第0位,第1位……第7位),轉換為10進制為:
下面是豎式:
01100 100 換算成 十進制
第0位 0 x 2^0 = 0
第1位 0 x 2^1 = 0
第2位 1 x 2^2 = 4
第3位 0 x 2^3 = 0
第4位 0 x 2^4 = 0
第5位 1 x 2^5 = 32
第6位 1 x 2^6 = 64
第7位 0 x 2^7 = 0
--------------------------
(01100 100)B=(100)D
註:數字後面相應的字母表示不同的進位制。B表示二進制,O表示八進制,D表示十進制,H表示十六進制。
八進制轉換
八進制就是逢8進1。
八進制數採用 0~7這八數來表達一個數。
八進制數第0位的權值為8的0次方,第1位權值為8的1次方,第2位權值為8的2次方……
所以,設有一個八進制數:1507,轉換為十進制為:
用豎式表示:
1507換算成十進制。
第0位 7 x 8^0 = 7
第1位 0 x 8^1 = 0
第2位 5 x 8^2 = 320
第3位 1 x 8^3 = 512
--------------------------
(1507)O=(839)D
同樣,我們也可以用橫式直接計算:
7 X 8^0 + 0 X 8^1 + 5 X 8^2 + 1 x 8^3 = (839)D
結果是,八進制數1507 轉換成十進制數為 839
十六進制轉換為十進制
(ABC.8C)H=10x16^2+11x16^1+12x16^0+8x16^-1+12x16^-2
=2560+176+12+0.5+0.046875
=(2748.546875)D
十進制轉換
1.整數部分除R取余
例:(125)D=(1111101)B
註:餘數中最後得到的餘數為最高位,最先得到的餘數為最低位,從高到低依次排列。
2.小數部分乘R取整
例:(0.25)D
0.25
X 2
_______________
0.50 (整數部分0為高位)
X 2 ↓
_______________ ↓
1.00 (整數部分1為低位)
(0.25)D=(0.01)B
註:整數的轉換是精確的,小數的轉換可能出現無窮小數或循環小數的情況。此時需要進行捨入處理以截斷,所以小數的轉換可能略有偏差。箭頭表示由高位到低位的趨勢。