2013-10-30 27 views
0

什麼是IA-32關鍵字?標籤名稱有哪些限制?目前我正在寫彙編代碼在AT & T語法 - 獎金:我甚至不知道Intel和AT語法之間有什麼區別。什麼是IA-32關鍵詞?

編輯:我主要想知道哪些限制沒有標籤,例如,print是允許的標籤名稱?

print: 
pushl %eax 
pushl $str 
call printf  # output contents of stack according to out string 
popl %eax  # Clean up the stack, remove the parameters of print 
jmp end 
+0

這個問題有點含糊。另外,我建議不要從AT&T語法開始,它是迄今爲止最令人困惑的兩個,特別是內存操作數。 – harold

+0

不幸的是,這是大學賦予我們的標準 - 我也不知道他們爲什麼選擇AT&T語法。 – wowpatrick

+0

@wowpatrick,這個區別是IMO如何處理它的一個哲學問題。英特爾使用公式化/數學方法,並從中得出「targt = value」,而其他CPU似乎使用更多的面向語言的方法,您可以說「將值移至目標」。許多較老的受歡迎的CPU都使用這個,而英特爾則是自己的。考慮到這一點,它使它變得更容易一些,但在兩者之間切換時仍然令人困惑。 – Devolus

回答

1

你所談論的限制是彙編解析器具體,所以沒有告訴其彙編你使用,你可以不回答的meaningfull方式這個問題。 對於masm來說,一般指南是您使用@@作爲本地標籤,並且標籤可能不以數字開頭。其他彙編程序使用類似的規則,但不是必需的,或者它們的細節可能會有所不同。

英特爾和AT之間的主要區別& T語法是指定顛倒。英特爾使用

mov eax, value ; eax = value 

和AT & T採用

mov value, %eax ; Move value to eax. 

顯然有更多的它,但是這是方式廣泛接聽這裏,所以我建議你閱讀手冊或谷歌。

想要開始你可以看看這裏:http://en.wikipedia.org/wiki/X86_assembly_language#Syntax找到更多。

+0

我正在使用gcc編譯x86 linux目標上的彙編代碼。感謝您的維基百科文章的鏈接,我只看了一下IA-32頁面,該頁面非常小。 – wowpatrick

+0

gcc只是一個前端,所以它可能使用nasm。(?)將C代碼編譯爲asm時,可以添加'-masm = intel'來獲取英特爾語法中的彙編程序輸出。不過,我不認爲nasm可以解決這個問題。不確定,因爲我自己不使用nasm。如果你自己編寫彙編程序,那麼你應該看看nasm的一些教程。如果你編寫一個簡單的C程序並查看輸出的內容,那也是很有幫助的。 – Devolus

+1

@Devolus:gcc使用gas。在nasm中,可以使用.intel_syntax將其切換爲intel語法。當用gdb查看gcc生成的彙編時,可以使用-diassassblyr intel(gdb命令行)將其打開。但也許我誤解了你的評論。 :) – gnometorule