2011-09-22 226 views
0

這是一個簡單的問題,但我無法在google上找到可靠的答案。x86簡單的mov指令

這是什麼意思的指令:

movl %eax, (%esi, %ecx, 4) 

是它在寄存器eax移動值的值在內存中(%esi, %ecx, 4)指向呢?

(%esi, %ecx, 4)用於數組。所以它意味着數組[Xs + 4i],其中Xs是數組的內存起點,而我只是整數數組中的偏移量。

+0

只是一件事:代碼並不意味着eax代表整數數組。它可能是一個指針向量。否則,是的:源頭第一,目的地第二。自從英特爾/微軟以其他方式做到這一點之後,總是感到困惑。 –

回答

4

是正確的。這是AT語法,因此源代碼先到達目的地。因此,它將eax寄存器的內容存儲到內存位置esi + 4*ecx

如果您想將此視爲一個數組,它將eax存儲到基於esi的4字節對象數組的ecx th條目中。

2

是的,就是這樣。在AT & T語法,內存尋址寫爲:

offset(base, index, multiplier) 

offset是一個符號常量,指定偏移basebase是哪裏在開始寄存器,index是寄存器多遠開始後指定陣列看,由multiplier相乘之後,其可以是1,2,4,或8

必須指定的offset至少一個,base,和index。若要在不使用base的情況下使用index,則需要在逗號前加上逗號((, index))。如果不指定multiplier,則默認爲1

在Intel語法,這可以寫成:

[base + index*multiplier + offset] 

這是比較容易理解,因爲它是一個簡單的數學問題。