2013-07-16 61 views
0

是什麼這種類型的代碼的區別:不同種類的裝配?

.text 
    .globl main 
    .type main, @function 
main: 
    movl $0, %eax 
    movl $0, (%esp) 
    call exit 

和這種類型的代碼:

section .text 
    global _start 
_start: 
    mov edx, eax 

哪個更傳統和優化更好?

+1

它們不是兩種不同的類型,它是用兩種不同的語法編寫的相同程序集(英特爾彙編程序)。 – m0skit0

+0

嗯,尋找什麼樣的優化?這是我們在這裏討論的彙編語言。在達到這一點之前,應該先完成優化。 –

回答

3

第一個是AT & T組裝款式,第二個是Intel組裝款式。沒有真正的重大差異。例如,GCC通常以ATT型產生組裝(參見GNU彙編器GAS),而Microsoft和Intel編譯器將產生Intel組裝式(參見MASM,NASM)輸出。

我更喜歡英特爾風格,因爲它對我來說似乎更清晰,但我認爲這是個人品味的問題。

有一個關於兩種風格差異的文檔可能會有幫助。

http://simon.baymoo.org/universe/tools/symset/symset.txt

2

然後首先被稱爲AT & T型組件,是一種可憎的。

第二種是英特爾風格,英特爾在x86指令集文檔中使用它。

+0

爲什麼它是可憎的?不會像intel風格那樣純粹翻譯成機器代碼? – user2586185

+1

@ user2586185:對我個人而言:特殊字符混亂 – peterchen

+2

+1 - AT&T是可憎的,是純粹的邪惡。 :P – johnfound

0

第一寫入AT對GAS & T語法。第二個是用英特爾語法編寫的,似乎是用於NASM的。

我會說英特爾語法更傳統,因爲他們是x86處理器的設計者。儘管您仍然看到AT & T語法被使用。沒有一個比另一個更適合優化。