這是一個簡單的問題,但我無法在google上找到可靠的答案。x86簡單的mov指令
這是什麼意思的指令:
movl %eax, (%esi, %ecx, 4)
是它在寄存器eax
移動值的值在內存中(%esi, %ecx, 4)
指向呢?
(%esi, %ecx, 4)
用於數組。所以它意味着數組[Xs + 4i],其中Xs是數組的內存起點,而我只是整數數組中的偏移量。
這是一個簡單的問題,但我無法在google上找到可靠的答案。x86簡單的mov指令
這是什麼意思的指令:
movl %eax, (%esi, %ecx, 4)
是它在寄存器eax
移動值的值在內存中(%esi, %ecx, 4)
指向呢?
(%esi, %ecx, 4)
用於數組。所以它意味着數組[Xs + 4i],其中Xs是數組的內存起點,而我只是整數數組中的偏移量。
是正確的。這是AT語法,因此源代碼先到達目的地。因此,它將eax
寄存器的內容存儲到內存位置esi + 4*ecx
。
如果您想將此視爲一個數組,它將eax
存儲到基於esi
的4字節對象數組的ecx
th條目中。
是的,就是這樣。在AT & T語法,內存尋址寫爲:
offset(base, index, multiplier)
offset
是一個符號常量,指定偏移base
,base
是哪裏在開始寄存器,index
是寄存器多遠開始後指定陣列看,由multiplier
相乘之後,其可以是1,2,4,或8
必須指定的offset
至少一個,base
,和index
。若要在不使用base
的情況下使用index
,則需要在逗號前加上逗號((, index)
)。如果不指定multiplier
,則默認爲1
在Intel語法,這可以寫成:
[base + index*multiplier + offset]
這是比較容易理解,因爲它是一個簡單的數學問題。
只是一件事:代碼並不意味着eax代表整數數組。它可能是一個指針向量。否則,是的:源頭第一,目的地第二。自從英特爾/微軟以其他方式做到這一點之後,總是感到困惑。 –