2014-09-22 29 views
3

1)我想知道我們是否可以編寫一個C程序來了解機器的指令集體系結構。如何找出哪些指令集架構機器動態實現?

2)如何操作系統弄清楚什麼指令集架構(ISA)的計算機中安裝上運行?如果操作系統支持兩種不同的ISA,那麼安裝文件是否包含兩種體系結構的彙編代碼?

+1

有沒有什麼我沒有看到這個問題? C程序將被編譯成什麼指令集?如果CPU指令集不是它編譯的內容,它將如何運行? – 2014-09-22 07:35:22

+1

其實我不知道你是否可以這樣做,所以問了 – user2626445 2014-09-23 14:01:11

+0

你可以有一個可在任何x86_64類機器上運行的x86_64編譯程序,但可以有幾個更高的ISA(即SSE,AVX512等)你對。。。感興趣。 – 2017-07-28 22:16:15

回答

4

1)我想知道我們是否可以編寫一個C程序來了解關於機器指令集體系結構的 。

A C程序需要一些編譯器來編譯,這將轉換代碼轉換爲機器語言,其是用於不同的體系結構等Sparc, x86, ARM等不同。所以,如果你不知道體系結構的指令集,你將無法運行C程序。 C二進制文件對於不同的體系結構是不同的。

但是,有一件事你可以,如果你知道有關的系統架構和做,如果你正在使用的系統上的編譯器。您可以嘗試在不同的操作系統上執行這些指令,以獲取有關不同架構的詳細信息。

您可以通過使用

set在Windows命令提示符(CMD)

cat /proc/cpuinfo的Unix/Linux終端上獲取該計算機的系統架構的細節(而不是指令集的詳細信息)

現在根據系統的操作系統編寫一個C程序在cmd /終端執行這個命令。

2)操作系統在安裝過程中如何計算指令集 計算機運行的體系結構(ISA)?如果OS 是爲了支持兩種不同的ISA,那麼安裝文件是否包含針對兩種體系結構的彙編代碼 ?

操作系統本身由在特定體系結構上運行的預編譯二進制文件組成。幾乎初始化操作系統的文件都是直接可執行文件。如果體系結構的指令集與操作系統的二進制文件不兼容,則會報告安裝錯誤!這個架構的主要工作就是運行這些二進制文件,而不是別的。

如果OS是支持兩種不同的ISA,然後也這是越來越安裝它的架構有隻運行這些二進制文件按在OS代碼指令。

下面嘗試了一種類比方法。我只是一個學習者,所以我沒有太多的組裝/機器級別的編碼經驗。我只有在計算機體系結構和8086編程方面的知識才嘗試過這個問題。

例如: -

MOV AX,[76h] // lets' say opcode is 1001010 10011001, but it is probably wrong 

在這裏,這是x86的系統/架構!它不適合Sparc處理器,因爲它具有不同的指令集,因此,您的操作系統將不會安裝在Sparc處理器上。

我希望這很清楚。如果您仍有疑問,請在下面留言!