2012-09-02 73 views
-3

我剛開始在linux(ubuntu)上編寫彙編語言程序,並知道我有一個Intel處理器。 nasm使用類似語法和gas的語言(GNU彙編程序),使用類似於語法的AT &。但顯然我的處理器不能理解AT語法。所以我想知道這個編譯器是如何在幕後工作的?是否需要該文件並將彙編語言轉換回英特爾語法,然後在我的處理器上運行它。如果是這樣,它是如何知道我的實際處理器是什麼?(即使在安裝gcc時,我也多想了一下這個疑問,但我沒有告訴它我使用的處理器的類型,它是如何計算出來的?)在linux上編寫彙編語言程序

+1

您的編譯器不理解任何語法,這就是爲什麼您需要彙編程序。 –

+0

+1彙編程序只是將人類可讀代碼(intel語法或AT&T)轉換爲機器代碼(二進制)。 – Macmade

+3

這種困惑很可能來自於這樣一個事實,即您將「intel」解釋爲由intel支持的某些內容,而實際上它只是一種慣例。 –

回答

4

您的處理器無法理解AT語法或Intel語法。這就是爲什麼你需要一個彙編程序。彙編程序的目的是將某些語法轉換爲CPU可以理解的指令。除非彙編程序只支持一個指令集,否則必須告訴彙編程序要產生哪些指令集。

+0

好的。但是我沒有在任何地方指定指令集。我只是使用as和ld來運行它。它如何找出要生成的指令集? – user1611577

+1

Intel和AT&T不是指令集,而是Assembly的不同語法。您使用瞭解Intel語法的彙編程序(在您的情況下是NASM)。您可以使用GAS使用AT&T語法http://en.wikipedia.org/wiki/X86_assembly_language – Gunner

+1

@ user1611577:如果您未指定指令集,它將使用默認指令集進行安裝。這幾乎可以肯定是x86或x86_64,具體取決於您的安裝是32位還是64位。請注意,指令集和指令語法是兩個完全不同的東西。指令集是您可以執行的指令。指令語法是您如何指定要執行的指令。 ('as --version'會告訴你。) –