8
從我讀到的關於mov
的內容中,它將第二個參數複製到第一個參數中。那麼,這是做什麼的?x86程序集中的mov指令
movl 8(%ebp), %edx
它複製無論是在EDX的函數的第一參數(因爲一個從ebp
的8偏移量是一個參數)?
我覺得這真的意味着將第一個參數移動到edx
寄存器中,但是我在維基百科上讀到它是相反的方式?
從我讀到的關於mov
的內容中,它將第二個參數複製到第一個參數中。那麼,這是做什麼的?x86程序集中的mov指令
movl 8(%ebp), %edx
它複製無論是在EDX的函數的第一參數(因爲一個從ebp
的8偏移量是一個參數)?
我覺得這真的意味着將第一個參數移動到edx
寄存器中,但是我在維基百科上讀到它是相反的方式?
movl 8(%ebp), %edx
is in「AT & T Syntax」;在這種語法中,源頭第一,目的地第二。所以是的,你的信念是正確的。大多數文檔使用「Intel語法」,它具有相反的順序。對於新裝x86組裝的人來說,這是一個相當混亂的來源。
在Intel語法,你的指令將被寫成:
mov edx, [ebp + 8]
注意沒有%
的寄存器名稱之前,並用方括號代替括號中的地址,以及缺乏l
的後綴在指令上。這些都是知道你正在看的是哪種形式的組裝的死去的贈品。
有兩種不同的裝配方式是什麼原因?正如你所指出的那樣,這可能是新人混淆的常見原因,因爲他們使用完全不同的慣例。 – greatwolf 2011-05-07 21:58:21
@Victor T .:英特爾語法是英特爾本來指定的; AT&T語法是貝爾實驗室彙編語法的改編,旨在用於多個平臺。 – 2011-05-07 22:37:11
@Stephen:Intel Synax存在錯誤。必須有'mov [ebp + 8],edx' :) – 2011-07-12 11:12:39