2011-05-04 127 views
8

從我讀到的關於mov的內容中,它將第二個參數複製到第一個參數中。那麼,這是做什麼的?x86程序集中的mov指令

 
movl 8(%ebp), %edx 

它複製無論是在EDX的函數的第一參數(因爲一個從ebp的8偏移量是一個參數)?

我覺得這真的意味着將第一個參數移動到edx寄存器中,但是我在維基百科上讀到它是相反的方式?

回答

15
movl 8(%ebp), %edx 

is in「AT & T Syntax」;在這種語法中,源頭第一,目的地第二。所以是的,你的信念是正確的。大多數文檔使用「Intel語法」,它具有相反的順序。對於新裝x86組裝的人來說,這是一個相當混亂的來源。

在Intel語法,你的指令將被寫成:

mov edx, [ebp + 8] 

注意沒有%的寄存器名稱之前,並用方括號代替括號中的地址,以及缺乏l的後綴在指令上。這些都是知道你正在看的是哪種形式的組裝的死去的贈品。

+0

有兩種不同的裝配方式是什麼原因?正如你所指出的那樣,這可能是新人混淆的常見原因,因爲他們使用完全不同的慣例。 – greatwolf 2011-05-07 21:58:21

+0

@Victor T .:英特爾語法是英特爾本來指定的; AT&T語法是貝爾實驗室彙編語法的改編,旨在用於多個平臺。 – 2011-05-07 22:37:11

+0

@Stephen:Intel Synax存在錯誤。必須有'mov [ebp + 8],edx' :) – 2011-07-12 11:12:39