CPU位數、操作係統位數和編譯器位數關係
編譯器是將一種語言翻譯為另一種語言的計算機程序。編譯器將源程序(source language) 編寫的程序作為輸入,而產生用目標語言(target language )編寫的等價程序。通常地,源程序為高級語言(high-level language ),如C或C + + ,而目標語言則是目標機器的目標代碼 (object code,有時也稱作機器代碼(machine code )),也就是寫在計算機機器指令中的用於運行的代碼。這一過程可以表示為:
源程序→編譯器 →目標程序。
我想來談談CPU位數與操作係統位數的問題,這二者有區別也有聯係,操作係統位數的概念是基於CPU的位數的。 CPU的位數是指CPU能一次同時寄存和處理二進製數碼的位數,這和CPU中寄存器的位數對應。 操作係統的位數是說其所依賴的指令集的位數。計算機係統一般都應有向上兼容性,所以也可有64位CPU上運行32位操作係統、32位CPU上運行16位操作係統的情況。操作係統位數應該是根據指針類型的位數來定的。整數類型不一定跟位數相等,CPU位數準確地說應該是CPU一次能夠並行處理的數據寬度,一般就是指數據總線寬度。
16位和32位早期的主要區別是寄存器的位數,內存的尋址和相應指令集的擴充。32位intel cpu都有real模式,即完全的16位模式,屏蔽掉32位的所有特性;32位模式,可以使用所有的32位特性;模擬的8086模式,可以用一個32位機模擬多個16位的8086機,他們的內存是分段隔離的。現在的操作係統使用的都是32位的模式,因為可以享受到cpu直接提供的內存的分頁和分段管理。他們提供模擬機製,實際上也是依托cpu實現的16位環境,而不是直接解釋16位代碼。由於負責生成匯編代碼的主要是編譯器,所以設計16位的編譯器在任何情況下隻能生成16位代碼。當然,這並不是說用16位的編譯器不可能生成32位的代碼,因為他完全可能被設計成在16位實模式下生成32位的代碼,從而可以在32位的機器上被執行。這就是所謂的交叉編譯。你可以使用諸如gcc這樣的交叉編譯器在16位dos環境下編譯出可以在32位linux環境下被執行的程序。
最後更新:2017-04-03 16:48:53